def update(self, tag=None, registry=None, account=None, force=False):
if not fab.env.parallel:
fab.abort(
'Master-slave configuration update requires parallel mode. '
'Use Fabric\'s `--parallel` option to enable this mode '
'for a current session.'
)
self.instances.put(None)
try:
recovery_config_updated = self.update_recovery_config(
tag=tag,
registry=registry,
account=account,
)
container_updated = super(
StreamingReplicatedPostgresqlContainer,
self,
).update(force=force, tag=tag, registry=registry, account=account)
if not container_updated and recovery_config_updated:
self.reload()
self.master_obtained.set() # one who first comes here is master
return container_updated or recovery_config_updated
except Exception as exception:
self.multiprocessing_data.exception = exception
raise
finally:
try:
self.master_lock.release()
except ValueError: # ignore "released too many times" error
pass
self.instances.get()
self.instances.task_done()
self.instances.join() # wait until all instances will be updated
# reset state at the end to prevent fail of the next Fabric command
self.master_obtained.clear()
评论列表
文章目录