Wed Nov 10 23:34:13 PST 2004
- Previous message: [Slony1-commit] By cbbrowne: Fixed typos, added further schema documentation to C
- Next message: [Slony1-commit] By cbbrowne: Add in debugging code, comment out actual execution of
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
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;
- Previous message: [Slony1-commit] By cbbrowne: Fixed typos, added further schema documentation to C
- Next message: [Slony1-commit] By cbbrowne: Add in debugging code, comment out actual execution of
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
More information about the Slony1-commit mailing list