1.98. storepath_int( integer, integer, text, integer )

関数特性

言語: PLPGSQL

戻り値: integer

FUNCTION storePath (pa_server, pa_client, pa_conninfo, pa_connretry) ノード pa_client が DSN pa_conninfo を使用してノード pa_server にアクセスできるように示す STORE_PATH 事象を処理します。

declare
	p_pa_server		alias for $1;
	p_pa_client		alias for $2;
	p_pa_conninfo		alias for $3;
	p_pa_connretry		alias for $4;
	v_dummy			int4;
begin
	-- ----
	-- 中枢構成のロックを取得
	-- ----
	lock table sl_config_lock;

	-- ----
	-- 経路が既に存在するか検査
	-- ----
	select 1 into v_dummy
			from sl_path
			where pa_server = p_pa_server
			and pa_client = p_pa_client
			for update;
	if found then
		-- ----
		-- 経路が存在、 pa_conninfo を更新
		-- ----
		update sl_path
				set pa_conninfo = p_pa_conninfo,
					pa_connretry = p_pa_connretry
				where pa_server = p_pa_server
				and pa_client = p_pa_client;
	else
		-- ----
		-- 新規経路
		--
		-- これに関連したノードに付いて知る以前に STORE_PATH 事象を
		-- 受け取る場合、これらのノードを未決定なものとして
		-- 生成します。
		-- ----
		if not exists (select 1 from sl_node
						where no_id = p_pa_server) then
			perform storeNode_int (p_pa_server, '<event pending>', 'f');
		end if;
		if not exists (select 1 from sl_node
						where no_id = p_pa_client) then
			perform storeNode_int (p_pa_client, '<event pending>', 'f');
		end if;
		insert into sl_path
				(pa_server, pa_client, pa_conninfo, pa_connretry) values
				(p_pa_server, p_pa_client, p_pa_conninfo, p_pa_connretry);
	end if;

	-- sl_listen テーブルの書き換え
	perform RebuildListenEntries();

	return 0;
end;