diff options
author | NitzanMordhai <nmordech@redhat.com> | 2022-07-17 10:01:30 +0200 |
---|---|---|
committer | NitzanMordhai <nmordech@redhat.com> | 2023-08-01 09:56:07 +0200 |
commit | d3457c64b1bdc26a4379197ae206019a615d2ebc (patch) | |
tree | a18bc4032b2de8498bf0a568d7978ee318f6fb71 /src/test/cls_lock | |
parent | Merge pull request #52701 from rhcs-dashboard/flake8-fix (diff) | |
download | ceph-d3457c64b1bdc26a4379197ae206019a615d2ebc.tar.xz ceph-d3457c64b1bdc26a4379197ae206019a615d2ebc.zip |
cls_lock: expired lock before unlock and start check
If the lock expired, the stat check shouldn't return -ENOENT,
We will change the lock duration to prevent lock expired before the
stat check.
Fixes: https://tracker.ceph.com/issues/56575
Signed-off-by: Nitzan Mordechai <nmordec@redhat.com>
Diffstat (limited to 'src/test/cls_lock')
-rw-r--r-- | src/test/cls_lock/test_cls_lock.cc | 30 |
1 files changed, 4 insertions, 26 deletions
diff --git a/src/test/cls_lock/test_cls_lock.cc b/src/test/cls_lock/test_cls_lock.cc index 862720826c4..b915de9c236 100644 --- a/src/test/cls_lock/test_cls_lock.cc +++ b/src/test/cls_lock/test_cls_lock.cc @@ -63,23 +63,6 @@ void lock_info(IoCtx *ioctx, string& oid, string& name, map<locker_id_t, locker_ lock_info(ioctx, oid, name, lockers, NULL, NULL); } -bool lock_expired(IoCtx *ioctx, string& oid, string& name) -{ - ClsLockType lock_type = ClsLockType::NONE; - string tag; - map<locker_id_t, locker_info_t> lockers; - if (0 == get_lock_info(ioctx, oid, name, &lockers, &lock_type, &tag)) - return false; - utime_t now = ceph_clock_now(); - map<locker_id_t, locker_info_t>::iterator liter; - for (liter = lockers.begin(); liter != lockers.end(); ++liter) { - if (liter->second.expiration > now) - return false; - } - - return true; -} - TEST(ClsLock, TestMultiLocking) { Rados cluster; std::string pool_name = get_temp_pool_name(); @@ -493,7 +476,7 @@ TEST(ClsLock, TestExclusiveEphemeralBasic) { string lock_name2 = "mylock2"; Lock l1(lock_name1); - l1.set_duration(utime_t(5, 0)); + l1.set_duration(utime_t(300, 0)); uint64_t size; time_t mod_time; @@ -502,23 +485,18 @@ TEST(ClsLock, TestExclusiveEphemeralBasic) { ASSERT_EQ(0, l1.lock_exclusive_ephemeral(&ioctx, oid1)); ASSERT_EQ(0, ioctx.stat(oid1, &size, &mod_time)); sleep(2); - int r1 = l1.unlock(&ioctx, oid1); - EXPECT_TRUE(r1 == 0 || ((r1 == -ENOENT) && (lock_expired(&ioctx, oid1, lock_name1)))) - << "unlock should return 0 or -ENOENT return: " << r1; + ASSERT_EQ(0, l1.unlock(&ioctx, oid1)); ASSERT_EQ(-ENOENT, ioctx.stat(oid1, &size, &mod_time)); // *********************************************** Lock l2(lock_name2); - utime_t lock_duration2(5, 0); - l2.set_duration(utime_t(5, 0)); + l2.set_duration(utime_t(300, 0)); ASSERT_EQ(0, l2.lock_exclusive(&ioctx, oid2)); ASSERT_EQ(0, ioctx.stat(oid2, &size, &mod_time)); sleep(2); - int r2 = l2.unlock(&ioctx, oid2); - EXPECT_TRUE(r2 == 0 || ((r2 == -ENOENT) && (lock_expired(&ioctx, oid2, lock_name2)))) - << "unlock should return 0 or -ENOENT return: " << r2; + ASSERT_EQ(0, l2.unlock(&ioctx, oid2)); ASSERT_EQ(0, ioctx.stat(oid2, &size, &mod_time)); ASSERT_EQ(0, destroy_one_pool_pp(pool_name, cluster)); |