]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
mds: allow lock state to be LOCK_MIX_SYNC in replica for filelock 56051/head
authorXiubo Li <xiubli@redhat.com>
Tue, 28 Nov 2023 03:21:38 +0000 (11:21 +0800)
committerXiubo Li <xiubli@redhat.com>
Fri, 8 Mar 2024 00:37:42 +0000 (08:37 +0800)
When the auth MDS is transmitting state from LOCK_MIX to LOCK_SYNC
it will transmit the state to a intermidiate state LOCK_MIX_SYNC.
Then notifies the replicate MDSs and waits for the acks. But just
in case for some reasons the replicate MDSs couldn't successfully
transmit the state from LOCK_MIX to LOCK_MIX_SYNC and then
LOCK_MIX_SYNC2. And just the auth MDS failover or restart and
then resend the notification.

Fixes: https://tracker.ceph.com/issues/54833
Signed-off-by: Xiubo Li <xiubli@redhat.com>
(cherry picked from commit f50693f62387e48c5c07ba913f2d384de0fe2d5c)

src/mds/Locker.cc

index d848ec9fe934fdbc9e94363c924a84e1f1080141..0247be6db5df92c2a880eaa9deee76f94f9fbb4c 100644 (file)
@@ -5778,6 +5778,7 @@ void Locker::handle_file_lock(ScatterLock *lock, const cref_t<MLock> &m)
   case LOCK_AC_SYNC:
     ceph_assert(lock->get_state() == LOCK_LOCK ||
           lock->get_state() == LOCK_MIX ||
+          lock->get_state() == LOCK_MIX_SYNC ||
           lock->get_state() == LOCK_MIX_SYNC2);
     
     if (lock->get_state() == LOCK_MIX) {