ocfs2-devel.oss.oracle.com archive mirror
 help / color / mirror / Atom feed
From: Sunil Mushran <sunil.mushran@oracle.com>
To: ocfs2-devel@oss.oracle.com
Subject: [Ocfs2-devel] [PATCH] ocfs2/dlm: correct the refmap on recovery master
Date: Wed, 21 Jul 2010 11:19:54 -0700	[thread overview]
Message-ID: <4C473A4A.9050500@oracle.com> (raw)
In-Reply-To: <20100721122202.GA3291@laptop.jp.oracle.com>

So I discussed this problem with Srini. Yes, your patch is on the right
track. Just that it needs to be rebased atop Srini's patch.

On 07/21/2010 05:22 AM, Wengang Wang wrote:
> On 10-07-20 15:33, Sunil Mushran wrote:
>    
>> On 07/19/2010 07:59 PM, Wengang Wang wrote:
>>      
>>>> Do you have the message sequencing that would lead to this situation?
>>>> If we migrate the lockres to the reco master, the reco master will send
>>>> an assert that will make us change the master.
>>>>          
>>> So first, the problem is not about the changing owner. It is that
>>> the bit(in refmap) on behalf of the node in question is not cleared on the new
>>> master(recovery master). So that the new master will fail at purging the lockres
>>> due to the incorrect bit in refmap.
>>>
>>> Second, I have no messages at hand for the situation. But I think it is simple
>>> enough.
>>>
>>> 1) node A has no interest on lockres A any longer, so it is purging it.
>>> 2) the owner of lockres A is node B, so node A is sending de-ref message
>>> to node B.
>>> 3) at this time, node B crashed. node C becomes the recovery master. it recovers
>>> lockres A(because the master is the dead node B).
>>> 4) node A migrated lockres A to node C with a refbit there.
>>> 5) node A failed to send de-ref message to node B because it crashed. The failure
>>> is ignored. no other action is done for lockres A any more.
>>>        
>> In dlm_do_local_recovery_cleanup(), we expicitly clear the flag...
>> when the owner is the dead_node. So this should not happen.
>>      
> It reproduces in my test env.
>
> Clearing the flag DLM_LOCK_RES_DROPPING_REF doesn't prevent anything.
>
> dlm_do_local_recovery_cleanup() continue to move the lockres to recovery
> list.
>
> 2337                                 /* the wake_up for this will happen when the
> 2338                                  * RECOVERING flag is dropped later */
> 2339                                 res->state&= ~DLM_LOCK_RES_DROPPING_REF;
> 2340
> 2341				     dlm_move_lockres_to_recovery_list(dlm, res);
>
>
> and dlm_purge_lockres() continue to unhash the lockres.
>
> 202                 ret = dlm_drop_lockres_ref(dlm, res);
> 203                 if (ret<  0) {
> 204                         mlog_errno(ret);
> 205                         if (!dlm_is_host_down(ret))
> 206                                 BUG();
> 207                 }
> 208                 mlog(0, "%s:%.*s: dlm_deref_lockres returned %d\n",
> 209                      dlm->name, res->lockname.len, res->lockname.name, ret);
> 210                 spin_lock(&dlm->spinlock);
> 211         }
> 212
> 213         spin_lock(&res->spinlock);
> 214         if (!list_empty(&res->purge)) {
> 215                 mlog(0, "removing lockres %.*s:%p from purgelist, "
> 216                      "master = %d\n", res->lockname.len, res->lockname.name,
> 217                      res, master);
> 218                 list_del_init(&res->purge);
> 219                 spin_unlock(&res->spinlock);
> 220                 dlm_lockres_put(res);
> 221                 dlm->purge_count--;
> 222         } else
> 223                 spin_unlock(&res->spinlock);
> 224
> 225         __dlm_unhash_lockres(res);
>
>
>    
>> Your patch changes the logic to exclude such lockres' from the
>> recovery list. And that's a change, while possibly workable, needs
>> to be looked into more thoroughly.
>>
>> In short, there is a disconnect between your description and your patch.
>> Or, my understanding.
>>      
> For mormal, we recover the lockres to recovery master, and then re-send the deref
> message to it. That my privious patches do.
>
> After discussing with Srini, we found ignoring the failure of deref to the original
> master and not recovering the lockres to recovery master has the same effect. And
> it's simpler.
>
> The patch fixes the bug per my test result.
>
> regards,
> wengang.
>    

  reply	other threads:[~2010-07-21 18:19 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-06-10 16:25 [Ocfs2-devel] [PATCH] ocfs2/dlm: correct the refmap on recovery master Wengang Wang
2010-06-25  1:55 ` Wengang Wang
2010-07-05 10:00   ` Wengang Wang
2010-07-19 10:09 ` Wengang Wang
2010-07-19 23:52   ` Sunil Mushran
2010-07-20  2:59     ` Wengang Wang
2010-07-20 22:33       ` Sunil Mushran
2010-07-21 12:22         ` Wengang Wang
2010-07-21 18:19           ` Sunil Mushran [this message]
2010-07-22 10:51             ` Wengang Wang
2010-07-22 16:58               ` Sunil Mushran

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=4C473A4A.9050500@oracle.com \
    --to=sunil.mushran@oracle.com \
    --cc=ocfs2-devel@oss.oracle.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).