summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarko Kreen2012-11-28 18:29:42 +0000
committerMarko Kreen2012-11-28 18:30:19 +0000
commit5c1052f040e5a423548f46832e39cdd82fc54b07 (patch)
treee34e3a5bee804d42cdf24108cb60f89d582d4b83
parentff4ca429552266422ee808e77dbf334997105362 (diff)
Few more syncer fixes
-rw-r--r--python/londiste/syncer.py14
-rw-r--r--python/londiste/util.py9
-rwxr-xr-xtests/londiste/test-compare.sh4
3 files changed, 16 insertions, 11 deletions
diff --git a/python/londiste/syncer.py b/python/londiste/syncer.py
index 80dbbf9c..befeaded 100644
--- a/python/londiste/syncer.py
+++ b/python/londiste/syncer.py
@@ -310,7 +310,7 @@ class Syncer(skytools.DBScript):
setup_curs = setup_db.cursor()
lock_time = time.time()
- self.pause_consumer(setup_curs, self.provider_info['worker_name'])
+ self.old_worker_paused = self.pause_consumer(setup_curs, self.provider_info['worker_name'])
lock_curs = lock_db.cursor()
self.log.info('Syncing %s' % dst_tbl)
@@ -335,6 +335,9 @@ class Syncer(skytools.DBScript):
sys.exit(1)
def unlock_table_branch(self, lock_db, setup_db):
+ # keep worker paused if it was so before
+ if self.old_worker_paused:
+ return
setup_curs = setup_db.cursor()
self.resume_consumer(setup_curs, self.provider_info['worker_name'])
@@ -351,13 +354,17 @@ class Syncer(skytools.DBScript):
def pause_consumer(self, curs, cons_name):
self.log.info("Pausing upstream worker: %s", cons_name)
- self.set_pause_flag(curs, cons_name, True)
+ return self.set_pause_flag(curs, cons_name, True)
def resume_consumer(self, curs, cons_name):
self.log.info("Resuming upstream worker: %s", cons_name)
- self.set_pause_flag(curs, cons_name, False)
+ return self.set_pause_flag(curs, cons_name, False)
def set_pause_flag(self, curs, cons_name, flag):
+ q = "select * from pgq_node.get_consumer_state(%s, %s)"
+ res = self.exec_cmd(curs, q, [self.queue_name, cons_name])
+ oldflag = res[0]['paused']
+
q = "select * from pgq_node.set_consumer_paused(%s, %s, %s)"
self.exec_cmd(curs, q, [self.queue_name, cons_name, flag])
@@ -367,4 +374,5 @@ class Syncer(skytools.DBScript):
if res[0]['uptodate']:
break
time.sleep(0.5)
+ return oldflag
diff --git a/python/londiste/util.py b/python/londiste/util.py
index 0bfd5051..334a0103 100644
--- a/python/londiste/util.py
+++ b/python/londiste/util.py
@@ -9,12 +9,9 @@ def handler_allows_copy(table_attrs):
if not table_attrs:
return True
attrs = skytools.db_urldecode(table_attrs)
- if 'handler' in attrs:
- hstr = attrs['handler']
- p = londiste.handler.build_handler('unused.string', hstr, None)
- return p.needs_table()
- else:
- return True
+ hstr = attrs.get('handler', '')
+ p = londiste.handler.build_handler('unused.string', hstr, None)
+ return p.needs_table()
def find_copy_source(script, queue_name, copy_table_name, node_name, node_location):
"""Find source node for table.
diff --git a/tests/londiste/test-compare.sh b/tests/londiste/test-compare.sh
index 606cbf86..a4a8debc 100755
--- a/tests/londiste/test-compare.sh
+++ b/tests/londiste/test-compare.sh
@@ -108,7 +108,7 @@ for db in db5 db2 db4 db3; do
run londiste3 conf/londiste_$db.ini wait-sync
msg "Run compare and repair"
- run londiste3 conf/londiste_$db.ini compare
- run londiste3 conf/londiste_$db.ini repair
+ run londiste3 conf/londiste_$db.ini compare --force
+ run londiste3 conf/londiste_$db.ini repair --force
done