]> git.sur5r.net Git - openldap/blobdiff - libraries/liblmdb/lmdb.h
Merge remote-tracking branch 'origin/mdb.RE/0.9'
[openldap] / libraries / liblmdb / lmdb.h
index 14a05462a3b09f63c41c58b2ecd7c5f2620cc348..d99cfe46609f16d266bb3c7fdbb8213cf9265e34 100644 (file)
  *       transactions.  Each transaction belongs to one thread.  See below.
  *       The #MDB_NOTLS flag changes this for read-only transactions.
  *
- *     - Use an MDB_env* in the process which opened it, without fork()ing.
+ *     - Use an MDB_env* in the process which opened it, not after fork().
  *
  *     - Do not have open an LMDB database twice in the same process at
  *       the same time.  Not even from a plain open() call - close()ing it
- *       breaks flock() advisory locking.
+ *       breaks fcntl() advisory locking.  (It is OK to reopen it after
+ *       fork() - exec*(), since the lockfile has FD_CLOEXEC set.)
  *
  *     - Avoid long-lived transactions.  Read transactions prevent
  *       reuse of pages freed by newer write transactions, thus the
  *
  *     @author Howard Chu, Symas Corporation.
  *
- *     @copyright Copyright 2011-2016 Howard Chu, Symas Corp. All rights reserved.
+ *     @copyright Copyright 2011-2018 Howard Chu, Symas Corp. All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted only as authorized by the OpenLDAP
@@ -199,7 +200,7 @@ typedef int mdb_filehandle_t;
 /** Library minor version */
 #define MDB_VERSION_MINOR      9
 /** Library patch version */
-#define MDB_VERSION_PATCH      18
+#define MDB_VERSION_PATCH      22
 
 /** Combine args a,b,c into a single integer for easy version comparisons */
 #define MDB_VERINT(a,b,c)      (((a) << 24) | ((b) << 16) | (c))
@@ -209,7 +210,7 @@ typedef int mdb_filehandle_t;
        MDB_VERINT(MDB_VERSION_MAJOR,MDB_VERSION_MINOR,MDB_VERSION_PATCH)
 
 /** The release date of this library version */
-#define MDB_VERSION_DATE       "February 5, 2016"
+#define MDB_VERSION_DATE       "March 21, 2018"
 
 /** A stringifier for the version info */
 #define MDB_VERSTR(a,b,c,d)    "LMDB " #a "." #b "." #c ": (" d ")"
@@ -388,7 +389,9 @@ typedef enum MDB_cursor_op {
        MDB_PREV_NODUP,                 /**< Position at last data item of previous key */
        MDB_SET,                                /**< Position at specified key */
        MDB_SET_KEY,                    /**< Position at specified key, return key + data */
-       MDB_SET_RANGE                   /**< Position at first key greater than or equal to specified key. */
+       MDB_SET_RANGE,                  /**< Position at first key greater than or equal to specified key. */
+       MDB_PREV_MULTIPLE               /**< Position at previous page and return key and up to
+                                                               a page of duplicate data items. Only for #MDB_DUPFIXED */
 } MDB_cursor_op;
 
 /** @defgroup  errors  Return Codes
@@ -573,7 +576,7 @@ int  mdb_env_create(MDB_env **env);
         *      <li>#MDB_NOTLS
         *              Don't use Thread-Local Storage. Tie reader locktable slots to
         *              #MDB_txn objects instead of to threads. I.e. #mdb_txn_reset() keeps
-        *              the slot reseved for the #MDB_txn object. A thread may use parallel
+        *              the slot reserved for the #MDB_txn object. A thread may use parallel
         *              read-only transactions. A read-only transaction may span threads if
         *              the user synchronizes its use. Applications that multiplex many
         *              user threads over individual OS threads need this option. Such an
@@ -677,6 +680,7 @@ int  mdb_env_copyfd(MDB_env *env, mdb_filehandle_t fd);
         *      <li>#MDB_CP_COMPACT - Perform compaction while copying: omit free
         *              pages and sequentially renumber all pages in output. This option
         *              consumes more CPU and runs more slowly than the default.
+        *              Currently it fails if the environment has suffered a page leak.
         * </ul>
         * @return A non-zero error value on failure and 0 on success.
         */
@@ -791,6 +795,10 @@ int  mdb_env_get_flags(MDB_env *env, unsigned int *flags);
 int  mdb_env_get_path(MDB_env *env, const char **path);
 
        /** @brief Return the filedescriptor for the given environment.
+        *
+        * This function may be called after fork(), so the descriptor can be
+        * closed before exec*().  Other LMDB file descriptors have FD_CLOEXEC.
+        * (Until LMDB 0.9.18, only the lockfile had that.)
         *
         * @param[in] env An environment handle returned by #mdb_env_create()
         * @param[out] fd Address of a mdb_filehandle_t to contain the descriptor.
@@ -1095,8 +1103,9 @@ int  mdb_txn_renew(MDB_txn *txn);
         *              This flag may only be used in combination with #MDB_DUPSORT. This option
         *              tells the library that the data items for this database are all the same
         *              size, which allows further optimizations in storage and retrieval. When
-        *              all data items are the same size, the #MDB_GET_MULTIPLE and #MDB_NEXT_MULTIPLE
-        *              cursor operations may be used to retrieve multiple items at once.
+        *              all data items are the same size, the #MDB_GET_MULTIPLE, #MDB_NEXT_MULTIPLE
+        *              and #MDB_PREV_MULTIPLE cursor operations may be used to retrieve multiple
+        *              items at once.
         *      <li>#MDB_INTEGERDUP
         *              This option specifies that duplicate data items are binary integers,
         *              similar to #MDB_INTEGERKEY keys.