diff options
| author | Joshua Harlow <harlowja@yahoo-inc.com> | 2015-06-12 16:37:46 -0700 |
|---|---|---|
| committer | Joshua Harlow <harlowja@yahoo-inc.com> | 2015-06-19 11:59:51 -0700 |
| commit | 61e86b0e40757f639b29465194f8e5a8a8194f27 (patch) | |
| tree | c6be5548cbdc136f7456ce07a92eef7a2114e76d /tooz/drivers/file.py | |
| parent | ae289f1f97570f12eb7cefe3e90cb68ba88605bf (diff) | |
| download | tooz-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.py | 35 |
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.""" |
