From 32b86d54cada0baf64579325a02224c74a9531e5 Mon Sep 17 00:00:00 2001 From: Egon Valdmees Date: Tue, 19 Jul 2011 13:32:34 +0300 Subject: [PATCH] no-merge argument when using it table is not merged from source queues --- python/londiste.py | 2 ++ python/londiste/setup.py | 4 +++ .../functions/londiste.get_table_list.sql | 3 +- .../functions/londiste.local_add_table.sql | 32 ++++++++++++------- 4 files changed, 29 insertions(+), 12 deletions(-) diff --git a/python/londiste.py b/python/londiste.py index bd456137..778b9f78 100755 --- a/python/londiste.py +++ b/python/londiste.py @@ -130,6 +130,8 @@ class Londiste(skytools.DBScript): help = "add: set WHERE expression for copy") g.add_option("--merge-all", action="store_true", help="merge tables from all source queues", default=False) + g.add_option("--no-merge", action="store_true", + help="don't merge tables from source queues", default=False) p.add_option_group(g) diff --git a/python/londiste/setup.py b/python/londiste/setup.py index e9ef4102..d7423406 100644 --- a/python/londiste/setup.py +++ b/python/londiste/setup.py @@ -67,6 +67,8 @@ class LondisteSetup(CascadeAdmin): help="add: Argument to custom handler") p.add_option("--merge-all", action="store_true", help="merge tables from all source queues", default=False) + p.add_option("--no-merge", action="store_true", + help="don't merge tables from source queues", default=False) return p def extra_init(self, node_type, node_db, provider_db): @@ -167,6 +169,8 @@ class LondisteSetup(CascadeAdmin): tgargs.append('no_triggers') if self.options.merge_all: tgargs.append('merge_all') + if self.options.no_merge: + tgargs.append('no_merge') attrs = {} if self.options.handler: diff --git a/sql/londiste/functions/londiste.get_table_list.sql b/sql/londiste/functions/londiste.get_table_list.sql index bc031cce..2f526eeb 100644 --- a/sql/londiste/functions/londiste.get_table_list.sql +++ b/sql/londiste/functions/londiste.get_table_list.sql @@ -52,7 +52,8 @@ begin join pgq_node.node_info n on (n.queue_name = t.queue_name) left join pgq_node.node_info n2 on (n2.combined_queue = n.combined_queue or (n2.combined_queue is null and n.combined_queue is null)) - left join londiste.table_info t2 on (t2.table_name = t.table_name and t2.queue_name = n2.queue_name) + left join londiste.table_info t2 on (t2.table_name = t.table_name and + t2.queue_name = n2.queue_name and (t2.merge_state is null or t2.merge_state != 'ok')) where t.queue_name = i_queue_name group by t.nr, t.table_name, t.local, t.merge_state, t.custom_snapshot, t.table_attrs, t.dropped_ddl order by t.nr, t.table_name diff --git a/sql/londiste/functions/londiste.local_add_table.sql b/sql/londiste/functions/londiste.local_add_table.sql index ba3e31c5..3bfcfebf 100644 --- a/sql/londiste/functions/londiste.local_add_table.sql +++ b/sql/londiste/functions/londiste.local_add_table.sql @@ -23,8 +23,9 @@ as $$ -- skip_truncate - set 'skip_truncate' table attribute -- expect_sync - set table state to 'ok' -- tgflags=X - trigger creation flags --- merge_all - merge table from all sources. required for +-- merge_all - merge table from all sources. required for -- multi-source table +-- no_merge - do not merge tables from different sources -- skip - create skip trigger. same as S flag -- virtual_table - skips structure check and trigger creation -- @@ -82,6 +83,7 @@ declare -- argument flags _expect_sync boolean := false; _merge_all boolean := false; + _no_merge boolean := false; _skip_truncate boolean := false; _no_triggers boolean := false; _skip boolean := false; @@ -109,6 +111,8 @@ begin _no_triggers := true; elsif arg = 'merge_all' then _merge_all = true; + elsif arg = 'no_merge' then + _no_merge = true; elsif lower(arg) = 'skip' then _skip := true; elsif arg = 'virtual_table' then @@ -122,6 +126,12 @@ begin end loop; end if; + if _merge_all and _no_merge then + select 405, 'Cannot use merge-all and no-merge together' + into ret_code, ret_note; + return; + end if; + fq_table_name := londiste.make_fqname(i_table_name); -------- TABLE STRUCTURE CHECK @@ -208,7 +218,7 @@ begin end if; -- merge all table sources on leaf - if _node.node_type = 'leaf' then + if _node.node_type = 'leaf' and not _no_merge then for _queue_name, _local in select t2.queue_name, t2.local from londiste.table_info t @@ -223,7 +233,7 @@ begin -- if table from some other source is already marked as local, -- raise error if _local then - select 406, 'found local table '|| fq_table_name + select 405, 'Found local table '|| fq_table_name || ' in queue ' || _queue_name || ', use remove-table first to remove all previous ' || 'table subscriptions' @@ -231,14 +241,14 @@ begin return; end if; - -- when table comes from multiple sources, merge_all switch is - -- required - if not _merge_all then - select 405, 'multiple source tables '|| fq_table_name - || ' found, use merge_all' - into ret_code, ret_note; - return; - end if; + -- when table comes from multiple sources, merge_all switch is + -- required + if not _merge_all then + select 405, 'Found multiple sources for table '|| fq_table_name + || ', use merge-all or no-merge to continue' + into ret_code, ret_note; + return; + end if; update londiste.table_info set local = true, -- 2.39.5