select * from londiste.node_get_table_list('aset');
table_name | merge_state | custom_snapshot | skip_truncate
-----------------+-------------+-----------------+---------------
- public.testdata | | |
+ public.testdata | ok | |
(1 row)
select * from londiste.node_remove_table('aset', 'public.testdata');
out ret_desc text)
as $$
-- ----------------------------------------------------------------------
--- Function: londiste.node_add_table(x)
+-- Function: londiste.node_add_table(2)
--
-- Register table on Londiste node.
--
declare
col_types text;
fq_table_name text;
+ new_state text;
begin
fq_table_name := londiste.make_fqname(i_table_name);
col_types := londiste.find_column_types(fq_table_name);
if ret_code <> 200 then
return;
end if;
+ new_state := 'ok';
+ perform londiste.root_notify_change(i_set_name, 'add-table', fq_table_name);
else
perform 1 from londiste.set_table where set_name = i_set_name and table_name = fq_table_name;
if not found then
select 400, 'Table not registered in set: ' || fq_table_name into ret_code, ret_desc;
return;
end if;
+ new_state := NULL;
end if;
- insert into londiste.node_table (set_name, table_name)
- values (i_set_name, fq_table_name);
+ insert into londiste.node_table (set_name, table_name, merge_state)
+ values (i_set_name, fq_table_name, new_state);
for ret_code, ret_desc in
select f.ret_code, f.ret_desc
+++ /dev/null
-
-create or replace function londiste.node_send_event(i_set_name text, i_ev_type text, i_ev_data text)
-returns integer as $$
-declare
- que text;
-begin
- select s.queue_name into que
- from pgq_set s
- where s.set_name = i_set_name;
- if not found then
- raise exception 'Unknown set: %', i_set_name;
- end if;
-
- perform pgq.insert_event(que, i_ev_data, i_ev_data);
-
- return 1;
-end;
-$$ language plpgsql;
-
return;
end if;
- -- perform londiste.provider_notify_change(i_queue_name);
- -- triggers
+ if pgq_set.is_root(i_set_name) then
+ perform londiste.set_remove_table(i_set_name, fq_table_name);
+ perform londiste.root_notify_change(i_set_name, 'remove-table', fq_table_name);
+ end if;
+
select 200, 'Table removed: ' || fq_table_name into ret_code, ret_desc;
return;
end;
--- /dev/null
+
+create or replace function londiste.root_notify_change(i_set_name text, i_ev_type text, i_ev_data text)
+returns integer as $$
+-- ----------------------------------------------------------------------
+-- Function: londiste.root_notify_change(3)
+--
+-- Send event about change in root downstream.
+-- ----------------------------------------------------------------------
+declare
+ que text;
+ ntype text;
+begin
+ select s.queue_name, s.node_type into que, ntype
+ from pgq_set.set_info s
+ where s.set_name = i_set_name;
+ if not found then
+ raise exception 'Unknown set: %', i_set_name;
+ end if;
+ if ntype <> 'root' then
+ raise exception 'only root node can send events';
+ end if;
+
+ perform pgq.insert_event(que, i_ev_data, i_ev_data);
+
+ return 1;
+end;
+$$ language plpgsql;
+
\i functions/londiste.node_prepare_triggers.sql
\i functions/londiste.node_refresh_triggers.sql
\i functions/londiste.node_disable_triggers.sql
--- \i functions/londiste.node_notify_change.sql
+\i functions/londiste.root_notify_change.sql
-- Group: Utility functions
\i functions/londiste.find_column_types.sql