| Slony-I 2.0.3_RC2 Documentation | ||||
|---|---|---|---|---|
| Prev | Fast Backward | Chapter 1. Schema schemadoc | Fast Forward | Next |
Function Properties
Language: PLPGSQL
Return Type: integer
logswitch_finish() Attempt to finalize a log table switch in progressDECLARE
v_current_status int4;
v_dummy record;
BEGIN
-- ----
-- Grab the central configuration lock to prevent race conditions
-- while changing the sl_log_status sequence value.
-- ----
lock table sl_config_lock;
-- ----
-- Get the current log status.
-- ----
select last_value into v_current_status from sl_log_status;
-- ----
-- status value 0 or 1 means that there is no log switch in progress
-- ----
if v_current_status = 0 or v_current_status = 1 then
return 0;
end if;
-- ----
-- status = 2: sl_log_1 active, cleanup sl_log_2
-- ----
if v_current_status = 2 then
-- ----
-- The cleanup thread calls us after it did the delete and
-- vacuum of both log tables. If sl_log_2 is empty now, we
-- can truncate it and the log switch is done.
-- ----
for v_dummy in select 1 from sl_log_2 loop
-- ----
-- Found a row ... log switch is still in progress.
-- ----
raise notice 'Slony-I: log switch to sl_log_1 still in progress - sl_log_2 not truncated';
return -1;
end loop;
raise notice 'Slony-I: log switch to sl_log_1 complete - truncate sl_log_2';
truncate sl_log_2;
perform "pg_catalog".setval('sl_log_status', 0);
-- Run addPartialLogIndices() to try to add indices to unused sl_log_? table
perform addPartialLogIndices();
return 1;
end if;
-- ----
-- status = 3: sl_log_2 active, cleanup sl_log_1
-- ----
if v_current_status = 3 then
-- ----
-- The cleanup thread calls us after it did the delete and
-- vacuum of both log tables. If sl_log_2 is empty now, we
-- can truncate it and the log switch is done.
-- ----
for v_dummy in select 1 from sl_log_1 loop
-- ----
-- Found a row ... log switch is still in progress.
-- ----
raise notice 'Slony-I: log switch to sl_log_2 still in progress - sl_log_1 not truncated';
return -1;
end loop;
raise notice 'Slony-I: log switch to sl_log_2 complete - truncate sl_log_1';
truncate sl_log_1;
perform "pg_catalog".setval('sl_log_status', 1);
-- Run addPartialLogIndices() to try to add indices to unused sl_log_? table
perform addPartialLogIndices();
return 2;
end if;
END;