Christopher B. Browne's Home Page
cbbrowne@acm.org

8.63. enablesubscription_int(integer, integer, integer)

Function Properties

PLPGSQLinteger
enableSubscription_int (sub_set, sub_provider, sub_receiver) Internal function to enable subscription of node sub_receiver to set sub_set via node sub_provider. slon does most of the work; all we need do here is to remember that it happened. The function updates sl_subscribe, indicating that the subscription has become active.
    declare
    	p_sub_set			alias for $1;
    	p_sub_provider		alias for $2;
    	p_sub_receiver		alias for $3;
    	v_n					int4;
    begin
    	-- ----
    	-- Grab the central configuration lock
    	-- ----
    	lock table sl_config_lock;
    
    	-- ----
    	-- The real work is done in the replication engine. All
    	-- we have to do here is remembering that it happened.
    	-- ----
    
    	-- ----
    	-- Well, not only ... we might be missing an important event here
    	-- ----
    	if not exists (select true from sl_path
    			where pa_server = p_sub_provider
    			and pa_client = p_sub_receiver)
    	then
    		insert into sl_path
    				(pa_server, pa_client, pa_conninfo, pa_connretry)
    				values 
    				(p_sub_provider, p_sub_receiver, 
    				'<event pending>', 10);
    	end if;
    
    	update sl_subscribe
    			set sub_active = 't'
    			where sub_set = p_sub_set
    			and sub_receiver = p_sub_receiver;
    	get diagnostics v_n = row_count;
    	if v_n = 0 then
    		insert into sl_subscribe
    				(sub_set, sub_provider, sub_receiver,
    				sub_forward, sub_active)
    				values
    				(p_sub_set, p_sub_provider, p_sub_receiver,
    				false, true);
    	end if;
    
    	-- Rewrite sl_listen table
    	perform RebuildListenEntries();
    
    	return p_sub_set;
    end;

Google
Contact me at cbbrowne@acm.org