summaryrefslogtreecommitdiffstats
path: root/src/test/cls_lock
diff options
context:
space:
mode:
authorNitzanMordhai <nmordech@redhat.com>2022-07-17 10:01:30 +0200
committerNitzanMordhai <nmordech@redhat.com>2023-08-01 09:56:07 +0200
commitd3457c64b1bdc26a4379197ae206019a615d2ebc (patch)
treea18bc4032b2de8498bf0a568d7978ee318f6fb71 /src/test/cls_lock
parentMerge pull request #52701 from rhcs-dashboard/flake8-fix (diff)
downloadceph-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.cc30
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));