Skip to content
GitLab
Menu
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
Menu
Open sidebar
openldap
OpenLDAP
Commits
d63e46d2
Commit
d63e46d2
authored
Aug 09, 2013
by
Quanah Gibson-Mount
Browse files
Merge remote-tracking branch 'origin/mdb.master' into OPENLDAP_REL_ENG_2_4
parents
c3c09133
1ac3c830
Changes
4
Expand all
Hide whitespace changes
Inline
Side-by-side
libraries/liblmdb/lmdb.h
View file @
d63e46d2
...
...
@@ -138,6 +138,7 @@
extern
"C"
{
#endif
/** Unix permissions for creating files, or dummy definition for Windows */
#ifdef _MSC_VER
typedef
int
mdb_mode_t
;
#else
...
...
@@ -386,7 +387,11 @@ typedef enum MDB_cursor_op {
#define MDB_INCOMPATIBLE (-30784)
/** Invalid reuse of reader locktable slot */
#define MDB_BAD_RSLOT (-30783)
#define MDB_LAST_ERRCODE MDB_BAD_RSLOT
/** Transaction cannot recover - it must be aborted */
#define MDB_BAD_TXN (-30782)
/** Too big key/data, key is empty, or wrong DUPFIXED size */
#define MDB_BAD_VALSIZE (-30781)
#define MDB_LAST_ERRCODE MDB_BAD_VALSIZE
/** @} */
/** @brief Statistics for a database in the environment */
...
...
@@ -534,6 +539,10 @@ int mdb_env_open(MDB_env *env, const char *path, unsigned int flags, mdb_mode_t
/** @brief Copy an MDB environment to the specified path.
*
* This function may be used to make a backup of an existing environment.
* No lockfile is created, since it gets recreated at need.
* @note This call can trigger significant file size growth if run in
* parallel with write transactions, because it employs a read-only
* transaction. See long-lived transactions under @ref caveats_sec.
* @param[in] env An environment handle returned by #mdb_env_create(). It
* must have already been opened successfully.
* @param[in] path The directory in which the copy will reside. This
...
...
@@ -546,6 +555,10 @@ int mdb_env_copy(MDB_env *env, const char *path);
/** @brief Copy an MDB environment to the specified file descriptor.
*
* This function may be used to make a backup of an existing environment.
* No lockfile is created, since it gets recreated at need.
* @note This call can trigger significant file size growth if run in
* parallel with write transactions, because it employs a read-only
* transaction. See long-lived transactions under @ref caveats_sec.
* @param[in] env An environment handle returned by #mdb_env_create(). It
* must have already been opened successfully.
* @param[in] fd The filedescriptor to write the copy to. It must
...
...
@@ -707,6 +720,13 @@ int mdb_env_get_maxreaders(MDB_env *env, unsigned int *readers);
*/
int
mdb_env_set_maxdbs
(
MDB_env
*
env
,
MDB_dbi
dbs
);
/** @brief Get the maximum size of a key for the environment.
*
* @param[in] env An environment handle returned by #mdb_env_create()
* @return The maximum size of a key. (#MDB_MAXKEYSIZE)
*/
int
mdb_env_get_maxkeysize
(
MDB_env
*
env
);
/** @brief Create a transaction for use with the environment.
*
* The transaction handle may be discarded using #mdb_txn_abort() or #mdb_txn_commit().
...
...
@@ -718,8 +738,8 @@ int mdb_env_set_maxdbs(MDB_env *env, MDB_dbi dbs);
* @param[in] parent If this parameter is non-NULL, the new transaction
* will be a nested transaction, with the transaction indicated by \b parent
* as its parent. Transactions may be nested to any level. A parent
* transaction may not issue any other operations
besides mdb_txn_begin,
* mdb_txn_
abort, or
mdb_txn_
commi
t while it has active child transactions.
* transaction
and its cursors
may not issue any other operations
than
* mdb_txn_
commit and
mdb_txn_
abor
t while it has active child transactions.
* @param[in] flags Special options for this transaction. This parameter
* must be set to 0 or by bitwise OR'ing together one or more of the
* values described here.
...
...
@@ -909,14 +929,12 @@ int mdb_dbi_flags(MDB_env *env, MDB_dbi dbi, unsigned int *flags);
*/
void
mdb_dbi_close
(
MDB_env
*
env
,
MDB_dbi
dbi
);
/** @brief
Delete a database and/or free all its pages
.
/** @brief
Empty or delete+close a database
.
*
* If the \b del parameter is 1, the DB handle will be closed
* and the DB will be deleted.
* @param[in] txn A transaction handle returned by #mdb_txn_begin()
* @param[in] dbi A database handle returned by #mdb_dbi_open()
* @param[in] del
1
to
delete
the DB
from the environment,
*
0 to just free its pages
.
* @param[in] del
0
to
empty
the DB
, 1 to delete it from the
*
environment and close the DB handle
.
* @return A non-zero error value on failure and 0 on success.
*/
int
mdb_drop
(
MDB_txn
*
txn
,
MDB_dbi
dbi
,
int
del
);
...
...
libraries/liblmdb/mdb.c
View file @
d63e46d2
This diff is collapsed.
Click to expand it.
libraries/liblmdb/mdb_copy.1
View file @
d63e46d2
...
...
@@ -11,6 +11,7 @@ The
.B mdb_copy
utility copies an LMDB environment. The environment can
be copied regardless of whether it is currently in use.
No lockfile is created, since it gets recreated at need.
If
.I dstpath
...
...
@@ -22,6 +23,10 @@ written to stdout.
Exit status is zero if no errors occur.
Errors result in a non-zero exit status and
a diagnostic message being written to standard error.
.SH CAVEATS
This utility can trigger significant file size growth if run
in parallel with write transactions, because pages which they
free during copying cannot be reused until the copy is done.
.SH "SEE ALSO"
.BR mdb_stat (1)
.SH AUTHOR
...
...
libraries/liblmdb/mdb_stat.c
View file @
d63e46d2
...
...
@@ -17,16 +17,22 @@
#include
<unistd.h>
#include
"lmdb.h"
#ifdef _WIN32
#define Z "I"
#else
#define Z "z"
#endif
static
void
prstat
(
MDB_stat
*
ms
)
{
#if 0
printf(" Page size: %u\n", ms->ms_psize);
#endif
printf
(
" Tree depth: %u
\n
"
,
ms
->
ms_depth
);
printf
(
" Branch pages: %
z
u
\n
"
,
ms
->
ms_branch_pages
);
printf
(
" Leaf pages: %
z
u
\n
"
,
ms
->
ms_leaf_pages
);
printf
(
" Overflow pages: %
z
u
\n
"
,
ms
->
ms_overflow_pages
);
printf
(
" Entries: %
z
u
\n
"
,
ms
->
ms_entries
);
printf
(
" Branch pages: %
"
Z
"
u
\n
"
,
ms
->
ms_branch_pages
);
printf
(
" Leaf pages: %
"
Z
"
u
\n
"
,
ms
->
ms_leaf_pages
);
printf
(
" Overflow pages: %
"
Z
"
u
\n
"
,
ms
->
ms_overflow_pages
);
printf
(
" Entries: %
"
Z
"
u
\n
"
,
ms
->
ms_entries
);
}
static
void
usage
(
char
*
prog
)
...
...
@@ -110,11 +116,11 @@ int main(int argc, char *argv[])
rc
=
mdb_env_info
(
env
,
&
mei
);
printf
(
"Environment Info
\n
"
);
printf
(
" Map address: %p
\n
"
,
mei
.
me_mapaddr
);
printf
(
" Map size: %
z
u
\n
"
,
mei
.
me_mapsize
);
printf
(
" Map size: %
"
Z
"
u
\n
"
,
mei
.
me_mapsize
);
printf
(
" Page size: %u
\n
"
,
mst
.
ms_psize
);
printf
(
" Max pages: %
z
u
\n
"
,
mei
.
me_mapsize
/
mst
.
ms_psize
);
printf
(
" Number of pages used: %
z
u
\n
"
,
mei
.
me_last_pgno
+
1
);
printf
(
" Last transaction ID: %
z
u
\n
"
,
mei
.
me_last_txnid
);
printf
(
" Max pages: %
"
Z
"
u
\n
"
,
mei
.
me_mapsize
/
mst
.
ms_psize
);
printf
(
" Number of pages used: %
"
Z
"
u
\n
"
,
mei
.
me_last_pgno
+
1
);
printf
(
" Last transaction ID: %
"
Z
"
u
\n
"
,
mei
.
me_last_txnid
);
printf
(
" Max readers: %u
\n
"
,
mei
.
me_maxreaders
);
printf
(
" Number of readers used: %u
\n
"
,
mei
.
me_numreaders
);
}
...
...
@@ -172,20 +178,20 @@ int main(int argc, char *argv[])
pg
+=
span
;
for
(;
i
>=
span
&&
iptr
[
i
-
span
]
==
pg
;
span
++
,
pg
++
)
;
}
printf
(
" Transaction %
z
u, %
z
d pages, maxspan %
z
d%s
\n
"
,
printf
(
" Transaction %
"
Z
"
u, %
"
Z
"
d pages, maxspan %
"
Z
"
d%s
\n
"
,
*
(
size_t
*
)
key
.
mv_data
,
j
,
span
,
bad
);
if
(
freinfo
>
2
)
{
for
(
--
j
;
j
>=
0
;
)
{
pg
=
iptr
[
j
];
for
(
span
=
1
;
--
j
>=
0
&&
iptr
[
j
]
==
pg
+
span
;
span
++
)
;
printf
(
span
>
1
?
" %9
zu[%z
d]
\n
"
:
" %9
z
u
\n
"
,
printf
(
span
>
1
?
" %9
"
Z
"u[%"
Z
"
d]
\n
"
:
" %9
"
Z
"
u
\n
"
,
pg
,
span
);
}
}
}
}
mdb_cursor_close
(
cursor
);
printf
(
" Free pages: %
z
u
\n
"
,
pages
);
printf
(
" Free pages: %
"
Z
"
u
\n
"
,
pages
);
}
rc
=
mdb_open
(
txn
,
subname
,
0
,
&
dbi
);
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment