dropnode_int(integer)

6.54. dropnode_int(integer)

Function Properties

Language: PLPGSQL

Return Type: integer

internal function to process DROP_NODE event to drop node node_id from replication

declare
	p_no_id			alias for $1;
	v_tab_row		record;
begin
	-- ----
	-- Grab the central configuration lock
	-- ----
	lock table sl_config_lock;

	-- ----
	-- If the dropped node is a remote node, clean the configuration
	-- from all traces for it.
	-- ----
	if p_no_id <> getLocalNodeId('_schemadoc') then
		delete from sl_subscribe
				where sub_receiver = p_no_id;
		delete from sl_listen
				where li_origin = p_no_id
					or li_provider = p_no_id
					or li_receiver = p_no_id;
		delete from sl_path
				where pa_server = p_no_id
					or pa_client = p_no_id;
		delete from sl_confirm
				where con_origin = p_no_id
					or con_received = p_no_id;
		delete from sl_event
				where ev_origin = p_no_id;
		delete from sl_node
				where no_id = p_no_id;

		return p_no_id;
	end if;

	-- ----
	-- This is us ... deactivate the node for now, the daemon
	-- will call uninstallNode() in a separate transaction.
	-- ----
	update sl_node
			set no_active = false
			where no_id = p_no_id;

	-- Rewrite sl_listen table
	perform RebuildListenEntries();

	return p_no_id;
end;