summaryrefslogtreecommitdiff
path: root/tooz/drivers/file.py
diff options
context:
space:
mode:
authorJoshua Harlow <harlowja@yahoo-inc.com>2015-06-12 16:37:46 -0700
committerJoshua Harlow <harlowja@yahoo-inc.com>2015-06-19 11:59:51 -0700
commit61e86b0e40757f639b29465194f8e5a8a8194f27 (patch)
treec6be5548cbdc136f7456ce07a92eef7a2114e76d /tooz/drivers/file.py
parentae289f1f97570f12eb7cefe3e90cb68ba88605bf (diff)
downloadtooz-61e86b0e40757f639b29465194f8e5a8a8194f27.tar.gz
Share most of the `run_watchers` code via a common mixin
Change-Id: Ib8e1398c05635d0c698c03760c1bbb547a0747ae
Diffstat (limited to 'tooz/drivers/file.py')
-rw-r--r--tooz/drivers/file.py35
1 files changed, 2 insertions, 33 deletions
diff --git a/tooz/drivers/file.py b/tooz/drivers/file.py
index a208506..07873fc 100644
--- a/tooz/drivers/file.py
+++ b/tooz/drivers/file.py
@@ -107,7 +107,8 @@ class FileLock(locking.Lock):
LOG.warn("Unreleased lock %s garbage collected", self.name)
-class FileDriver(coordination.CoordinationDriver):
+class FileDriver(coordination.CoordinationDriver,
+ coordination._RunWatchersMixin):
"""A file based driver.
This driver uses files and directories (and associated file locks) to
@@ -398,38 +399,6 @@ class FileDriver(coordination.CoordinationDriver):
def unwatch_elected_as_leader(group_id, callback):
raise tooz.NotImplemented
- def run_watchers(self, timeout=None):
- w = timeutils.StopWatch(duration=timeout)
- w.start()
- leftover_timeout = w.leftover(return_none=True)
- known_groups = self.get_groups().get(timeout=leftover_timeout)
- result = []
- for group_id in known_groups:
- leftover_timeout = w.leftover(return_none=True)
- try:
- group_members_fut = self.get_members(group_id)
- group_members = group_members_fut.get(timeout=leftover_timeout)
- except coordination.GroupNotCreated:
- group_members = set()
- else:
- group_members = set(group_members)
- if (group_id in self._joined_groups and
- self._member_id not in group_members):
- self._joined_groups.discard(group_id)
- old_group_members = self._group_members.get(group_id, set())
- for member_id in (group_members - old_group_members):
- result.extend(
- self._hooks_join_group[group_id].run(
- coordination.MemberJoinedGroup(group_id,
- member_id)))
- for member_id in (old_group_members - group_members):
- result.extend(
- self._hooks_leave_group[group_id].run(
- coordination.MemberLeftGroup(group_id,
- member_id)))
- self._group_members[group_id] = group_members
- return result
-
class FileFutureResult(coordination.CoordAsyncResult):
"""File asynchronous result that references a future."""