in swift/common/ring/builder.py
the rebalance function calls self._set_parts_wanted(replica_plan) at 443 line.
dev['parts_wanted'] = parts_by_tier[tier] - dev['parts']
so dev_losing_part['parts'] -= 1
should be followed with
dev_losing_part['parts_wanted'] += 1
this will cause problem when you reduce replicas and then rebalance.
current case:
swift-ring-builder test.builder create 8 3.5 1
swift-ring-builder test.builder add r1z1-127.0.0.1:6000/d1 1.0
swift-ring-builder test.builder add r1z1-127.0.0.1:6000/d2 1.0
swift-ring-builder test.builder add r1z1-127.0.0.1:6000/d3 1.0
swift-ring-builder test.builder add r1z1-127.0.0.1:6000/d4 1.0
swift-ring-builder test.builder rebalance -s 1
Reassigned 512 (200.00%) partitions. Balance is now 0.00. Dispersion is now 0.00
swift-ring-builder test.builder set_replicas 3
swift-ring-builder test.builder pretend_min_part_hours_passed
swift-ring-builder test.builder rebalance -s 1
Reassigned 128 (50.00%) partitions. Balance is now 3.65. Dispersion is now 0.00
after this issue fixed:
swift-ring-builder test.builder create 8 3.5 1
swift-ring-builder test.builder add r1z1-127.0.0.1:6000/d1 1.0
swift-ring-builder test.builder add r1z1-127.0.0.1:6000/d2 1.0
swift-ring-builder test.builder add r1z1-127.0.0.1:6000/d3 1.0
swift-ring-builder test.builder add r1z1-127.0.0.1:6000/d4 1.0
swift-ring-builder test.builder rebalance -s 1
Reassigned 512 (200.00%) partitions. Balance is now 0.00. Dispersion is now 0.00
swift-ring-builder test.builder set_replicas 3
swift-ring-builder test.builder pretend_min_part_hours_passed
swift-ring-builder test.builder rebalance -s 1
Reassigned 9 (3.52%) partitions. Balance is now 0.00. Dispersion is now 0.00
in swift/common/ ring/builder. py parts_wanted( replica_ plan) at 443 line.
the rebalance function calls self._set_
dev['parts_wanted'] = parts_by_tier[tier] - dev['parts']
so dev_losing_ part['parts' ] -= 1
should be followed with
dev_losing_ part['parts_ wanted' ] += 1
this will cause problem when you reduce replicas and then rebalance.
current case: 0.0.1:6000/ d1 1.0 0.0.1:6000/ d2 1.0 0.0.1:6000/ d3 1.0 0.0.1:6000/ d4 1.0 min_part_ hours_passed
swift-ring-builder test.builder create 8 3.5 1
swift-ring-builder test.builder add r1z1-127.
swift-ring-builder test.builder add r1z1-127.
swift-ring-builder test.builder add r1z1-127.
swift-ring-builder test.builder add r1z1-127.
swift-ring-builder test.builder rebalance -s 1
Reassigned 512 (200.00%) partitions. Balance is now 0.00. Dispersion is now 0.00
swift-ring-builder test.builder set_replicas 3
swift-ring-builder test.builder pretend_
swift-ring-builder test.builder rebalance -s 1
Reassigned 128 (50.00%) partitions. Balance is now 3.65. Dispersion is now 0.00
after this issue fixed: 0.0.1:6000/ d1 1.0 0.0.1:6000/ d2 1.0 0.0.1:6000/ d3 1.0 0.0.1:6000/ d4 1.0 min_part_ hours_passed
swift-ring-builder test.builder create 8 3.5 1
swift-ring-builder test.builder add r1z1-127.
swift-ring-builder test.builder add r1z1-127.
swift-ring-builder test.builder add r1z1-127.
swift-ring-builder test.builder add r1z1-127.
swift-ring-builder test.builder rebalance -s 1
Reassigned 512 (200.00%) partitions. Balance is now 0.00. Dispersion is now 0.00
swift-ring-builder test.builder set_replicas 3
swift-ring-builder test.builder pretend_
swift-ring-builder test.builder rebalance -s 1
Reassigned 9 (3.52%) partitions. Balance is now 0.00. Dispersion is now 0.00