mirror of
https://github.com/samba-team/samba.git
synced 2025-01-26 10:04:02 +03:00
dfb181ab73
This backend can be used untill ctdb knows about real transactions. It stores a master tdb in a shared location and a readonly copy on the local harddisk. Reads are always on the local tdb and writes always on both. Change notify messages are send to all message context, which ask for them. With the notifies it's possible to just update the changed records, instead of copying all records (which is the fallback). You need to configure: dbwrap:use_tdb2=yes dbwrap_tdb2:master directory=/some/shared/path dbwrap_tdb2:local directory=/var/lib/samba metze (This used to be commit aa6230de0d5f1875aa8c12c4fc017d3a40f90890)
98 lines
3.1 KiB
C
98 lines
3.1 KiB
C
/*
|
|
Unix SMB/CIFS implementation.
|
|
Database interface wrapper around tdb
|
|
Copyright (C) Volker Lendecke 2005-2007
|
|
|
|
This program is free software; you can redistribute it and/or modify
|
|
it under the terms of the GNU General Public License as published by
|
|
the Free Software Foundation; either version 3 of the License, or
|
|
(at your option) any later version.
|
|
|
|
This program is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
GNU General Public License for more details.
|
|
|
|
You should have received a copy of the GNU General Public License
|
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
*/
|
|
|
|
#ifndef __DBWRAP_H__
|
|
#define __DBWRAP_H__
|
|
|
|
struct db_record {
|
|
TDB_DATA key, value;
|
|
NTSTATUS (*store)(struct db_record *rec, TDB_DATA data, int flag);
|
|
NTSTATUS (*delete_rec)(struct db_record *rec);
|
|
void *private_data;
|
|
};
|
|
|
|
struct db_context {
|
|
struct db_record *(*fetch_locked)(struct db_context *db,
|
|
TALLOC_CTX *mem_ctx,
|
|
TDB_DATA key);
|
|
int (*fetch)(struct db_context *db, TALLOC_CTX *mem_ctx,
|
|
TDB_DATA key, TDB_DATA *data);
|
|
int (*traverse)(struct db_context *db,
|
|
int (*f)(struct db_record *rec,
|
|
void *private_data),
|
|
void *private_data);
|
|
int (*traverse_read)(struct db_context *db,
|
|
int (*f)(struct db_record *rec,
|
|
void *private_data),
|
|
void *private_data);
|
|
int (*get_seqnum)(struct db_context *db);
|
|
int (*transaction_start)(struct db_context *db);
|
|
int (*transaction_commit)(struct db_context *db);
|
|
int (*transaction_cancel)(struct db_context *db);
|
|
void *private_data;
|
|
bool persistent;
|
|
};
|
|
|
|
struct db_context *db_open(TALLOC_CTX *mem_ctx,
|
|
const char *name,
|
|
int hash_size, int tdb_flags,
|
|
int open_flags, mode_t mode);
|
|
|
|
struct db_context *db_open_trans(TALLOC_CTX *mem_ctx,
|
|
const char *name,
|
|
int hash_size, int tdb_flags,
|
|
int open_flags, mode_t mode);
|
|
|
|
struct db_context *db_open_rbt(TALLOC_CTX *mem_ctx);
|
|
|
|
struct db_context *db_open_tdb(TALLOC_CTX *mem_ctx,
|
|
const char *name,
|
|
int hash_size, int tdb_flags,
|
|
int open_flags, mode_t mode);
|
|
|
|
struct db_context *db_open_tdb2(TALLOC_CTX *mem_ctx,
|
|
const char *name,
|
|
int hash_size, int tdb_flags,
|
|
int open_flags, mode_t mode);
|
|
|
|
struct messaging_context;
|
|
void db_tdb2_setup_messaging(struct messaging_context *msg_ctx, bool server);
|
|
|
|
#ifdef CLUSTER_SUPPORT
|
|
struct db_context *db_open_ctdb(TALLOC_CTX *mem_ctx,
|
|
const char *name,
|
|
int hash_size, int tdb_flags,
|
|
int open_flags, mode_t mode);
|
|
#endif
|
|
|
|
struct db_context *db_open_file(TALLOC_CTX *mem_ctx,
|
|
struct messaging_context *msg_ctx,
|
|
const char *name,
|
|
int hash_size, int tdb_flags,
|
|
int open_flags, mode_t mode);
|
|
|
|
|
|
NTSTATUS dbwrap_delete_bystring(struct db_context *db, const char *key);
|
|
NTSTATUS dbwrap_store_bystring(struct db_context *db, const char *key,
|
|
TDB_DATA data, int flags);
|
|
TDB_DATA dbwrap_fetch_bystring(struct db_context *db, TALLOC_CTX *mem_ctx,
|
|
const char *key);
|
|
|
|
#endif /* __DBWRAP_H__ */
|