Mark Fasheh | 8df08c8 | 2005-12-15 14:31:23 -0800 | [diff] [blame] | 1 | dlmfs |
| 2 | ================== |
| 3 | A minimal DLM userspace interface implemented via a virtual file |
| 4 | system. |
| 5 | |
| 6 | dlmfs is built with OCFS2 as it requires most of its infrastructure. |
| 7 | |
| 8 | Project web page: http://oss.oracle.com/projects/ocfs2 |
| 9 | Tools web page: http://oss.oracle.com/projects/ocfs2-tools |
| 10 | OCFS2 mailing lists: http://oss.oracle.com/projects/ocfs2/mailman/ |
| 11 | |
| 12 | All code copyright 2005 Oracle except when otherwise noted. |
| 13 | |
| 14 | CREDITS |
| 15 | ======= |
| 16 | |
| 17 | Some code taken from ramfs which is Copyright (C) 2000 Linus Torvalds |
| 18 | and Transmeta Corp. |
| 19 | |
| 20 | Mark Fasheh <mark.fasheh@oracle.com> |
| 21 | |
| 22 | Caveats |
| 23 | ======= |
| 24 | - Right now it only works with the OCFS2 DLM, though support for other |
| 25 | DLM implementations should not be a major issue. |
| 26 | |
| 27 | Mount options |
| 28 | ============= |
| 29 | None |
| 30 | |
| 31 | Usage |
| 32 | ===== |
| 33 | |
| 34 | If you're just interested in OCFS2, then please see ocfs2.txt. The |
| 35 | rest of this document will be geared towards those who want to use |
| 36 | dlmfs for easy to setup and easy to use clustered locking in |
| 37 | userspace. |
| 38 | |
| 39 | Setup |
| 40 | ===== |
| 41 | |
| 42 | dlmfs requires that the OCFS2 cluster infrastructure be in |
| 43 | place. Please download ocfs2-tools from the above url and configure a |
| 44 | cluster. |
| 45 | |
| 46 | You'll want to start heartbeating on a volume which all the nodes in |
| 47 | your lockspace can access. The easiest way to do this is via |
| 48 | ocfs2_hb_ctl (distributed with ocfs2-tools). Right now it requires |
| 49 | that an OCFS2 file system be in place so that it can automatically |
| 50 | find it's heartbeat area, though it will eventually support heartbeat |
| 51 | against raw disks. |
| 52 | |
| 53 | Please see the ocfs2_hb_ctl and mkfs.ocfs2 manual pages distributed |
| 54 | with ocfs2-tools. |
| 55 | |
| 56 | Once you're heartbeating, DLM lock 'domains' can be easily created / |
| 57 | destroyed and locks within them accessed. |
| 58 | |
| 59 | Locking |
| 60 | ======= |
| 61 | |
| 62 | Users may access dlmfs via standard file system calls, or they can use |
| 63 | 'libo2dlm' (distributed with ocfs2-tools) which abstracts the file |
| 64 | system calls and presents a more traditional locking api. |
| 65 | |
| 66 | dlmfs handles lock caching automatically for the user, so a lock |
| 67 | request for an already acquired lock will not generate another DLM |
| 68 | call. Userspace programs are assumed to handle their own local |
| 69 | locking. |
| 70 | |
| 71 | Two levels of locks are supported - Shared Read, and Exlcusive. |
| 72 | Also supported is a Trylock operation. |
| 73 | |
| 74 | For information on the libo2dlm interface, please see o2dlm.h, |
| 75 | distributed with ocfs2-tools. |
| 76 | |
| 77 | Lock value blocks can be read and written to a resource via read(2) |
| 78 | and write(2) against the fd obtained via your open(2) call. The |
| 79 | maximum currently supported LVB length is 64 bytes (though that is an |
| 80 | OCFS2 DLM limitation). Through this mechanism, users of dlmfs can share |
| 81 | small amounts of data amongst their nodes. |
| 82 | |
| 83 | mkdir(2) signals dlmfs to join a domain (which will have the same name |
| 84 | as the resulting directory) |
| 85 | |
| 86 | rmdir(2) signals dlmfs to leave the domain |
| 87 | |
| 88 | Locks for a given domain are represented by regular inodes inside the |
| 89 | domain directory. Locking against them is done via the open(2) system |
| 90 | call. |
| 91 | |
| 92 | The open(2) call will not return until your lock has been granted or |
| 93 | an error has occurred, unless it has been instructed to do a trylock |
| 94 | operation. If the lock succeeds, you'll get an fd. |
| 95 | |
| 96 | open(2) with O_CREAT to ensure the resource inode is created - dlmfs does |
| 97 | not automatically create inodes for existing lock resources. |
| 98 | |
| 99 | Open Flag Lock Request Type |
| 100 | --------- ----------------- |
| 101 | O_RDONLY Shared Read |
| 102 | O_RDWR Exclusive |
| 103 | |
| 104 | Open Flag Resulting Locking Behavior |
| 105 | --------- -------------------------- |
| 106 | O_NONBLOCK Trylock operation |
| 107 | |
| 108 | You must provide exactly one of O_RDONLY or O_RDWR. |
| 109 | |
| 110 | If O_NONBLOCK is also provided and the trylock operation was valid but |
| 111 | could not lock the resource then open(2) will return ETXTBUSY. |
| 112 | |
| 113 | close(2) drops the lock associated with your fd. |
| 114 | |
| 115 | Modes passed to mkdir(2) or open(2) are adhered to locally. Chown is |
| 116 | supported locally as well. This means you can use them to restrict |
| 117 | access to the resources via dlmfs on your local node only. |
| 118 | |
| 119 | The resource LVB may be read from the fd in either Shared Read or |
| 120 | Exclusive modes via the read(2) system call. It can be written via |
| 121 | write(2) only when open in Exclusive mode. |
| 122 | |
| 123 | Once written, an LVB will be visible to other nodes who obtain Read |
| 124 | Only or higher level locks on the resource. |
| 125 | |
| 126 | See Also |
| 127 | ======== |
| 128 | http://opendlm.sourceforge.net/cvsmirror/opendlm/docs/dlmbook_final.pdf |
| 129 | |
| 130 | For more information on the VMS distributed locking API. |