Merge "sharder: make gap and overlap warning logs shorter"
This commit is contained in:
@@ -1296,9 +1296,8 @@ class ContainerSharder(ContainerSharderConf, ContainerReplicator):
|
|||||||
paths_with_gaps = find_paths_with_gaps(shard_ranges)
|
paths_with_gaps = find_paths_with_gaps(shard_ranges)
|
||||||
if paths_with_gaps:
|
if paths_with_gaps:
|
||||||
warnings.append(
|
warnings.append(
|
||||||
'missing range(s): %s' %
|
'missing range(s): %s (use swift-manage-shard-ranges '
|
||||||
' '.join(['%s-%s' % (gap.lower, gap.upper)
|
'repair)' % len(paths_with_gaps))
|
||||||
for (_, gap, _) in paths_with_gaps]))
|
|
||||||
|
|
||||||
for state in ShardRange.STATES:
|
for state in ShardRange.STATES:
|
||||||
if state == ShardRange.SHRINKING:
|
if state == ShardRange.SHRINKING:
|
||||||
@@ -1322,13 +1321,9 @@ class ContainerSharder(ContainerSharderConf, ContainerReplicator):
|
|||||||
self._increment_stat('audit_root', 'has_overlap')
|
self._increment_stat('audit_root', 'has_overlap')
|
||||||
self._update_stat('audit_root', 'num_overlap',
|
self._update_stat('audit_root', 'num_overlap',
|
||||||
step=len(overlaps))
|
step=len(overlaps))
|
||||||
all_overlaps = ', '.join(
|
|
||||||
[' '.join(['%s-%s' % (sr.lower, sr.upper)
|
|
||||||
for sr in overlapping_ranges])
|
|
||||||
for overlapping_ranges in sorted(list(overlaps))])
|
|
||||||
warnings.append(
|
warnings.append(
|
||||||
'overlapping ranges in state %r: %s' %
|
'overlapping ranges: %s (use swift-manage-shard-ranges '
|
||||||
(ShardRange.STATES[state], all_overlaps))
|
'repair)' % len(overlaps))
|
||||||
|
|
||||||
# We've seen a case in production where the roots own_shard_range
|
# We've seen a case in production where the roots own_shard_range
|
||||||
# epoch is reset to None, and state set to ACTIVE (like re-defaulted)
|
# epoch is reset to None, and state set to ACTIVE (like re-defaulted)
|
||||||
|
|||||||
@@ -6110,13 +6110,13 @@ class TestSharder(BaseTestSharder):
|
|||||||
self.assertFalse(sharder.logger.get_lines_for_level('error'))
|
self.assertFalse(sharder.logger.get_lines_for_level('error'))
|
||||||
mocked.assert_not_called()
|
mocked.assert_not_called()
|
||||||
|
|
||||||
def assert_overlap_warning(line, state_text):
|
def assert_overlap_warning(line):
|
||||||
self.assertIn('Audit failed for root', line)
|
self.assertIn('Audit failed for root', line)
|
||||||
self.assertIn(broker.db_file, line)
|
self.assertIn(broker.db_file, line)
|
||||||
self.assertIn(broker.path, line)
|
self.assertIn(broker.path, line)
|
||||||
self.assertIn(
|
self.assertIn(
|
||||||
'overlapping ranges in state %r: k-t s-y, y-z y-z'
|
'overlapping ranges: 2 (use swift-manage-shard-ranges repair)',
|
||||||
% state_text, line)
|
line)
|
||||||
# check for no duplicates in reversed order
|
# check for no duplicates in reversed order
|
||||||
self.assertNotIn('s-z k-t', line)
|
self.assertNotIn('s-z k-t', line)
|
||||||
|
|
||||||
@@ -6124,7 +6124,7 @@ class TestSharder(BaseTestSharder):
|
|||||||
'has_overlap': 1, 'num_overlap': 2}
|
'has_overlap': 1, 'num_overlap': 2}
|
||||||
shard_bounds = (('a', 'j'), ('k', 't'), ('s', 'y'),
|
shard_bounds = (('a', 'j'), ('k', 't'), ('s', 'y'),
|
||||||
('y', 'z'), ('y', 'z'))
|
('y', 'z'), ('y', 'z'))
|
||||||
for state, state_text in ShardRange.STATES.items():
|
for state in ShardRange.STATES:
|
||||||
if state in (ShardRange.SHRINKING,
|
if state in (ShardRange.SHRINKING,
|
||||||
ShardRange.SHARDED,
|
ShardRange.SHARDED,
|
||||||
ShardRange.SHRUNK):
|
ShardRange.SHRUNK):
|
||||||
@@ -6137,7 +6137,7 @@ class TestSharder(BaseTestSharder):
|
|||||||
sharder, '_audit_shard_container') as mocked:
|
sharder, '_audit_shard_container') as mocked:
|
||||||
sharder._audit_container(broker)
|
sharder._audit_container(broker)
|
||||||
lines = sharder.logger.get_lines_for_level('warning')
|
lines = sharder.logger.get_lines_for_level('warning')
|
||||||
assert_overlap_warning(lines[0], state_text)
|
assert_overlap_warning(lines[0])
|
||||||
self.assertFalse(lines[1:])
|
self.assertFalse(lines[1:])
|
||||||
self.assertFalse(sharder.logger.get_lines_for_level('error'))
|
self.assertFalse(sharder.logger.get_lines_for_level('error'))
|
||||||
self._assert_stats(expected_stats, sharder, 'audit_root')
|
self._assert_stats(expected_stats, sharder, 'audit_root')
|
||||||
@@ -6183,7 +6183,9 @@ class TestSharder(BaseTestSharder):
|
|||||||
|
|
||||||
def assert_missing_warning(line):
|
def assert_missing_warning(line):
|
||||||
self.assertIn('Audit failed for root', line)
|
self.assertIn('Audit failed for root', line)
|
||||||
self.assertIn('missing range(s): -a j-k z-', line)
|
self.assertIn(
|
||||||
|
'missing range(s): 3 (use swift-manage-shard-ranges repair)',
|
||||||
|
line)
|
||||||
self.assertIn('path: %s, db: %s' % (broker.path, broker.db_file),
|
self.assertIn('path: %s, db: %s' % (broker.path, broker.db_file),
|
||||||
line)
|
line)
|
||||||
|
|
||||||
@@ -6200,7 +6202,7 @@ class TestSharder(BaseTestSharder):
|
|||||||
sharder._audit_container(broker)
|
sharder._audit_container(broker)
|
||||||
lines = sharder.logger.get_lines_for_level('warning')
|
lines = sharder.logger.get_lines_for_level('warning')
|
||||||
assert_missing_warning(lines[0])
|
assert_missing_warning(lines[0])
|
||||||
assert_overlap_warning(lines[0], 'active')
|
assert_overlap_warning(lines[0])
|
||||||
self.assertFalse(lines[1:])
|
self.assertFalse(lines[1:])
|
||||||
self.assertFalse(sharder.logger.get_lines_for_level('error'))
|
self.assertFalse(sharder.logger.get_lines_for_level('error'))
|
||||||
self._assert_stats(expected_stats, sharder, 'audit_root')
|
self._assert_stats(expected_stats, sharder, 'audit_root')
|
||||||
|
|||||||
Reference in New Issue
Block a user