diff options
author | Lisak, Peter <peter.lisak@firma.seznam.cz> | 2015-10-09 16:13:55 +0200 |
---|---|---|
committer | Matthew Oliver <matt@oliver.net.au> | 2016-03-10 03:54:46 +0000 |
commit | eabe02cd717f5799e8f38389882025a70b7270f8 (patch) | |
tree | 396824f5163af436e50d49d1e728aa6ecb560fab /swift/common/ring/builder.py | |
parent | a4c1825a026655b7ed21d779824ae7c25318fd52 (diff) | |
download | swift-stable/kilo.tar.gz |
swift-ring-builder can't remove a device with zero weightkilo-eolstable/kilo
If a device with 0 weight is tried to remove, the following rebalance
does not write changes into builder file.
Scenario:
$ swift-ring-builder object.builder set_weight --id 1 0.00
$ swift-ring-builder object.builder rebalance
Wait for moving files out of the device id=1.
$ swift-ring-builder object.builder remove --id 1
$ swift-ring-builder object.builder rebalance
In fact, the device id=1 is not removed after rebalance (must be --force used).
Change-Id: Iad5a444023eae9882a3addd7f119ff4d18559ddd
(cherry picked from commit 71993d84e88cc1d5f7742182905cace21c7e88cb)
Diffstat (limited to 'swift/common/ring/builder.py')
-rw-r--r-- | swift/common/ring/builder.py | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/swift/common/ring/builder.py b/swift/common/ring/builder.py index 6672fdbec..385033c0e 100644 --- a/swift/common/ring/builder.py +++ b/swift/common/ring/builder.py @@ -375,7 +375,7 @@ class RingBuilder(object): self._initial_balance() self.devs_changed = False self._build_dispersion_graph() - return self.parts, self.get_balance() + return self.parts, self.get_balance(), 0 changed_parts = 0 self._update_last_part_moves() last_balance = 0 @@ -387,6 +387,7 @@ class RingBuilder(object): self._set_parts_wanted() self._reassign_parts(new_parts) changed_parts += len(new_parts) + removed_devs = 0 while True: reassign_parts = self._gather_reassign_parts() changed_parts += len(reassign_parts) @@ -397,6 +398,7 @@ class RingBuilder(object): remove_dev_id = self._remove_devs.pop()['id'] self.logger.debug("Removing dev %d", remove_dev_id) self.devs[remove_dev_id] = None + removed_devs += 1 balance = self.get_balance() if balance < 1 or abs(last_balance - balance) < 1 or \ changed_parts == self.parts: @@ -406,7 +408,7 @@ class RingBuilder(object): self.version += 1 changed_parts = self._build_dispersion_graph(old_replica2part2dev) - return changed_parts, balance + return changed_parts, balance, removed_devs def _build_dispersion_graph(self, old_replica2part2dev=None): """ |