Add --includes to s-m-s-r

Change-Id: I31d11af3fdba844c5cd632925b8fd774b109dbd1
This commit is contained in:
Clay Gerrard 2021-03-19 16:43:26 -05:00
parent a7b9d1ea69
commit 55386c836d
2 changed files with 44 additions and 0 deletions

View File

@ -273,6 +273,7 @@ def find_ranges(broker, args):
def show_shard_ranges(broker, args):
shard_ranges = broker.get_shard_ranges(
includes=getattr(args, 'includes', None),
include_deleted=getattr(args, 'include_deleted', False))
shard_data = [dict(sr, state=sr.state_text)
for sr in shard_ranges]
@ -552,6 +553,8 @@ def _make_parser():
show_parser.add_argument(
'--brief', '-b', action='store_true', default=False,
help='Show only shard range bounds in output.')
show_parser.add_argument('--includes',
help='limit shard ranges to include key')
show_parser.set_defaults(func=show_shard_ranges)
# info

View File

@ -423,6 +423,47 @@ class TestManageShardRanges(unittest.TestCase):
self.assertEqual(['Loaded db broker for a/c.'],
err.getvalue().splitlines())
def test_show(self):
broker = self._make_broker()
out = StringIO()
err = StringIO()
with mock.patch('sys.stdout', out), mock.patch('sys.stderr', err):
main([broker.db_file, 'show'])
expected = [
'Loaded db broker for a/c.',
'No shard data found.',
]
self.assertEqual(expected, err.getvalue().splitlines())
self.assertEqual('', out.getvalue())
shard_ranges = make_shard_ranges(broker, self.shard_data, '.shards_')
expected_shard_ranges = [
dict(sr, state=ShardRange.STATES[sr.state])
for sr in shard_ranges
]
broker.merge_shard_ranges(shard_ranges)
out = StringIO()
err = StringIO()
with mock.patch('sys.stdout', out), mock.patch('sys.stderr', err):
main([broker.db_file, 'show'])
expected = [
'Loaded db broker for a/c.',
'Existing shard ranges:',
]
self.assertEqual(expected, err.getvalue().splitlines())
self.assertEqual(expected_shard_ranges, json.loads(out.getvalue()))
out = StringIO()
err = StringIO()
with mock.patch('sys.stdout', out), mock.patch('sys.stderr', err):
main([broker.db_file, 'show', '--includes', 'foo'])
expected = [
'Loaded db broker for a/c.',
'Existing shard ranges:',
]
self.assertEqual(expected, err.getvalue().splitlines())
self.assertEqual(expected_shard_ranges[:1], json.loads(out.getvalue()))
def test_replace(self):
broker = self._make_broker()
broker.update_metadata({'X-Container-Sysmeta-Sharding':