1.117.  storepath_int( integer, integer, text, integer )

Propriétés de la fonction
Langage: PLPGSQL
Type du code retour: integer

Traite l'événement STORE_PATH indiquant que le nœud pa_client peut accéder au nœud pa_server en utilisant le DSN pa_conninfo.

declare
        p_pa_server             alias for $1;
        p_pa_client             alias for $2;
        p_pa_conninfo   alias for $3;
        p_pa_connretry  alias for $4;
        v_dummy                 int4;
begin
        -- ----
        -- Grab the central configuration lock
        -- ----
        lock table sl_config_lock;

        -- ----
        -- Check if the path already exists
        -- ----
        select 1 into v_dummy
                        from sl_path
                        where pa_server = p_pa_server
                        and pa_client = p_pa_client
                        for update;
        if found then
                -- ----
                -- Path exists, update pa_conninfo
                -- ----
                update sl_path
                                set pa_conninfo = p_pa_conninfo,
                                        pa_connretry = p_pa_connretry
                                where pa_server = p_pa_server
                                and pa_client = p_pa_client;
        else
                -- ----
                -- New path
                --
                -- In case we receive STORE_PATH events before we know
                -- about the nodes involved in this, we generate those nodes
                -- as pending.
                -- ----
                if not exists (select 1 from sl_node
                                                where no_id = p_pa_server) then
                        perform storeNode_int (p_pa_server, '<event pending>', 'f');
                end if;
                if not exists (select 1 from sl_node
                                                where no_id = p_pa_client) then
                        perform storeNode_int (p_pa_client, '<event pending>', 'f');
                end if;
                insert into sl_path
                                (pa_server, pa_client, pa_conninfo, pa_connretry) values
                                (p_pa_server, p_pa_client, p_pa_conninfo, p_pa_connretry);
        end if;

        -- Rewrite sl_listen table
        perform RebuildListenEntries();

        return 0;
end;