summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZuul <zuul@review.openstack.org>2017-12-13 05:00:19 +0000
committerGerrit Code Review <review@openstack.org>2017-12-13 05:00:19 +0000
commit0e95730eb36648d35e1fab13cf899600f5d9090f (patch)
tree3f2c151a9058029d2d7ede1626dff1e183f17067
parent0f8297d755c67b041fadd2e331b3f4c6a922975a (diff)
parent84ea58b8c81814a3c4d450145bfb9e70166dd60b (diff)
downloadswift-0e95730eb36648d35e1fab13cf899600f5d9090f.tar.gz
Merge "Ringbuilder: Forbid writing empty rings"
-rw-r--r--swift/cli/ringbuilder.py6
-rw-r--r--test/unit/cli/test_ringbuilder.py8
2 files changed, 11 insertions, 3 deletions
diff --git a/swift/cli/ringbuilder.py b/swift/cli/ringbuilder.py
index 1b9cb0557..06ac83e3b 100644
--- a/swift/cli/ringbuilder.py
+++ b/swift/cli/ringbuilder.py
@@ -1085,14 +1085,16 @@ swift-ring-builder <builder_file> write_ring
'set_info' calls when no rebalance is needed but you want to send out the
new device information.
"""
+ if not builder.devs:
+ print('Unable to write empty ring.')
+ exit(EXIT_ERROR)
+
ring_data = builder.get_ring()
if not ring_data._replica2part2dev_id:
if ring_data.devs:
print('Warning: Writing a ring with no partition '
'assignments but with devices; did you forget to run '
'"rebalance"?')
- else:
- print('Warning: Writing an empty ring')
ring_data.save(
pathjoin(backup_dir, '%d.' % time() + basename(ring_file)))
ring_data.save(ring_file)
diff --git a/test/unit/cli/test_ringbuilder.py b/test/unit/cli/test_ringbuilder.py
index 7eec30114..65c096f18 100644
--- a/test/unit/cli/test_ringbuilder.py
+++ b/test/unit/cli/test_ringbuilder.py
@@ -46,7 +46,6 @@ class RunSwiftRingBuilderMixin(object):
if 'exp_results' in kwargs:
exp_results = kwargs['exp_results']
- argv = argv[:-1]
else:
exp_results = None
@@ -2078,6 +2077,13 @@ class TestCommands(unittest.TestCase, RunSwiftRingBuilderMixin):
argv = ["", self.tmpfile, "write_ring"]
self.assertSystemExit(EXIT_SUCCESS, ringbuilder.main, argv)
+ def test_write_empty_ring(self):
+ ring = RingBuilder(6, 3, 1)
+ ring.save(self.tmpfile)
+ exp_results = {'valid_exit_codes': [2]}
+ out, err = self.run_srb("write_ring", exp_results=exp_results)
+ self.assertEqual('Unable to write empty ring.\n', out)
+
def test_write_builder(self):
# Test builder file already exists
self.create_sample_ring()