| Slony-I 2.2.10 Documentation | ||||
|---|---|---|---|---|
| Prev | Fast Backward | Chapter 8. Schema schemadoc | Fast Forward | Next |
Function Properties
Language: PLPGSQL
Return Type: integer
Prepare for a failover. This function is called on all candidate nodes. It blanks the paths to the failed node and then restart of all node daemons.declare
v_row record;
v_row2 record;
v_n int4;
begin
-- ----
-- Grab the central configuration lock
-- ----
lock table sl_config_lock;
-- ----
-- All consistency checks first
if p_is_candidate then
-- ----
-- Check all sets originating on the failed node
-- ----
for v_row in select set_id
from sl_set
where set_origin = p_failed_node
loop
-- ----
-- Check that the backup node is subscribed to all sets
-- that originate on the failed node
-- ----
select into v_row2 sub_forward, sub_active
from sl_subscribe
where sub_set = v_row.set_id
and sub_receiver = getLocalNodeId('_schemadoc');
if not found then
raise exception 'Slony-I: cannot failover - node % is not subscribed to set %',
getLocalNodeId('_schemadoc'), v_row.set_id;
end if;
-- ----
-- Check that the subscription is active
-- ----
if not v_row2.sub_active then
raise exception 'Slony-I: cannot failover - subscription for set % is not active',
v_row.set_id;
end if;
-- ----
-- If there are other subscribers, the backup node needs to
-- be a forwarder too.
-- ----
select into v_n count(*)
from sl_subscribe
where sub_set = v_row.set_id
and sub_receiver <> getLocalNodeId('_schemadoc');
if v_n > 0 and not v_row2.sub_forward then
raise exception 'Slony-I: cannot failover - node % is not a forwarder of set %',
getLocalNodeId('_schemadoc'), v_row.set_id;
end if;
end loop;
end if;
-- ----
-- Terminate all connections of the failed node the hard way
-- ----
perform terminateNodeConnections(p_failed_node);
update sl_path set pa_conninfo='<event pending>' WHERE
pa_server=p_failed_node;
notify "_schemadoc_Restart";
-- ----
-- That is it - so far.
-- ----
return p_failed_node;
end;