Re: RE: [Opendlm-devel] ODLM/OGFS Recovery
Stanley Wang <[email protected]> Fri, 30 Apr 2004 15:22:23 +0800
| Newsgroups | gmane.comp.file-systems.opengfs.devel |
|---|---|
| Message-ID | <[email protected]> |
Daniel McNeil wrote:
[snip]
>This is the same question I had many years ago when I first heard about
>persistent locking. As I have said before, a particular implementation
>of persistent locking was used to implement a cluster file system.
>
>>From what I remember (It has been more than 4 years since I worked
>on this). As it was explained to me, the whole point of persistent
>locks was that the application did not want to keep a bunch of locks
>open to be able to find out that some event has occurred which would
>require an application recovery before using the lock. Previously,
>the application would keep the locks open and if it got a invalid
>value block back, it would know that a recovery is required. With
>"persistent" locks, the application did not have to keep the lock
>open, but would still get the invalid value block if process holding
>the lock died or a node died.
>
>Re-reading the trucluster man pages I pointed to before (like this one):
>http://h30097.www3.hp.com/docs/cluster_doc/cluster_16/MAN/MAN3/0021____.HTM
>
>This implementation seems much more complicated than what I remember.
>This looks like this DLM does keep persistent locks around if they
>are invalid after the process closes them (and they get marked invalid
>if a node dies). Thus, a new lock request will see the invalid lock
>even when all previous users have gone away. I'm guessing that is
>what is meant by persistent.
>
>The more simple implementation approach I remember (as best as I can --
>at least for the node death case anyway -- and it really isn't that
>simple). If a node dies, then all new persistent locks would return
>invalid until the dlm_rd_validate() is made. Also, existing dlm locks
>could get marked invalid during dlm recovery.
>
>This implementation was then used to implement CFS. Recovery went
>something like:
> running nomally
> node dies
> DLM recovery runs - non-persistent locks recover
> persistent locks return invalid
> deadman locks from dead node(s) for each file system are granted
> start file system recovery:
> surviving nodes pick one to run log replay
> id = dlm_attach()
> replay file system log
> if validate(id) == MORE_RECOVERY
> re-start file system recovery
> since there's been another death
> dlm_validate(id) - persistent locks valid now
> other surviving nodes wait for replay
> file system recovery complete
>
> if another node dies in the middle of file system recovery
> abort current recovery and start over
>
>
>This is simpler because persistent locks returned invalid based on
>whether a node died until the validate call was made. Every node
>in the cluster did not have to replicated each lock information.
>
>The use of persistent locks prevented surviving nodes from accessing
>metadata BEFORE file system log replay had finished. We used separate
>lock domains for each file system, so file system recovery happened in
>parallel.
>
>
>Sorry for rambling, but I think I answered the question in there
>somewhere.
>
>
Thanks a lot for your help!
Persistent locks in trucluster can survive node cases if it is attached
to a "recovery domain". Although the persistent locks are open to all
the other nodes after one node death, "DLM_xxxxVALNOTVALID" could be
used as indicator of node failure. And as I understood, there are
some differences in OpenDLM:
1. No "recovery domain" support
2. After node failure event, if the new granted lock request (on a
persistent lock resource) is PW or EX, "DLM_VALNOTVALID" will NOT be
returned.
(Is that true? I got my conclusion from "valueblock()", if I miss
sth, please correct me.)
3. There is not a dedicated API to re-validate lock value block, if the
requested mode is PW or EX and LKM_VALBLK is specified, the LVB becomes
valid again.
And it seems the second issues in previous list is crucial for ODLM/OGFS
Recovery. Change the codes is easy, but I'm afraid it will break other's
work. Any comments? Especially Don :)
Best Reagrds,
Stan
--
Opinions expressed are those of the author and do not represent Intel
Corporation
"gpg --recv-keys --keyserver wwwkeys.pgp.net E1390A7F"
{E1390A7F:3AD1 1B0C 2019 E183 0CFF 55E8 369A 8B75 E139 0A7F}
-------------------------------------------------------
This SF.Net email is sponsored by: Oracle 10g
Get certified on the hottest thing ever to hit the market... Oracle 10g.
Take an Oracle 10g class now, and we'll give you the exam FREE.
http://ads.osdn.com/?ad_id=3149&alloc_id=8166&op=click