Refactor Ring::get_nodes() and Ring::get_part_nodes()

Add a _get_part_nodes() method in Ring class, then call it in Ring::get_nodes() and Ring::get_part_nodes().

In order to reduce duplicate codes.

Change-Id: Id92f8dfd08388305638a2ba2ab64e77545c14cba
This commit is contained in:
Wu Wenxiang 2012-12-18 17:29:16 +08:00
parent c840bd44a7
commit b85f69ed70
1 changed files with 7 additions and 6 deletions

View File

@ -182,6 +182,11 @@ class Ring(object):
"""
return getmtime(self.serialized_path) != self._mtime
def _get_part_nodes(self, part):
seen_ids = set()
return [self._devs[r[part]] for r in self._replica2part2dev_id
if not (r[part] in seen_ids or seen_ids.add(r[part]))]
def get_part_nodes(self, part):
"""
Get the nodes that are responsible for the partition. If one
@ -196,9 +201,7 @@ class Ring(object):
if time() > self._rtime:
self._reload()
seen_ids = set()
return [self._devs[r[part]] for r in self._replica2part2dev_id
if not (r[part] in seen_ids or seen_ids.add(r[part]))]
return self._get_part_nodes(part)
def get_nodes(self, account, container=None, obj=None):
"""
@ -232,9 +235,7 @@ class Ring(object):
if time() > self._rtime:
self._reload()
part = struct.unpack_from('>I', key)[0] >> self._part_shift
seen_ids = set()
return part, [self._devs[r[part]] for r in self._replica2part2dev_id
if not (r[part] in seen_ids or seen_ids.add(r[part]))]
return part, self._get_part_nodes(part)
def get_more_nodes(self, part):
"""