summaryrefslogtreecommitdiffstats
path: root/subversion/libsvn_fs_base/bdb/env.h
diff options
context:
space:
mode:
Diffstat (limited to 'subversion/libsvn_fs_base/bdb/env.h')
-rw-r--r--subversion/libsvn_fs_base/bdb/env.h159
1 files changed, 159 insertions, 0 deletions
diff --git a/subversion/libsvn_fs_base/bdb/env.h b/subversion/libsvn_fs_base/bdb/env.h
new file mode 100644
index 0000000..a8cce4e
--- /dev/null
+++ b/subversion/libsvn_fs_base/bdb/env.h
@@ -0,0 +1,159 @@
+/* env.h : managing the BDB environment
+ *
+ * ====================================================================
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ * ====================================================================
+ */
+
+#ifndef SVN_LIBSVN_FS_BDB_ENV_H
+#define SVN_LIBSVN_FS_BDB_ENV_H
+
+#define SVN_WANT_BDB
+#include "svn_private_config.h"
+
+#include <apr_pools.h>
+#include <apr_file_io.h>
+
+#include "bdb_compat.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+
+/* The name of the Berkeley DB config file. */
+#define BDB_CONFIG_FILE "DB_CONFIG"
+
+/* Prefix string for BDB errors. */
+#define BDB_ERRPFX_STRING "svn (bdb): "
+
+
+/* Opaque descriptor of an open BDB environment. */
+typedef struct bdb_env_t bdb_env_t;
+
+
+/* Thread-specific error info related to the bdb_env_t. */
+typedef struct bdb_error_info_t
+{
+ /* We hold the extended info here until the Berkeley DB function returns.
+ It usually returns an error code, triggering the collection and
+ wrapping of the additional errors stored here.
+
+ Note: In some circumstances BDB will call the error function and not
+ go on to return an error code, so the caller must always check whether
+ pending_errors is non-NULL to avoid leaking errors. This behaviour
+ has been seen when running recovery on a repository upgraded to 4.3
+ that still has old 4.2 log files present, a typical error string is
+ "Skipping log file db/log.0000000002: historic log version 8" */
+ svn_error_t *pending_errors;
+
+ /* We permitted clients of our library to install a Berkeley BDB errcall.
+ Since we now use the errcall ourselves, we must store and invoke a user
+ errcall, to maintain our API guarantees. */
+ void (*user_callback)(const char *errpfx, char *msg);
+
+ /* The reference count. It counts the number of bdb_env_baton_t
+ instances that refer to this object. */
+ unsigned refcount;
+
+} bdb_error_info_t;
+
+
+/* The Berkeley DB environment baton. */
+typedef struct bdb_env_baton_t
+{
+ /* The Berkeley DB environment. This pointer must be identical to
+ the one in the bdb_env_t. */
+ DB_ENV *env;
+
+ /* The (opaque) cached environment descriptor. */
+ bdb_env_t *bdb;
+
+ /* The error info related to this baton. */
+ bdb_error_info_t *error_info;
+} bdb_env_baton_t;
+
+
+
+/* Flag combination for opening a shared BDB environment. */
+#define SVN_BDB_STANDARD_ENV_FLAGS (DB_CREATE \
+ | DB_INIT_LOCK \
+ | DB_INIT_LOG \
+ | DB_INIT_MPOOL \
+ | DB_INIT_TXN \
+ | SVN_BDB_AUTO_RECOVER)
+
+/* Flag combination for opening a private BDB environment. */
+#define SVN_BDB_PRIVATE_ENV_FLAGS (DB_CREATE \
+ | DB_INIT_LOG \
+ | DB_INIT_MPOOL \
+ | DB_INIT_TXN \
+ | DB_PRIVATE)
+
+
+/* Iniitalize the BDB back-end's private stuff. */
+svn_error_t *svn_fs_bdb__init(apr_pool_t* pool);
+
+
+/* Allocate the Berkeley DB descriptor BDB and open the environment.
+ *
+ * Allocate *BDBP from POOL and open (*BDBP)->env in PATH, using FLAGS
+ * and MODE. If applicable, set the BDB_AUTO_COMMIT flag for this
+ * environment.
+ *
+ * Use POOL for temporary allocation.
+ *
+ * Note: This function may return a bdb_env_baton_t object that refers
+ * to a previously opened environment. If FLAGS contains
+ * DB_PRIVATE and the environment is already open, the function
+ * will fail (this isn't a problem in practice, because a caller
+ * should obtain an exclusive lock on the repository before
+ * opening the environment).
+ */
+
+svn_error_t *svn_fs_bdb__open(bdb_env_baton_t **bdb_batonp,
+ const char *path,
+ u_int32_t flags, int mode,
+ apr_pool_t *pool);
+
+/* Close the Berkeley DB descriptor BDB.
+ *
+ * Note: This function might not actually close the environment if it
+ * has been opened more than once.
+ */
+svn_error_t *svn_fs_bdb__close(bdb_env_baton_t *bdb_baton);
+
+
+/* Get the panic state of the open BDB environment. */
+svn_boolean_t svn_fs_bdb__get_panic(bdb_env_baton_t *bdb_baton);
+
+/* Set the panic flag on the open BDB environment. */
+void svn_fs_bdb__set_panic(bdb_env_baton_t *bdb_baton);
+
+
+/* Remove the Berkeley DB environment at PATH.
+ *
+ * Use POOL for temporary allocation.
+ */
+svn_error_t *svn_fs_bdb__remove(const char *path, apr_pool_t *pool);
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif /* SVN_LIBSVN_FS_BDB_ENV_H */
OpenPOWER on IntegriCloud