Skip to content

Commit

Permalink
Refactor Ring::get_nodes() and Ring::get_part_nodes()
Browse files Browse the repository at this point in the history
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
  • Loading branch information
wu-wenxiang committed Dec 18, 2012
1 parent c840bd4 commit b85f69e
Showing 1 changed file with 7 additions and 6 deletions.
13 changes: 7 additions & 6 deletions swift/common/ring/ring.py
Original file line number Diff line number Diff line change
Expand Up @@ -182,6 +182,11 @@ def has_changed(self):
"""
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
Expand All @@ -196,9 +201,7 @@ def get_part_nodes(self, part):

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):
"""
Expand Down Expand Up @@ -232,9 +235,7 @@ def get_nodes(self, account, container=None, obj=None):
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):
"""
Expand Down

0 comments on commit b85f69e

Please sign in to comment.