From 55386c836dc1e9fc466955aa4af5fce1728a5eb6 Mon Sep 17 00:00:00 2001 From: Clay Gerrard Date: Fri, 19 Mar 2021 16:43:26 -0500 Subject: [PATCH] Add --includes to s-m-s-r Change-Id: I31d11af3fdba844c5cd632925b8fd774b109dbd1 --- swift/cli/manage_shard_ranges.py | 3 ++ test/unit/cli/test_manage_shard_ranges.py | 41 +++++++++++++++++++++++ 2 files changed, 44 insertions(+) diff --git a/swift/cli/manage_shard_ranges.py b/swift/cli/manage_shard_ranges.py index 30d510fb22..fd8bcdc3c2 100644 --- a/swift/cli/manage_shard_ranges.py +++ b/swift/cli/manage_shard_ranges.py @@ -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 diff --git a/test/unit/cli/test_manage_shard_ranges.py b/test/unit/cli/test_manage_shard_ranges.py index d2bedaaf22..c3ddb14299 100644 --- a/test/unit/cli/test_manage_shard_ranges.py +++ b/test/unit/cli/test_manage_shard_ranges.py @@ -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':