CVS User Account cvsuser
Wed Nov 10 23:34:13 PST 2004
Log Message:
-----------
Fixes to RebuildListenEntries() as it was adding sl_listen entries not
yet supported by sl_path entries.

Modified Files:
--------------
    slony1-engine/src/backend:
        slony1_funcs.sql (r1.37 -> r1.38)

-------------- next part --------------
Index: slony1_funcs.sql
===================================================================
RCS file: /usr/local/cvsroot/slony1/slony1-engine/src/backend/slony1_funcs.sql,v
retrieving revision 1.37
retrieving revision 1.38
diff -Lsrc/backend/slony1_funcs.sql -Lsrc/backend/slony1_funcs.sql -u -w -r1.37 -r1.38
--- src/backend/slony1_funcs.sql
+++ src/backend/slony1_funcs.sql
@@ -1348,7 +1348,7 @@
 'Process DROP_PATH event to drop path from pa_server to pa_client';
 
 -- ----------------------------------------------------------------------
--- FUNCTION storeListen (li_origin, li_provider, li_receiver)
+-- FUNCTION storeListen (origin, provider, receiver)
 --
 --	Generate the STORE_LISTEN event.
 -- ----------------------------------------------------------------------
@@ -1356,13 +1356,13 @@
 returns bigint
 as '
 declare
-	p_li_origin		alias for $1;
-	p_li_provider	alias for $2;
-	p_li_receiver	alias for $3;
+	p_origin		alias for $1;
+	p_provider	alias for $2;
+	p_receiver	alias for $3;
 begin
-	perform @NAMESPACE at .storeListen_int (p_li_origin, p_li_provider, p_li_receiver);
+	perform @NAMESPACE at .storeListen_int (p_origin, p_provider, p_receiver);
 	return  @NAMESPACE at .createEvent (''_ at CLUSTERNAME@'', ''STORE_LISTEN'',
-			p_li_origin, p_li_provider, p_li_receiver);
+			p_origin, p_provider, p_receiver);
 end;
 ' language plpgsql
 	called on null input;
@@ -1790,12 +1790,7 @@
 	perform @NAMESPACE at .moveSet_int(p_set_id, v_local_node_id,
 			p_new_origin);
 
-	for v_sub_row in select sub_provider, sub_receiver 
-			from @NAMESPACE at .sl_subscribe
-			where sub_set = p_set_id
-	loop
-		perform @NAMESPACE at .GenerateListensOnSubscribe(v_sub_row.sub_provider, v_sub_row.sub_receiver)
-	done;
+	perform @NAMESPACE at .RebuildListenEntries();
 
 	-- ----
 	-- At this time we hold access exclusive locks for every table
@@ -3665,7 +3660,7 @@
 	-- ----
 	-- Submit listen management events
 	-- ----
-	perform @NAMESPACE at .GenerateListensOnSubscribe(p_sub_provider, p_sub_receiver);
+	perform @NAMESPACE at .RebuildListenEntries();
 
 	-- ----
 	-- Create the SUBSCRIBE_SET event
@@ -4513,41 +4508,52 @@
 as '
 declare
 	v_row			record;
-	v_row2			record;
-	v_row3			record;
 	v_origin		int4;
 	v_receiver		int4;
 	v_done			boolean;
 
 begin
+	return 0;
 	-- 0.  Drop out listens
 	delete from @NAMESPACE at .sl_listen;
 
 	-- 1.  Add listens pointed out by subscriptions - sl_listen
-	select @NAMESPACE at .storelisten(sub_provider, sub_provider, sub_receiver)
-		from @NAMESPACE at .sl_subscribe;
+	-- @NAMESPACE at .storelisten(origin, provider, receiver)
+	perform @NAMESPACE at .storelisten(sub_provider, sub_provider, sub_receiver)
+		from @NAMESPACE at .sl_subscribe s
+		where exists (select true from @NAMESPACE at .sl_path p where 
+                                 p.pa_server = s.sub_provider and
+                                 p.pa_client = s.sub_receiver);
 
 	-- 2.  Add direct listens pointed out in sl_path
-	select @NAMESPACE at .storelisten(pa_server, pa_server, pa_client)
+	perform @NAMESPACE at .storelisten(pa_server, pa_server, pa_client)
 		from @NAMESPACE at .sl_path path
 		where not exists (select true from @NAMESPACE at .sl_listen listen
 					where path.pa_server = listen.li_origin and
-					      path.pa_client = listen.li_reciever);
+					      path.pa_client = listen.li_receiver);
 
 	-- 3.  Iterate until we cannot iterate any more...
 	--     Add in indirect listens based on what is in sl_listen and sl_path
 	v_done := ''f'';
 	while not v_done loop
-		select @NAMESPACE at .storelisten(li_origin,pa_server,pa_client)
+		v_done := ''t'';
+		for v_row in select  li_origin, pa_server, pa_client
 			from @NAMESPACE at .sl_path path, @NAMESPACE at .sl_listen listen
 			where
-				li_reciever = pa_server
+				li_receiver = pa_server
 				and not exists (select true from @NAMESPACE at .sl_listen listen2
-					where listen2.li_origin = listen.origin and
-					      listen2.li_reciever = path.pa_client);
-
+					where listen2.li_origin = listen.li_origin and
+					      listen2.li_receiver = path.pa_client)
+                                and exists (select true from @NAMESPACE at .sl_path p
+                                        where p.pa_server = path.pa_server and
+                                              p.pa_client = path.pa_client )
 		
+		loop
+			perform @NAMESPACE at .storelisten(v_row.li_origin,v_row.pa_server,v_row.pa_client);
+			v_done := ''f'';
+		end loop;		
 	end loop;
+	return 0;
 end;
 ' language plpgsql;
 


More information about the Slony1-commit mailing list