Test for PartitionLockTimeout

Related-Change-Id: Ibe139a4d303079b5b803a76b270e1366f09dc534
Change-Id: Iee941343df08d01b9ad0c5c70fcf05240d259a4f
This commit is contained in:
Clay Gerrard
2021-10-25 09:12:54 -05:00
parent 3365998424
commit 8ebd0354a9
2 changed files with 16 additions and 1 deletions

View File

@@ -595,7 +595,7 @@ class ObjectReplicator(Daemon):
self.logger.info("Unable to lock handoff partition %s for "
"replication on device %s policy %d",
job['partition'], job['device'],
int(job['policy']))
job['policy'])
self.logger.increment('partition.lock-failure.count')
except (Exception, Timeout):
self.logger.exception(_("Error syncing handoff partition"))

View File

@@ -40,6 +40,7 @@ from swift.common import ring
from swift.common.recon import RECON_OBJECT_FILE
from swift.obj import diskfile, replicator as object_replicator
from swift.common.storage_policy import StoragePolicy, POLICIES
from swift.common.exceptions import PartitionLockTimeout
def _ips(*args, **kwargs):
@@ -2118,6 +2119,20 @@ class TestObjectReplicator(unittest.TestCase):
# After 10 cycles every partition is seen exactly once
self.assertEqual(sorted(range(partitions)), sorted(seen))
def test_update_deleted_partition_lock_timeout(self):
self.replicator.handoffs_remaining = 0
jobs = self.replicator.collect_jobs()
delete_jobs = [j for j in jobs if j['delete']]
delete_jobs.sort(key=lambda j: j['policy'])
job = delete_jobs[0]
df_mgr = self.replicator._df_router[job['policy']]
with mock.patch.object(df_mgr, 'partition_lock',
side_effect=PartitionLockTimeout):
self.replicator.update_deleted(job)
logs = self.logger.get_lines_for_level('info')
self.assertEqual(['Unable to lock handoff partition 1 for '
'replication on device sda policy 0'], logs)
def test_replicate_skipped_partpower_increase(self):
_create_test_rings(self.testdir, next_part_power=4)
self.replicator.replicate()