diff options
author | Zuul <zuul@review.openstack.org> | 2017-12-13 05:00:19 +0000 |
---|---|---|
committer | Gerrit Code Review <review@openstack.org> | 2017-12-13 05:00:19 +0000 |
commit | 0e95730eb36648d35e1fab13cf899600f5d9090f (patch) | |
tree | 3f2c151a9058029d2d7ede1626dff1e183f17067 | |
parent | 0f8297d755c67b041fadd2e331b3f4c6a922975a (diff) | |
parent | 84ea58b8c81814a3c4d450145bfb9e70166dd60b (diff) | |
download | swift-0e95730eb36648d35e1fab13cf899600f5d9090f.tar.gz |
Merge "Ringbuilder: Forbid writing empty rings"
-rw-r--r-- | swift/cli/ringbuilder.py | 6 | ||||
-rw-r--r-- | test/unit/cli/test_ringbuilder.py | 8 |
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() |