X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ian/git?a=blobdiff_plain;f=storage%2Fovdb%2Fovdb-private.h;fp=storage%2Fovdb%2Fovdb-private.h;h=0000000000000000000000000000000000000000;hb=b7a32e2d73e3ab1add8208d3e157f7269a31ef4d;hp=54be5388d4016d5c0aa348a2479ddccf6698090c;hpb=ac902a8299ff4469b356836f431ead31c3377377;p=inn-innduct.git diff --git a/storage/ovdb/ovdb-private.h b/storage/ovdb/ovdb-private.h deleted file mode 100644 index 54be538..0000000 --- a/storage/ovdb/ovdb-private.h +++ /dev/null @@ -1,233 +0,0 @@ -#ifdef USE_BERKELEY_DB - -#include - -#if DB_VERSION_MAJOR == 2 -#if DB_VERSION_MINOR < 6 -#error "Need BerkeleyDB 2.6.x, 2.7.x, 3.x or 4.x" -#endif -#else -#if DB_VERSION_MAJOR < 3 || DB_VERSION_MAJOR > 4 -#error "Need BerkeleyDB 2.6.x, 2.7.x, 3.x or 4.x" -#endif -#endif - -/* - * How data is stored: - * - * Each group is assigned an integer ID. The mapping between a group name - * and its ID is stored in the groupinfo DB. Overview data itself - * is stored in one or more btree DBs. The specific DB file that is used - * to store data for a certain group is chosen by taking the hash of the - * group name, copying the first bytes of the hash into an int, and then - * modding the int value to the number of DBs. - * - * Each group has one groupinfo structure in the groupinfo DB, whose key - * is the newsgroup name. The overview records for the group have a - * 'struct datakey' as their keys, which consists of the group ID (in - * native byteorder) followed by the article number in network byteorder. - * The reason for storing the article number in net byte order (big-endian) - * is that the keys will sort correctly using BerkeleyDB's default sort - * function (basically, a memcmp). - * - * The overview records consist of a 'struct ovdata' followed by the actual - * overview data. The struct ovdata contains the token and arrival time. - */ - -struct ovdb_conf { - char *home; /* path to directory where db files are stored */ - int txn_nosync; /* whether to pass DB_TXN_NOSYNC to db_appinit */ - int numdbfiles; - size_t cachesize; - size_t pagesize; - int minkey; - int maxlocks; - int nocompact; - int readserver; - int numrsprocs; - int maxrsconn; - int useshm; - int shmkey; -}; - -typedef u_int32_t group_id_t; - -struct groupinfo { - ARTNUM low; - ARTNUM high; - int count; - int flag; - time_t expired; /* when this group was last touched by expiregroup */ - group_id_t current_gid; /* group ID */ - group_id_t new_gid; /* pending ID (expireover) */ - int current_db; /* which DB file the records are in */ - int new_db; /* pending DB file */ - pid_t expiregrouppid; /* PID of expireover process */ - int status; -}; -#define GROUPINFO_DELETED 1 -#define GROUPINFO_EXPIRING (1<<1) -#define GROUPINFO_MOVING (1<<2) -#define GROUPINFO_MOVE_REQUESTED (1<<3) /*NYI*/ - -struct datakey { - group_id_t groupnum; /* must be the first member of this struct */ - u_int32_t artnum; -}; - -struct ovdata { - TOKEN token; - time_t arrived; - time_t expires; -}; - - -#define DATA_VERSION 2 - -extern struct ovdb_conf ovdb_conf; -extern DB_ENV *OVDBenv; - -#define OVDB_ERR_NONE 0 -#define OVDB_ERR_SYSLOG 1 /* default */ -#define OVDB_ERR_STDERR 2 -extern int ovdb_errmode; - -void read_ovdb_conf(void); -int ovdb_open_berkeleydb(int mode, int flags); -void ovdb_close_berkeleydb(void); -int ovdb_getgroupinfo(char *group, struct groupinfo *gi, int ignoredeleted, DB_TXN *tid, int getflags); - -#define OVDB_RECOVER 1 -#define OVDB_UPGRADE 2 - -#define OVDB_LOCK_NORMAL 0 -#define OVDB_LOCK_ADMIN 1 -#define OVDB_LOCK_EXCLUSIVE 2 - -bool ovdb_getlock(int mode); -bool ovdb_releaselock(void); -bool ovdb_check_pidfile(char *file); -bool ovdb_check_user(void); - -#define OVDB_LOCKFN "ovdb.sem" -#define OVDB_MONITOR_PIDFILE "ovdb_monitor.pid" -#define OVDB_SERVER_PIDFILE "ovdb_server.pid" -#define SPACES " " - -/* read server stuff */ -#define CMD_QUIT 0x01 -#define CMD_GROUPSTATS 0x02 -#define CMD_OPENSRCH 0x03 -#define CMD_SRCH 0x04 -#define CMD_CLOSESRCH 0x05 -#define CMD_ARTINFO 0x06 -#define CMD_MASK 0x0F -#define RPLY_OK 0x00 -#define RPLY_ERROR 0x10 -#define OVDB_SERVER (1<<4) -#define OVDB_SERVER_BANNER "ovdb read protocol 1" -#define OVDB_SERVER_PORT 32323 /* only used if don't have unix domain sockets */ -#define OVDB_SERVER_SOCKET "ovdb.server" - -struct rs_cmd { - uint32_t what; - uint32_t grouplen; - uint32_t artlo; - uint32_t arthi; - void * handle; -}; - -struct rs_groupstats { - uint32_t status; - int lo; - int hi; - int count; - int flag; - uint32_t aliaslen; - /* char alias */ -}; - -struct rs_opensrch { - uint32_t status; - void * handle; -}; - -struct rs_srch { - uint32_t status; - ARTNUM artnum; - TOKEN token; - time_t arrived; - int len; - /* char data */ -}; - -struct rs_artinfo { - uint32_t status; - TOKEN token; -}; - - -#if DB_VERSION_MAJOR == 2 -char *db_strerror(int err); - -#define TXN_START(label, tid) \ -label: { \ - int txn_ret; \ - txn_ret = txn_begin(OVDBenv->tx_info, NULL, &tid); \ - if (txn_ret != 0) { \ - syslog(L_ERROR, "OVDB: " #label " txn_begin: %s", db_strerror(ret)); \ - tid = NULL; \ - } \ -} - -#define TXN_RETRY(label, tid) \ -{ txn_abort(tid); goto label; } - -#define TXN_ABORT(label, tid) txn_abort(tid) -#define TXN_COMMIT(label, tid) txn_commit(tid) - -#define TRYAGAIN EAGAIN - -#elif DB_VERSION_MAJOR == 3 - -#define TXN_START(label, tid) \ -label: { \ - int txn_ret; \ - txn_ret = txn_begin(OVDBenv, NULL, &tid, 0); \ - if (txn_ret != 0) { \ - syslog(L_ERROR, "OVDB: " #label " txn_begin: %s", db_strerror(ret)); \ - tid = NULL; \ - } \ -} - -#define TXN_RETRY(label, tid) \ -{ txn_abort(tid); goto label; } - -#define TXN_ABORT(label, tid) txn_abort(tid) -#define TXN_COMMIT(label, tid) txn_commit(tid, 0) - -#define TRYAGAIN DB_LOCK_DEADLOCK - -#else /* DB_VERSION_MAJOR == 4 */ - -#define TXN_START(label, tid) \ -label: { \ - int txn_ret; \ - txn_ret = OVDBenv->txn_begin(OVDBenv, NULL, &tid, 0); \ - if (txn_ret != 0) { \ - syslog(L_ERROR, "OVDB: " #label " txn_begin: %s", db_strerror(ret)); \ - tid = NULL; \ - } \ -} - -#define TXN_RETRY(label, tid) \ -{ (tid)->abort(tid); goto label; } - -#define TXN_ABORT(label, tid) (tid)->abort(tid) -#define TXN_COMMIT(label, tid) (tid)->commit(tid, 0) - -#define TRYAGAIN DB_LOCK_DEADLOCK - -#endif /* DB_VERSION_MAJOR == 4 */ - -#endif /* USE_BERKELEY_DB */