]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commit
mds: do not double-queue file recovery in eval_gather 352/head
authorSage Weil <sage@inktank.com>
Fri, 7 Jun 2013 04:38:56 +0000 (21:38 -0700)
committerSage Weil <sage@inktank.com>
Fri, 7 Jun 2013 04:38:56 +0000 (21:38 -0700)
commita08d62045657713bf0a5372bf14136082ec3b17e
tree2cfebb2b88d0c9f3f58239f9e29a22bfa1e09ee9
parent5c30844762e269b79160816fc05bfe9ec3cd72ea
mds: do not double-queue file recovery in eval_gather

This fixes a specific case of double-queuing seen in #4832:

 - client goes stale, inode marked NEEDSRECOVER
 - eval does sync, queued, -> RECOVERING
 - client resumes
 - client goes stale (again), inode marked NEEDSRECOVER
 - eval_gather queues *again*

Note that a cursory look at the recovery code makes me think this needs
a much more serious overhaul.  In particular, I don't think we should
be triggering recovery when transitioning *from* a stable state, but
explicitly when we are flagged, or when gathering.  We should probably
also hold a wrlock over the recovery period and remove the force_wrlock
kludge from the final size check.  Opened ticket #5268.

Signed-off-by: Sage Weil <sage@inktank.com>
src/mds/Locker.cc