summaryrefslogtreecommitdiff
path: root/tooz/drivers/file.py
diff options
context:
space:
mode:
authorJoshua Harlow <harlowja@gmail.com>2015-06-17 09:19:40 -0700
committerJoshua Harlow <harlowja@gmail.com>2015-06-17 09:21:07 -0700
commitc43590a44f9eae0b9333d665de599008f9e65275 (patch)
treeee456d4c7aae7afc0b5c7e2d4b9ed0b95bd2aac8 /tooz/drivers/file.py
parent5b13275d422f4cc8f4fc1b34a7a17cd2b3111820 (diff)
downloadtooz-c43590a44f9eae0b9333d665de599008f9e65275.tar.gz
Remove file-driver special no-async abilities
To enable a following commit to unify the `run_watchers` of the various drivers we need to make the file driver method look more like the other drivers, which means removing the special no-async ability and having it use the standard get a future and wait on it to return (and repeat). Change-Id: I14d227a0e6a80da80eb2580b1780ae1dba128b21
Diffstat (limited to 'tooz/drivers/file.py')
-rw-r--r--tooz/drivers/file.py34
1 files changed, 14 insertions, 20 deletions
diff --git a/tooz/drivers/file.py b/tooz/drivers/file.py
index 6d4bdda..f8f2502 100644
--- a/tooz/drivers/file.py
+++ b/tooz/drivers/file.py
@@ -245,10 +245,6 @@ class FileDriver(coordination.CoordinationDriver):
return FileFutureResult(fut)
def get_members(self, group_id):
- fut = self._get_members(group_id)
- return FileFutureResult(fut)
-
- def _get_members(self, group_id, async=True):
safe_group_id = self._make_filesystem_safe(group_id)
group_dir = os.path.join(self._group_dir, safe_group_id)
@@ -288,10 +284,8 @@ class FileDriver(coordination.CoordinationDriver):
members.append(member_id)
return members
- if async:
- return self._submit(_do_get_members)
- else:
- return _do_get_members()
+ fut = self._submit(_do_get_members)
+ return FileFutureResult(fut)
def get_member_capabilities(self, group_id, member_id):
safe_group_id = self._make_filesystem_safe(group_id)
@@ -350,7 +344,7 @@ class FileDriver(coordination.CoordinationDriver):
fut = self._submit(_do_delete_group)
return FileFutureResult(fut)
- def _get_groups(self, async=True):
+ def get_groups(self):
def _read_group_id(path):
with open(path, 'rb') as fh:
@@ -374,18 +368,13 @@ class FileDriver(coordination.CoordinationDriver):
raise
return groups
- if async:
- return self._submit(_do_get_groups)
- else:
- return _do_get_groups()
-
- def get_groups(self):
- fut = self._get_groups()
+ fut = self._submit(_do_get_groups)
return FileFutureResult(fut)
def _init_watch_group(self, group_id):
- members = self._get_members(group_id, async=False)
- self._group_members[group_id].update(members)
+ group_members_fut = self.get_members(group_id)
+ group_members = group_members_fut.get(timeout=None)
+ self._group_members[group_id].update(group_members)
def watch_join_group(self, group_id, callback):
self._init_watch_group(group_id)
@@ -410,11 +399,16 @@ class FileDriver(coordination.CoordinationDriver):
raise tooz.NotImplemented
def run_watchers(self, timeout=None):
- known_groups = self._get_groups(async=False)
+ 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 = self._get_members(group_id, async=False)
+ group_members_fut = self.get_members(group_id)
+ group_members = group_members_fut.get(timeout=leftover_timeout)
except coordination.GroupNotCreated:
group_members = set()
else: