DbLockTab



       import com.sleepycat.db.*;

       public void close()
            throws DbException;

       public void detect(int flags, int atype)
            throws DbException;

       public DbLock get(int locker, int flags, Dbt obj, int lock_mode)
            throws DbException;

       public int id()
            throws DbException;

       public static DbLockTab open(String dir, int flags, int mode, DbEnv dbenv)
            throws DbException;

       public static void unlink(String dir, int force, DbEnv dbenv)
            throws DbException;


DESCRIPTION

       The  DB  library  is  a  family of classes that provides a
       modular programming interface to transactions and  record-
       oriented  file  access.   The library includes support for
       transactions, locking, logging and file page  caching,  as
       well  as  various  indexed  access  methods.   Many of the
       classes (e.g., the file page  caching  class)  are  useful
       independent of the other DB classes, although some classes
       are explicitly based on other classes (e.g.,  transactions
       and  logging).   For  a  general  description  of  the  DB
       package, see db_intro(3).

       This manual page describes the  specific  details  of  the
       locking interface.

       The DbLockTab class is intended to provide general-purpose
       locking.   While  designed  to  work  with  the  other  Db
       functions,  this  class  is  also  useful for more general
       locking purposes.  Locks can be shared between  processes.
       In most cases, when multiple treads or processes are using
       locking, the deadlock detector, db_deadlock(1), should  be
       run.

       The  vec  method  (as it appears in the C and C++ APIs) is
       not yet implemented for Java  and  so  it  not  described.
       However,  understanding  this function in the C or C++ API
       is helpful in understanding  the  get  method,  so  please
       refer to lock_vec in db_lock(3).

  DbLockTab.open
       The  DbLockTab.open method returns a lock table identified
       by the directory dir.

       If the dbenv argument to  DbLockTab.open  was  initialized
       using  DbEnv.appinit,  dir  is interpreted as described by
       DbEnv(3).

       Otherwise, if dir is not null, it is interpreted  relative
       to  the  current working directory of the process.  If dir
       is null, the following environment variables  are  checked
       in  order:  ``TMPDIR'',  ``TEMP'', and ``TMP''.  If one of
       them is set, lock table files are created relative to  the
       directory  it  specifies.   If  none  of them are set, the
       first possible one of the following directories  is  used:
       /var/tmp, /usr/tmp, /temp, /tmp, C:/temp and C:/tmp.

       All  files  associated  with the lock table are created in
       this directory.  This directory must  already  exist  when
       DbLockTab.open  is  called.   If  the  lock  table already
       exists, the process must have permission to read and write
       the  existing  files.   If the lock table does not already
       exist, it is optionally created and initialized.

       The flags and mode arguments specify  how  files  will  be
       opened  and/or created when they don't already exist.  The
       flags value is specified by or'ing together one or more of
       the following values:

       Db.DB_CREATE
            Create  any  underlying  files, as necessary.  If the
            files do not already exist and the DB_CREATE flag  is
            not specified, the call will fail.

       Db.DB_THREAD
            Cause   the   DbLockTab   handle   returned   by  the
            DbLockTab.open  method  to  be  useable  by  multiple
            threads  within  a  single address space, i.e., to be
            ``free-threaded''.  Threading is assumed in the  Java
            API,  so  no  special  flags  are  required,  and  DB
            functions will always behave as if the DB_THREAD flag
            was specified.

       All  files  created by the lock subsystem are created with
       mode mode (as described in chmod(2)) and modified  by  the
       process'   umask  value  at  the  time  of  creation  (see
       umask(2)).  The group ownership of created files is  based
       on  the  system and directory defaults, and is not further
       specified by DB.

       The locking subsystem is configured  based  on  which  set
       methods  have been used.  It is expected that applications
       will use a single DbEnv object as the argument to  all  of
       the subsystems in the DB package.  The fields of the DbEnv
       object used by DbLockTab.open  are  described  below.   As
       references  to  the  DbEnv  object  may  be  maintained by
       DbLockTab.open, it is necessary that the DbEnv object  and
       memory   it  references  be  valid  until  the  object  is
       destroyed.   Any  of  the  DbEnv  fields  that   are   not
       explicitly set will default to appropriate values.

       The   following   fields   in  the  DbEnv  object  may  be
       initialized, using  the  appropriate  set  method,  before
       calling DbLockTab.open:

       DbErrcall db_errcall;
       String db_errpfx;
       int db_verbose;
            The error fields of the DbEnv behave as described for
            DbEnv(3).

       byte[][] lk_conflicts;
            A lk_modes by lk_modes array.  A non-0 value for  the
            array element:

                 lk_conflicts[requested_mode][held_mode]

            indicates that requested_mode and held_mode conflict.
            The ``not-granted'' mode must be  represented  by  0.
            If   lk_conflicts   is   null,  the  conflicts  array
            db_rw_conflicts  is  used;  see  the  section   below
            entitled ``STANDARD LOCK MODES'' for a description of
            that array.

       int lk_detect;
            If non-0, specifies that the deadlock detector be run
            whenever  a lock conflict occurs, and specifies which
            transaction should  be  aborted  in  the  case  of  a
            deadlock.   The lk_detect field must be set to one of
            the following values.

            Db.DB_LOCK_DEFAULT
                 Use the  default  policy  as  specified  in  the
                 db_deadlock(1) man page.

            Db.DB_LOCK_OLDEST
                 Abort the oldest transaction.

            Db.DB_LOCK_RANDOM
                 Abort  a  random  transaction  involved  in  the
                 deadlock.

            Db.DB_LOCK_YOUNGEST
                 Abort the youngest transaction.

       int lk_max;
            The maximum number of locks to be held  or  requested
            in  the  table.  This value is used by DbLockTab.open
            to estimate how much space to  allocate  for  various
            lock-table   data   structures.   If  lk_max  is  not
            explicitly set, a default value is used.

       int lk_modes;
            The number of lock modes to be recognized by the lock
            table   (including  the  ``not-granted''  mode).   If
            lk_modes is 0, the value DB_LOCK_RW_N  is  used;  see
            below for a description of that value.

       The  DbLockTab.open  method  throws  a DbException(3) that
       encapsulates an errno on failure.

  DbLockTab.id
       The DbLockTab.id method returns  a  locker  ID,  which  is
       guaranteed to be unique in the specified lock table.

       The  access  methods  (see  Db.open  in Db(3)), generate a
       unique locker  ID  for  each  file  that  is  opened  with
       locking.   During  Db access method operation, this locker
       ID will be used for all lock calls  unless  a  transaction
       identifier  was  specified for the call, in which case the
       transaction ID specified is used for locking.

       The  DbLockTab.id  method  throws  a  DbException(3)  that
       encapsulates an errno on failure.

  DbLockTab.get
       The  DbLockTab.get  method  gets a lock, as defined by the
       values of locker, obj and mode.  The locker argument is an
       unsigned  32-bit  integer  quantity.   It  represents  the
       entity requesting or releasing the lock.

       The flags value must be set to 0 or the following value:

       Db.DB_LOCK_NOWAIT
            If a lock cannot be  granted  because  the  requested
            lock   conflicts   with   an  existing  lock,  return
            immediately instead of waiting for the lock to become
            available.

       A  reference  to  the  acquired  lock  is returned.  (This
       reference is invalidated by any call  to  DbLock.put  that
       releases the lock.)  See DbLock(3).

  DbLockTab.close
       The   DbLockTab.close  method  disassociates  the  calling
       process from the lock table.  The  object  should  not  be
       used  after  a  call  to close.  Note that DbLockTab.close
       does not release any  locks  still  held  by  the  closing
       process.   (This  provides  functionality  for  long-lived
       locks.)

       In addition, if the dir  argument  to  DbLockTab.open  was
       null  and  dbenv  was not initialized using DbEnv.appinit,
       all files created for this shared region will be  removed,
       as if DbLockTab.unlink were called.

       When  multiple  threads  are  using  the  DbLockTab handle
       concurrently,  only  a  single   thread   may   call   the
       DbLockTab.close method.

       The  DbLockTab.close  method  throws a DbException(3) that
       encapsulates an errno on failure.

  DbLockTab.unlink
       The  DbLockTab.unlink  method  destroys  the  lock   table
       identified  by  the directory dir, removing all files used
       to implement the lock table.  (The directory  dir  is  not
       removed.)    If  there  are  processes  that  have  called
       DbLockTab.open  without  calling  DbLockTab.close   (i.e.,
       there  are  processes  currently  using  the  lock table),
       DbLockTab.unlink will fail without further action,  unless
       the force flag is set, in which case DbLockTab.unlink will
       attempt to remove the lock table files regardless  of  any
       processes still using the lock table.

       The  result  of  attempting to forcibly destroy the region
       when  a  process  has  the  region  open  is  unspecified.
       Processes  using  a  shared memory region maintain an open
       file descriptor for  it.   On  UNIX  systems,  the  region
       removal  should  succeed  and  processes that have already
       joined the region should continue to  run  in  the  region
       without  change,  however processes attempting to join the
       lock table will either fail or attempt  to  create  a  new
       region.   On other systems, e.g., WNT, where the unlink(2)
       system call will fail if any  process  has  an  open  file
       descriptor for the file, the region removal will fail.

       In  the  case  of catastrophic or system failure, database
       recovery must  be  performed  (see  db_recover(1)  or  the
       DB_RECOVER  flags to DbEnv.appinit(3)).  Alternatively, if
       recovery is not required  because  no  database  state  is
       maintained  across  failures, it is possible to clean up a
       lock table by removing all of the files in  the  directory
       specified  to  the  DbLockTab.open  method,  as lock table
       files are never created in any directory  other  than  the
       one specified to DbLockTab.open.  Note, however, that this
       has the potential to remove files created by the other  DB
       subsystems in this database environment.

       The  DbLockTab.unlink  method throws a DbException(3) that
       encapsulates an errno on failure.

  DbLockTab.detect
       The DbLockTab.detect method  runs  one  iteration  of  the
       deadlock  detector  on the table represented by DbLockTab.
       The deadlock detector traverses the  lock  table,  detects
       deadlocks,   and  if  it  finds  one,  marks  one  of  the
       participating transactions for abort and then returns.

       The flags value is specified by  or'ing  together  one  or
       more of the following values:

       Db.DB_LOCK_CONFLICT
            Only run the deadlock detector if a lock conflict has
            occurred  since  the  last  time  that  the  deadlock
            detector was run.

       The  atype  parameter specifies which transaction to abort
       in the case of deadlock.  It must be set to one of  values
       described  above  for  the  lk_detect  field  of the DbEnv
       object.

       The DbLockTab.detect method throws a  DbException(3)  that
       encapsulates an errno on failure.

       The  DbLockTab.detect method is based on the C lock_detect
       function, which is the underlying  function  used  by  the
       db_deadlock(1)  utility.   See  the  source  code  for the
       db_deadlock utility for an example of using lock_detect in
       a UNIX environment.


ENVIRONMENT VARIABLES

       The  following  environment variables affect the execution
       of db_lock:

       DB_HOME
            If  the  dbenv   argument   to   DbLockTab.open   was
            initialized   using   db_appinit,   the   environment
            variable DB_HOME may be  used  as  the  path  of  the
            database  home  for  the  interpretation  of  the dir
            argument   to   DbLockTab.open,   as   described   in
            db_appinit(3).

       TMPDIR
            If  the  dbenv argument to DbLockTab.open was null or
            not initialized  using  db_appinit,  the  environment
            variable TMPDIR may be used as the directory in which
            to  create  the  lock  table,  as  described  in  the
            DbLockTab.open section above.


STANDARD LOCK MODES

       The   DbLockTab   class   defines  the  following  integer
       constants, known elsewhere as db_lockmode_t,  which  which
       specify  the  type of the lock mode used with the standard
       tables above:

              Db.DB_LOCK_NG
                   not granted (always 0)

              Db.DB_LOCK_READ
                   read (shared)

              Db.DB_LOCK_WRITE
                   write (exclusive)


ERRORS

       The  DbLockTab.open  method   may   fail   and   throw   a
       DbException(3)  for  any  of  the errors specified for the
       following DB and library functions: DbLock.unlink(3),
       close(2), db_version(3), fcntl(2), fflush(3), lseek(2),
       malloc(3), memcpy(3), memset(3), mmap(2), munmap(2),
       open(2), sigfillset(3), sigprocmask(2), stat(2),
       strcpy(3), strdup(3), strerror(3), strlen(3), unlink(2),
       and write(2).

       In  addition, the DbLockTab.open method may fail and throw
       a DbException(3) encapsulating an errno for the  following
       conditions:

       [EAGAIN]
            The  shared memory region was locked and (repeatedly)
            unavailable.

       [EINVAL]
            An invalid flag value or parameter was specified.

            The DB_THREAD flag was specified  and  spinlocks  are
            not implemented for this architecture.

       The   DbLockTab.get   method   may   fail   and   throw  a
       DbException(3) for any of the  errors  specified  for  the
       following DB and library functions: DbLock.detect(3),
       fcntl(2), fflush(3), lseek(2), memcpy(3), memset(3),
       mmap(2), munmap(2), strerror(3), and write(2).

       In addition, the DbLockTab.get method may fail and throw a
       DbException(3) encapsulating an errno  for  the  following
       conditions:

       [EINVAL]
            An invalid flag value or parameter was specified.

       The   DbLockTab.close   method   may   fail  and  throw  a
       DbException(3) for any of the  errors  specified  for  the
       following DB and library functions: close(2), fcntl(2),
       fflush(3), munmap(2), and strerror(3).

       The  DbLockTab.unlink  method  may  fail   and   throw   a
       DbException(3)  for  any  of  the errors specified for the
       following DB and library functions: close(2), fcntl(2),
       fflush(3), malloc(3), memcpy(3), memset(3), mmap(2),
       munmap(2), open(2), sigfillset(3), sigprocmask(2),
       stat(2), strcpy(3), strdup(3), strerror(3), strlen(3), and
       unlink(2).

       In addition, the  DbLockTab.unlink  method  may  fail  and
       throw  a  DbException(3)  encapsulating  an  errno for the
       following conditions:

       [EBUSY]
            The shared memory region was in  use  and  the  force
            flag was not set.

       The   DbLockTab.detect   method   may  fail  and  throw  a
       DbException(3) for any of the  errors  specified  for  the
       following DB and library functions: calloc(3), fcntl(2),
       fflush(3), lseek(2), malloc(3), memcpy(3), memset(3),
       mmap(2), munmap(2), strerror(3), and write(2).


BUGS

       If  a process dies while holding locks, those locks remain
       held and are never released.  In this case, all  processes
       should exit as quickly as possible, so that db_recover can
       be run.


SEE ALSO

       db_archive(1), db_checkpoint(1), db_deadlock(1), db_dump(1),
       db_load(1), db_recover(1), db_stat(1), db_intro(3),
       db_internal(3), db_thread(3), Db(3), Dbc(3), DbEnv(3),
       DbException(3), DbInfo(3), DbLock(3), DbLockTab(3), DbLog(3),
       DbLsn(3), DbMpool(3), DbMpoolFile(3), Dbt(3), DbTxn(3),
       DbTxnMgr(3)


Man(1) output converted with man2html