Some partitions of a 3 replicas Swift cluster may have only 2 replicas
Affects | Status | Importance | Assigned to | Milestone | |
---|---|---|---|---|---|
OpenStack Object Storage (swift) |
Fix Released
|
Undecided
|
Christian Schwede |
Bug Description
Starting from a 3 replicas / 3 devices / 1 region Swift cluster, when
adding a node to a new region, we end up with some partitions having
only 2 replicas.
----- Script to reproduce bug -----
swift-ring-builder test.builder create 9 3 0
# Create a 3 replicas / 3 devices / 1 region Swift cluster
for d in $(seq 1 3); do
swift-
done
swift-ring-builder test.builder rebalance 0
# Add 1 device to a new region
swift-ring-builder test.builder add r2z0-127.
swift-ring-builder test.builder rebalance 0
# Displaying number of replicas for each partition
swift-ring-builder test.builder list_parts 127.0.0.1 | awk '{print $2}' | sort -n | uniq -c
# Result is
#Reassigned 512 (100.00%) partitions. Balance is now 0.91.
# 1 Matches
# 3 2
# 509 3
Changed in swift: | |
milestone: | none → 2.2.1 |
status: | Fix Committed → Fix Released |
Looks like the output of swift-ring-builder test.builder list_parts is wrong; using your example builder file and the following python code I see 512 partitions for every replica:
from swift.common. ring.builder import RingBuilder load('test. builder' ) t2dev:
rb = RingBuilder.
for replica in rb._replica2par
print len(replica)
Looking into the swift-ring-builder list_parts code.