londiste: fix resync / missing commands
authorMarko Kreen <markokr@gmail.com>
Mon, 1 Jun 2009 09:30:33 +0000 (12:30 +0300)
committerMarko Kreen <markokr@gmail.com>
Mon, 1 Jun 2009 09:30:33 +0000 (12:30 +0300)
python/londiste/setup.py
sql/londiste/expected/londiste_fkeys.out
sql/londiste/expected/londiste_merge.out
sql/londiste/functions/londiste.local_set_table_state.sql
sql/londiste/functions/londiste.local_show_missing.sql [new file with mode: 0644]
sql/londiste/sql/londiste_provider.sql
sql/londiste/sql/londiste_subscriber.sql
sql/londiste/structure/functions.sql

index 61f226fe1cee21685575abc081dbeda7003de6a4..9171f59cee952657af72f18e1a26ceb4fa73ca12 100644 (file)
@@ -267,9 +267,8 @@ class LondisteSetup(CascadeAdmin):
 
     def cmd_resync(self, *args):
         """Reload data from provider node.."""
-        # fixme
-        q = "select * from londiste.node_resync_table(%s, %s)"
         db = self.get_database('db')
+        q = "select * from londiste.local_set_table_state(%s, %s, null, null)"
         self.exec_cmd_many(db, q, [self.set_name], args)
 
     def cmd_tables(self):
@@ -286,8 +285,7 @@ class LondisteSetup(CascadeAdmin):
 
     def cmd_missing(self):
         """Show missing tables on local node."""
-        # fixme
-        q = "select * from londiste.node_show_missing(%s)"
+        q = "select * from londiste.local_show_missing(%s)"
         db = self.get_database('db')
         self.display_table(db, "Missing objects on node", q, [self.set_name])
 
index 6346c13fb35e0bc6abaa4bcfbd46d6c8e273cbfc..f561be23adcf175d83400a4b103c914c26dd148a 100644 (file)
@@ -142,9 +142,9 @@ select * from londiste.get_valid_pending_fkeys('branch_set');
 
 -- toggle sync
 select * from londiste.local_set_table_state('branch_set', 'public.ref_1', null, 'ok');
- local_set_table_state 
------------------------
-                     1
+ ret_code |               ret_note               
+----------+--------------------------------------
+      200 | Table public.ref_1 state set to 'ok'
 (1 row)
 
 select * from londiste.get_valid_pending_fkeys('branch_set');
@@ -153,9 +153,9 @@ select * from londiste.get_valid_pending_fkeys('branch_set');
 (0 rows)
 
 select * from londiste.local_set_table_state('branch_set', 'public.ref_2', null, 'ok');
- local_set_table_state 
------------------------
-                     1
+ ret_code |               ret_note               
+----------+--------------------------------------
+      200 | Table public.ref_2 state set to 'ok'
 (1 row)
 
 select * from londiste.get_valid_pending_fkeys('branch_set');
@@ -165,9 +165,9 @@ select * from londiste.get_valid_pending_fkeys('branch_set');
 (1 row)
 
 select * from londiste.local_set_table_state('branch_set', 'public.ref_3', null, 'ok');
- local_set_table_state 
------------------------
-                     1
+ ret_code |               ret_note               
+----------+--------------------------------------
+      200 | Table public.ref_3 state set to 'ok'
 (1 row)
 
 select * from londiste.get_valid_pending_fkeys('branch_set');
index 1bb5c0185584389bf0e4455acdfc17e84dd8d62e..0f9114a168a0d62ea9dd6b07425f33e95b5a8f59 100644 (file)
@@ -104,15 +104,15 @@ select * from londiste.get_table_list('combined_set');
 (1 row)
 
 select * from londiste.local_set_table_state('part1_set', 'public.tblmerge', null, 'in-copy');
- local_set_table_state 
------------------------
-                     1
+ ret_code |                   ret_note                   
+----------+----------------------------------------------
+      200 | Table public.tblmerge state set to 'in-copy'
 (1 row)
 
 select * from londiste.local_set_table_state('part2_set', 'public.tblmerge', null, 'in-copy');
- local_set_table_state 
------------------------
-                     1
+ ret_code |                   ret_note                   
+----------+----------------------------------------------
+      200 | Table public.tblmerge state set to 'in-copy'
 (1 row)
 
 select * from londiste.get_table_list('part1_set');
@@ -146,15 +146,15 @@ select * from londiste.get_table_list('part2_set');
 (1 row)
 
 select * from londiste.local_set_table_state('part1_set', 'public.tblmerge', null, 'in-copy');
- local_set_table_state 
------------------------
-                     1
+ ret_code |                   ret_note                   
+----------+----------------------------------------------
+      200 | Table public.tblmerge state set to 'in-copy'
 (1 row)
 
 select * from londiste.local_set_table_state('part2_set', 'public.tblmerge', null, 'catching-up');
- local_set_table_state 
------------------------
-                     1
+ ret_code |                     ret_note                     
+----------+--------------------------------------------------
+      200 | Table public.tblmerge state set to 'catching-up'
 (1 row)
 
 select * from londiste.get_table_list('part1_set');
@@ -188,15 +188,15 @@ select * from londiste.get_table_list('part2_set');
 (1 row)
 
 select * from londiste.local_set_table_state('part1_set', 'public.tblmerge', null, 'catching-up');
- local_set_table_state 
------------------------
-                     1
+ ret_code |                     ret_note                     
+----------+--------------------------------------------------
+      200 | Table public.tblmerge state set to 'catching-up'
 (1 row)
 
 select * from londiste.local_set_table_state('part2_set', 'public.tblmerge', null, 'catching-up');
- local_set_table_state 
------------------------
-                     1
+ ret_code |                     ret_note                     
+----------+--------------------------------------------------
+      200 | Table public.tblmerge state set to 'catching-up'
 (1 row)
 
 select * from londiste.get_table_list('part1_set');
index a7e2dc5232b7e1d3c388869a4e6b9a52d10a2918..6b64d9b14e0beeefb03aefac6b8bda3ed92c62b4 100644 (file)
@@ -1,10 +1,12 @@
 
 create or replace function londiste.local_set_table_state(
-    i_queue_name text,
-    i_table_name text,
-    i_snapshot text,
-    i_merge_state text)
-returns integer as $$
+    in i_queue_name text,
+    in i_table_name text,
+    in i_snapshot text,
+    in i_merge_state text,
+    out ret_code int4,
+    out ret_note text)
+as $$
 -- ----------------------------------------------------------------------
 -- Function: londiste.local_set_table_state(4)
 --
@@ -15,11 +17,12 @@ returns integer as $$
 --      i_table         - table name
 --      i_snapshot      - optional remote snapshot info
 --      i_merge_state   - merge state
---
--- Returns:
---      nothing
 -- ----------------------------------------------------------------------
+declare
+    _tbl text;
 begin
+    _tbl = londiste.make_fqname(i_table_name);
+
     update londiste.table_info
         set custom_snapshot = i_snapshot,
             merge_state = i_merge_state,
@@ -29,13 +32,18 @@ begin
                                  else skip_truncate
                             end
       where queue_name = i_queue_name
-        and table_name = i_table_name
+        and table_name = _tbl
         and local;
     if not found then
-        raise exception 'no such table';
+        select 404, 'No such table: ' || _tbl
+            into ret_code, ret_note;
+        return;
     end if;
 
-    return 1;
+    select 200, 'Table ' || _tbl || ' state set to '
+            || coalesce(quote_literal(i_merge_state), 'NULL')
+        into ret_code, ret_note;
+    return;
 end;
 $$ language plpgsql;
 
diff --git a/sql/londiste/functions/londiste.local_show_missing.sql b/sql/londiste/functions/londiste.local_show_missing.sql
new file mode 100644 (file)
index 0000000..3269aa4
--- /dev/null
@@ -0,0 +1,46 @@
+
+create or replace function londiste.local_show_missing(
+    in i_queue_name text,
+    out obj_kind text, out obj_name text)
+returns setof record as $$ 
+-- ----------------------------------------------------------------------
+-- Function: londiste.local_show_missing(1)
+--
+--      Return info about missing tables.  On root show tables
+--      not registered on set, on branch/leaf show tables
+--      in set but not registered locally.
+-- ----------------------------------------------------------------------
+begin
+    if pgq_node.is_root_node(i_queue_name) then
+        for obj_kind, obj_name in
+            select r.relkind, n.nspname || '.' || r.relname
+                from pg_catalog.pg_class r, pg_catalog.pg_namespace n
+                where n.oid = r.relnamespace
+                  and r.relkind in ('r', 'S')
+                  and n.nspname not in ('pgq', 'pgq_ext', 'pgq_node', 'londiste', 'pg_catalog', 'information_schema')
+                  and n.nspname !~ '^pg_(toast|temp)'
+                  and not exists (select 1 from londiste.table_info
+                                   where queue_name = i_queue_name
+                                     and table_name = (n.nspname || '.' || r.relname))
+                order by 1, 2
+        loop
+            return next;
+        end loop;
+    else
+        for obj_kind, obj_name in
+            select 'S', s.seq_name from londiste.seq_info s
+                where s.queue_name = i_queue_name
+                  and not s.local
+            union all
+            select 'r', t.table_name from londiste.table_info t
+                where t.queue_name = i_queue_name
+                  and not t.local
+            order by 1, 2
+        loop
+            return next;
+        end loop;
+    end if;
+    return;
+end; 
+$$ language plpgsql strict stable;
+
index a929667b45768dc2b0b36ba37bbbc6edfc051602..d324b887bd1f9b54d8b7704d0e017b82e3611dae 100644 (file)
@@ -23,9 +23,12 @@ select * from londiste.local_add_table('aset', 'public.testdata_nopk');
 select * from londiste.local_add_table('aset', 'public.testdata');
 insert into testdata (data) values ('test-data');
 select * from londiste.get_table_list('aset');
+select * from londiste.local_show_missing('aset');
 select * from londiste.local_remove_table('aset', 'public.testdata');
 select * from londiste.local_remove_table('aset', 'public.testdata');
 select * from londiste.get_table_list('aset');
 
 select ev_id, ev_type, ev_data, ev_extra1 from pgq.event_template;
 
+select * from londiste.local_show_missing('aset');
+
index 3cef618a0e71053134daa684875707556b58de21..a7f3cf61a3f7bfaff29cf0fad8134542e7dc20f4 100644 (file)
@@ -16,6 +16,8 @@ select * from pgq_node.register_location('branch_set', 'snode', 'dbname=db', fal
 select * from pgq_node.register_location('branch_set', 'pnode', 'dbname=db2', false);
 select * from pgq_node.create_node('branch_set', 'branch', 'snode', 'londiste_branch', 'pnode', 100, null::text);
 
+select * from londiste.local_show_missing('branch_set');
+
 select * from londiste.local_add_table('branch_set', 'public.slavedata');
 select * from londiste.global_add_table('branch_set', 'public.slavedata');
 select * from londiste.local_add_table('branch_set', 'public.slavedata');
@@ -26,3 +28,5 @@ select * from londiste.local_remove_table('branch_set', 'public.slavedata');
 select * from londiste.local_remove_table('branch_set', 'public.slavedata');
 select * from londiste.get_table_list('branch_set');
 
+select * from londiste.local_show_missing('branch_set');
+
index 62ac186e774fab636dda7e4e2344b3be6d7eab43..c38126f701c97e32807fc99cd451b942f31681a8 100644 (file)
@@ -3,6 +3,7 @@
 -- Group: Information
 \i functions/londiste.get_seq_list.sql
 \i functions/londiste.get_table_list.sql
+\i functions/londiste.local_show_missing.sql
 
 -- Group: Local object registration (setup tool)
 \i functions/londiste.local_add_seq.sql