From 8b1df9918bf6c22b49b161a402199b532bfd8266 Mon Sep 17 00:00:00 2001 From: Clay Gerrard Date: Fri, 21 Aug 2015 14:04:46 -0700 Subject: [PATCH] Minor cleanup handoff mode warnings * message is a little clearer * test is a little stronger Change-Id: I745cde7f4a46dafc80ab42d39e6ccc92aa3b746e --- swift/obj/replicator.py | 7 +++--- test/unit/__init__.py | 2 ++ test/unit/obj/test_replicator.py | 41 ++++++++++++++++++++------------ 3 files changed, 32 insertions(+), 18 deletions(-) diff --git a/swift/obj/replicator.py b/swift/obj/replicator.py index 08d50f1e1f..0cecc3bd54 100644 --- a/swift/obj/replicator.py +++ b/swift/obj/replicator.py @@ -100,9 +100,10 @@ class ObjectReplicator(Daemon): self.handoff_delete = config_auto_int_value( conf.get('handoff_delete', 'auto'), 0) if any((self.handoff_delete, self.handoffs_first)): - self.logger.warn('handoffs_first and handoff_delete should be' - ' changed back to the default before the next' - ' normal rebalance') + self.logger.warn('Handoff only mode is not intended for normal ' + 'operation, please disable handoffs_first and ' + 'handoff_delete before the next ' + 'normal rebalance') self._diskfile_mgr = DiskFileManager(conf, self.logger) # Just exists for doc anchor point diff --git a/test/unit/__init__.py b/test/unit/__init__.py index a6c5001c3c..ae9723a346 100644 --- a/test/unit/__init__.py +++ b/test/unit/__init__.py @@ -510,6 +510,8 @@ class FakeLogger(logging.Logger, object): self.lines_dict = {'critical': [], 'error': [], 'info': [], 'warning': [], 'debug': [], 'notice': []} + clear = _clear # this is a public interface + def get_lines_for_level(self, level): if level not in self.lines_dict: raise KeyError( diff --git a/test/unit/obj/test_replicator.py b/test/unit/obj/test_replicator.py index 2734f247a5..2919eb26cb 100644 --- a/test/unit/obj/test_replicator.py +++ b/test/unit/obj/test_replicator.py @@ -185,21 +185,32 @@ class TestObjectReplicator(unittest.TestCase): rmtree(self.testdir, ignore_errors=1) def test_handoff_replication_setting_warnings(self): - conf = {'handoffs_first': 'true'} - replicator = object_replicator.ObjectReplicator( - conf, logger=self.logger) - self.assertTrue(replicator.handoffs_first) - log_message = 'handoffs_first and handoff_delete should'\ - ' be changed back to the default before the'\ - ' next normal rebalance' - expected = [log_message] - self.assertEqual(self.logger.get_lines_for_level('warning'), expected) - conf = {'handoff_delete': '2'} - replicator = object_replicator.ObjectReplicator( - conf, logger=self.logger) - self.assertEqual(replicator.handoff_delete, 2) - expected.append(log_message) - self.assertEqual(self.logger.get_lines_for_level('warning'), expected) + conf_tests = [ + # (config, expected_warning) + ({}, False), + ({'handoff_delete': 'auto'}, False), + ({'handoffs_first': 'no'}, False), + ({'handoff_delete': '2'}, True), + ({'handoffs_first': 'yes'}, True), + ({'handoff_delete': '1', 'handoffs_first': 'yes'}, True), + ] + log_message = 'Handoff only mode is not intended for normal ' \ + 'operation, please disable handoffs_first and ' \ + 'handoff_delete before the next normal rebalance' + for config, expected_warning in conf_tests: + self.logger.clear() + object_replicator.ObjectReplicator(config, logger=self.logger) + warning_log_lines = self.logger.get_lines_for_level('warning') + if expected_warning: + expected_log_lines = [log_message] + else: + expected_log_lines = [] + self.assertEqual(expected_log_lines, warning_log_lines, + 'expected %s != %s for config %r' % ( + expected_log_lines, + warning_log_lines, + config, + )) def _write_disk_data(self, disk_name): os.mkdir(os.path.join(self.devices, disk_name))