Merge "Make swift-ring-builder filename usage more consistent"

This commit is contained in:
Jenkins 2015-08-19 01:20:57 +00:00 committed by Gerrit Code Review
commit 6444f9b16b
2 changed files with 40 additions and 19 deletions

View File

@ -403,14 +403,15 @@ swift-ring-builder <builder_file> create <part_power> <replicas>
print(Commands.create.__doc__.strip())
exit(EXIT_ERROR)
builder = RingBuilder(int(argv[3]), float(argv[4]), int(argv[5]))
backup_dir = pathjoin(dirname(argv[1]), 'backups')
backup_dir = pathjoin(dirname(builder_file), 'backups')
try:
mkdir(backup_dir)
except OSError as err:
if err.errno != EEXIST:
raise
builder.save(pathjoin(backup_dir, '%d.' % time() + basename(argv[1])))
builder.save(argv[1])
builder.save(pathjoin(backup_dir,
'%d.' % time() + basename(builder_file)))
builder.save(builder_file)
exit(EXIT_SUCCESS)
def default():
@ -418,7 +419,7 @@ swift-ring-builder <builder_file> create <part_power> <replicas>
swift-ring-builder <builder_file>
Shows information about the ring and the devices within.
"""
print('%s, build version %d' % (argv[1], builder.version))
print('%s, build version %d' % (builder_file, builder.version))
regions = 0
zones = 0
balance = 0
@ -546,7 +547,7 @@ swift-ring-builder <builder_file> list_parts
if not builder._replica2part2dev:
print('Specified builder file \"%s\" is not rebalanced yet. '
'Please rebalance first.' % argv[1])
'Please rebalance first.' % builder_file)
exit(EXIT_ERROR)
devs = _parse_list_parts_values(argv[3:])
@ -612,7 +613,7 @@ swift-ring-builder <builder_file> add
print('The on-disk ring builder is unchanged.')
exit(EXIT_ERROR)
builder.save(argv[1])
builder.save(builder_file)
exit(EXIT_SUCCESS)
def set_weight():
@ -644,7 +645,7 @@ swift-ring-builder <builder_file> set_weight
_parse_set_weight_values(argv[3:])
builder.save(argv[1])
builder.save(builder_file)
exit(EXIT_SUCCESS)
def set_info():
@ -689,7 +690,7 @@ swift-ring-builder <builder_file> set_info
print(err)
exit(EXIT_ERROR)
builder.save(argv[1])
builder.save(builder_file)
exit(EXIT_SUCCESS)
def remove():
@ -754,7 +755,7 @@ swift-ring-builder <builder_file> search
print('%s marked for removal and will '
'be removed next rebalance.' % format_device(dev))
builder.save(argv[1])
builder.save(builder_file)
exit(EXIT_SUCCESS)
def rebalance():
@ -856,9 +857,9 @@ swift-ring-builder <builder_file> rebalance [options]
ts = time()
builder.get_ring().save(
pathjoin(backup_dir, '%d.' % ts + basename(ring_file)))
builder.save(pathjoin(backup_dir, '%d.' % ts + basename(argv[1])))
builder.save(pathjoin(backup_dir, '%d.' % ts + basename(builder_file)))
builder.get_ring().save(ring_file)
builder.save(argv[1])
builder.save(builder_file)
exit(status)
def dispersion():
@ -893,7 +894,7 @@ swift-ring-builder <builder_file> dispersion <search_filter> [options]
status = EXIT_SUCCESS
if not builder._replica2part2dev:
print('Specified builder file \"%s\" is not rebalanced yet. '
'Please rebalance first.' % argv[1])
'Please rebalance first.' % builder_file)
exit(EXIT_ERROR)
usage = Commands.dispersion.__doc__.strip()
parser = optparse.OptionParser(usage)
@ -1021,7 +1022,7 @@ swift-ring-builder <ring_file> write_builder [min_part_hours]
def pretend_min_part_hours_passed():
builder.pretend_min_part_hours_passed()
builder.save(argv[1])
builder.save(builder_file)
exit(EXIT_SUCCESS)
def set_min_part_hours():
@ -1037,7 +1038,7 @@ swift-ring-builder <builder_file> set_min_part_hours <hours>
builder.change_min_part_hours(int(argv[3]))
print('The minimum number of hours before a partition can be '
'reassigned is now set to %s' % argv[3])
builder.save(argv[1])
builder.save(builder_file)
exit(EXIT_SUCCESS)
def set_replicas():
@ -1069,7 +1070,7 @@ swift-ring-builder <builder_file> set_replicas <replicas>
builder.set_replicas(new_replicas)
print('The replica count is now %.6f.' % builder.replicas)
print('The change will take effect after the next rebalance.')
builder.save(argv[1])
builder.save(builder_file)
exit(EXIT_SUCCESS)
def set_overload():
@ -1112,7 +1113,7 @@ swift-ring-builder <builder_file> set_overload <overload>[%]
print('The overload factor is now %0.2f%% (%.6f)' % (
builder.overload * 100, builder.overload))
print('The change will take effect after the next rebalance.')
builder.save(argv[1])
builder.save(builder_file)
exit(status)
@ -1145,6 +1146,9 @@ def main(arguments=None):
exit(EXIT_SUCCESS)
builder_file, ring_file = parse_builder_ring_filename_args(argv)
if builder_file != argv[1]:
print('Note: using %s instead of %s as builder file' % (
builder_file, argv[1]))
try:
builder = RingBuilder.load(builder_file)
@ -1157,10 +1161,10 @@ def main(arguments=None):
exit(EXIT_ERROR)
except Exception as e:
print('Problem occurred while reading builder file: %s. %s' %
(argv[1], e))
(builder_file, e))
exit(EXIT_ERROR)
backup_dir = pathjoin(dirname(argv[1]), 'backups')
backup_dir = pathjoin(dirname(builder_file), 'backups')
try:
mkdir(backup_dir)
except OSError as err:
@ -1173,7 +1177,7 @@ def main(arguments=None):
command = argv[2]
if argv[0].endswith('-safe'):
try:
with lock_parent_directory(abspath(argv[1]), 15):
with lock_parent_directory(abspath(builder_file), 15):
Commands.__dict__.get(command, Commands.unknown.im_func)()
except exceptions.LockTimeout:
print("Ring/builder dir currently locked.")

View File

@ -1755,6 +1755,23 @@ class TestCommands(unittest.TestCase, RunSwiftRingBuilderMixin):
self.assertIn('dispersion', out.lower())
self.assertFalse(err)
def test_use_ringfile_as_builderfile(self):
mock_stdout = six.StringIO()
mock_stderr = six.StringIO()
argv = ["", "object.ring.gz"]
try:
with mock.patch("sys.stdout", mock_stdout):
with mock.patch("sys.stderr", mock_stderr):
ringbuilder.main(argv)
except SystemExit:
pass
expected = "Note: using object.builder instead of object.ring.gz " \
"as builder file\n" \
"Ring Builder file does not exist: object.builder\n"
self.assertEqual(expected, mock_stdout.getvalue())
class TestRebalanceCommand(unittest.TestCase, RunSwiftRingBuilderMixin):