Every lock name belongs to a global scope. If this scope is local to the node, the name is valid only on its own node. It is always separate from a name which is the same but which has the cluster as its scope.
Two applications (running on different nodes in a cluster) that have specified the same lock name with local scope are not serialized because each of the lock names is a local, nodespecific name.
If two applications specify the cluster as the scope for identical lock names, they refer to the same lock and are serialized by the DLM.
If two applications (running anywhere on the cluster) specify the same lock names but different scopes, they refer to different locks.
A lock with NAMRNGE=*OWNSYSTEM cannot be transferred to a lock with NAMRNGE=*CLUSTER because these two locks are completely different.
To enable user programs (that were developed for cluster systems) to run on single systems without the need for modifications, the DLM provides the following feature:
If a system is not part of a cluster and is also not part of a cluster in the current session, the DLM accepts LKENQ calls as if this system were part of a cluster. Locks which have been enqueued with NAMRNGE=*CLUSTER are not the same as those enqueued with NAMRNGE=*OWNSYSTEM.
Brief overview
Specify when | Macro | Returned by macro | |
MF=D | LKEQU | (1) | |
MF=L | LKLSB | (2) | |
LKINF | (3) | ||
LKENQ | LOCKID | (4) | |
LOCKID | LKCVT | (5) | |
LOCKID | LKCAN | (6) | |
LOCKID | LKDEQ | (7) |
(1) | LKEQU | generates DLM-specific layouts |
(2) | LKLSB | generates the layout of the Lock Status Block |
(3) | LKINF | provides information about locks |
(4) | LKENQ | creates a lock and supplies a lock ID |
(5) | LKCVT | converts the lock request |
(6) | LKCAN | cancels the lock request |
(7) | LKDEQ | releases lock requests |