diff options
author | Ulrich Drepper <drepper@redhat.com> | 2000-01-02 06:01:06 +0000 |
---|---|---|
committer | Ulrich Drepper <drepper@redhat.com> | 2000-01-02 06:01:06 +0000 |
commit | 8d6f1731fcd082e4f744ba9cb4bde4be7c08f1b3 (patch) | |
tree | 099a250d7366aef2ab028fdb24f0d692cd784b4a /db2/progs | |
parent | 9a6450d578556c11e7c173d2f28362345b8f1258 (diff) | |
download | glibc-8d6f1731fcd082e4f744ba9cb4bde4be7c08f1b3.tar.gz glibc-8d6f1731fcd082e4f744ba9cb4bde4be7c08f1b3.tar.xz glibc-8d6f1731fcd082e4f744ba9cb4bde4be7c08f1b3.zip |
Update.
* Makeconfig (all-subdirs): Remove db and db2. * db/*: Removed. * db2/*: Removed.
Diffstat (limited to 'db2/progs')
-rw-r--r-- | db2/progs/db_archive/db_archive.c | 156 | ||||
-rw-r--r-- | db2/progs/db_checkpoint/db_checkpoint.c | 263 | ||||
-rw-r--r-- | db2/progs/db_deadlock/db_deadlock.c | 245 | ||||
-rw-r--r-- | db2/progs/db_dump/db_dump.c | 260 | ||||
-rw-r--r-- | db2/progs/db_dump185/db_dump185.c | 353 | ||||
-rw-r--r-- | db2/progs/db_load/db_load.c | 571 | ||||
-rw-r--r-- | db2/progs/db_printlog/README | 22 | ||||
-rw-r--r-- | db2/progs/db_printlog/commit.awk | 7 | ||||
-rw-r--r-- | db2/progs/db_printlog/count.awk | 9 | ||||
-rw-r--r-- | db2/progs/db_printlog/db_printlog.c | 192 | ||||
-rw-r--r-- | db2/progs/db_printlog/pgno.awk | 43 | ||||
-rw-r--r-- | db2/progs/db_printlog/range.awk | 27 | ||||
-rw-r--r-- | db2/progs/db_printlog/status.awk | 26 | ||||
-rw-r--r-- | db2/progs/db_printlog/txn.awk | 30 | ||||
-rw-r--r-- | db2/progs/db_recover/db_recover.c | 147 | ||||
-rw-r--r-- | db2/progs/db_stat/db_stat.c | 621 |
16 files changed, 0 insertions, 2972 deletions
diff --git a/db2/progs/db_archive/db_archive.c b/db2/progs/db_archive/db_archive.c deleted file mode 100644 index ca489954f6..0000000000 --- a/db2/progs/db_archive/db_archive.c +++ /dev/null @@ -1,156 +0,0 @@ -/*- - * See the file LICENSE for redistribution information. - * - * Copyright (c) 1996, 1997, 1998 - * Sleepycat Software. All rights reserved. - */ - -#include "config.h" - -#ifndef lint -static const char copyright[] = -"@(#) Copyright (c) 1996, 1997, 1998\n\ - Sleepycat Software Inc. All rights reserved.\n"; -static const char sccsid[] = "@(#)db_archive.c 10.20 (Sleepycat) 10/3/98"; -#endif - -#ifndef NO_SYSTEM_INCLUDES -#include <sys/types.h> - -#include <errno.h> -#include <signal.h> -#include <string.h> -#include <stdlib.h> -#include <stdio.h> -#include <unistd.h> -#endif - -#include "db_int.h" -#include "shqueue.h" -#include "log.h" -#include "db_dispatch.h" -#include "clib_ext.h" -#include "common_ext.h" - -DB_ENV *db_init __P((char *, int)); -int main __P((int, char *[])); -void nosig __P((void)); -void usage __P((void)); - -const char - *progname = "db_archive"; /* Program name. */ - -int -main(argc, argv) - int argc; - char *argv[]; -{ - extern char *optarg; - extern int optind; - DB_ENV *dbenv; - u_int32_t flags; - int ch, verbose; - char *home, **list; - - flags = verbose = 0; - home = NULL; - while ((ch = getopt(argc, argv, "ah:lsv")) != EOF) - switch (ch) { - case 'a': - flags |= DB_ARCH_ABS; - break; - case 'h': - home = optarg; - break; - case 'l': - flags |= DB_ARCH_LOG; - break; - case 's': - flags |= DB_ARCH_DATA; - break; - case 'v': - verbose = 1; - break; - case '?': - default: - usage(); - } - argc -= optind; - argv += optind; - - if (argc != 0) - usage(); - - /* - * Ignore signals -- we don't want to be interrupted because we're - * spending all of our time in the DB library. - */ - nosig(); - dbenv = db_init(home, verbose); - - /* Get the list of names. */ - if ((errno = log_archive(dbenv->lg_info, &list, flags, NULL)) != 0) { - warn(NULL); - (void)db_appexit(dbenv); - return (1); - } - - /* Print the names. */ - if (list != NULL) - for (; *list != NULL; ++list) - printf("%s\n", *list); - - if ((errno = db_appexit(dbenv)) != 0) { - warn(NULL); - return (1); - } - - return (0); -} - -/* - * db_init -- - * Initialize the environment. - */ -DB_ENV * -db_init(home, verbose) - char *home; - int verbose; -{ - DB_ENV *dbenv; - - if ((dbenv = (DB_ENV *)calloc(sizeof(DB_ENV), 1)) == NULL) { - errno = ENOMEM; - err(1, NULL); - } - dbenv->db_errfile = stderr; - dbenv->db_errpfx = progname; - dbenv->db_verbose = verbose; - - if ((errno = db_appinit(home, NULL, dbenv, - DB_CREATE | DB_INIT_LOG | DB_INIT_TXN | DB_USE_ENVIRON)) != 0) - err(1, "db_appinit"); - - return (dbenv); -} - -/* - * nosig -- - * We don't want to be interrupted. - */ -void -nosig() -{ -#ifdef SIGHUP - (void)signal(SIGHUP, SIG_IGN); -#endif - (void)signal(SIGINT, SIG_IGN); - (void)signal(SIGTERM, SIG_IGN); -} - -void -usage() -{ - (void)fprintf(stderr, "usage: db_archive [-alsv] [-h home]\n"); - exit(1); -} diff --git a/db2/progs/db_checkpoint/db_checkpoint.c b/db2/progs/db_checkpoint/db_checkpoint.c deleted file mode 100644 index f0fe48ab2e..0000000000 --- a/db2/progs/db_checkpoint/db_checkpoint.c +++ /dev/null @@ -1,263 +0,0 @@ -/*- - * See the file LICENSE for redistribution information. - * - * Copyright (c) 1996, 1997, 1998 - * Sleepycat Software. All rights reserved. - */ - -#include "config.h" - -#ifndef lint -static const char copyright[] = -"@(#) Copyright (c) 1996, 1997, 1998\n\ - Sleepycat Software Inc. All rights reserved.\n"; -static const char sccsid[] = "@(#)db_checkpoint.c 10.21 (Sleepycat) 10/4/98"; -#endif - -#ifndef NO_SYSTEM_INCLUDES -#include <sys/types.h> - -#include <errno.h> -#include <limits.h> -#include <signal.h> -#include <stdio.h> -#include <stdlib.h> -#include <string.h> -#include <time.h> -#include <unistd.h> -#endif - -#include "db_int.h" -#include "shqueue.h" -#include "db_page.h" -#include "log.h" -#include "btree.h" -#include "hash.h" -#include "clib_ext.h" -#include "common_ext.h" - -char *check __P((DB_ENV *, long, long)); -DB_ENV *db_init __P((char *)); -int logpid __P((char *, int)); -int main __P((int, char *[])); -void onint __P((int)); -void siginit __P((void)); -void usage __P((void)); - -int interrupted; -const char - *progname = "db_checkpoint"; /* Program name. */ - -int -main(argc, argv) - int argc; - char *argv[]; -{ - extern char *optarg; - extern int optind; - DB_ENV *dbenv; - time_t now; - long argval; - u_int32_t kbytes, minutes, seconds; - int ch, once, ret, verbose; - char *home, *logfile; - - /* - * XXX - * Don't allow a fully unsigned 32-bit number, some compilers get - * upset and require it to be specified in hexadecimal and so on. - */ -#define MAX_UINT32_T 2147483647 - - kbytes = minutes = 0; - once = ret = verbose = 0; - home = logfile = NULL; - while ((ch = getopt(argc, argv, "1h:k:L:p:v")) != EOF) - switch (ch) { - case '1': - once = 1; - break; - case 'h': - home = optarg; - break; - case 'k': - get_long(optarg, 1, (long)MAX_UINT32_T, &argval); - kbytes = argval; - break; - case 'L': - logfile = optarg; - break; - case 'p': - get_long(optarg, 1, (long)MAX_UINT32_T, &argval); - minutes = argval; - break; - case 'v': - verbose = 1; - break; - case '?': - default: - usage(); - } - argc -= optind; - argv += optind; - - if (argc != 0) - usage(); - - if (once == 0 && kbytes == 0 && minutes == 0) { - warnx("at least one of -1, -k and -p must be specified"); - usage(); - } - - /* Initialize the environment. */ - siginit(); - dbenv = db_init(home); - - if (logfile != NULL && logpid(logfile, 1)) { - (void)db_appexit(dbenv); - return (1); - } - - /* - * If we have only a time delay, then we'll sleep the right amount - * to wake up when a checkpoint is necessary. If we have a "kbytes" - * field set, then we'll check every 30 seconds. - */ - seconds = kbytes != 0 ? 30 : minutes * 60; - while (!interrupted) { - if (verbose) { - (void)time(&now); - warnx("checkpoint: %s", ctime(&now)); - } - - errno = txn_checkpoint(dbenv->tx_info, kbytes, minutes); - while (errno == DB_INCOMPLETE) { - if (verbose) - warnx("checkpoint did not finish, retrying\n"); - (void)sleep(2); - errno = txn_checkpoint(dbenv->tx_info, 0, 0); - } - - if (errno != 0) { - ret = 1; - warn(NULL); - break; - } - - if (once) - break; - - (void)sleep(seconds); - } - - if (logfile != NULL && logpid(logfile, 0)) - ret = 1; - - if ((errno = db_appexit(dbenv)) != 0) { - ret = 1; - warn(NULL); - } - - if (interrupted) { - (void)signal(interrupted, SIG_DFL); - (void)raise(interrupted); - /* NOTREACHED */ - } - - return (ret); -} - -/* - * db_init -- - * Initialize the environment. - */ -DB_ENV * -db_init(home) - char *home; -{ - DB_ENV *dbenv; - - if ((dbenv = (DB_ENV *)calloc(sizeof(DB_ENV), 1)) == NULL) { - errno = ENOMEM; - err(1, NULL); - } - dbenv->db_errfile = stderr; - dbenv->db_errpfx = progname; - - if ((errno = db_appinit(home, NULL, dbenv, - DB_INIT_LOG | DB_INIT_TXN | DB_INIT_MPOOL | DB_USE_ENVIRON)) != 0) - err(1, "db_appinit"); - - if (memp_register(dbenv->mp_info, - DB_FTYPE_BTREE, __bam_pgin, __bam_pgout) || - memp_register(dbenv->mp_info, - DB_FTYPE_HASH, __ham_pgin, __ham_pgout)) { - (void)db_appexit(dbenv); - errx(1, - "db_appinit: failed to register access method functions"); - } - - return (dbenv); -} - -/* - * logpid -- - * Log that we're running. - */ -int -logpid(fname, is_open) - char *fname; - int is_open; -{ - FILE *fp; - time_t now; - - if (is_open) { - if ((fp = fopen(fname, "w")) == NULL) { - warn("%s", fname); - return (1); - } - (void)time(&now); - fprintf(fp, - "%.24s: %lu %s", progname, (u_long)getpid(), ctime(&now)); - fclose(fp); - } else - (void)remove(fname); - return (0); -} - -/* - * siginit -- - * Initialize the set of signals for which we want to clean up. - * Generally, we try not to leave the shared regions locked if - * we can. - */ -void -siginit() -{ -#ifdef SIGHUP - (void)signal(SIGHUP, onint); -#endif - (void)signal(SIGINT, onint); - (void)signal(SIGTERM, onint); -} - -/* - * onint -- - * Interrupt signal handler. - */ -void -onint(signo) - int signo; -{ - if ((interrupted = signo) == 0) - interrupted = SIGINT; -} - -void -usage() -{ - (void)fprintf(stderr, - "usage: db_checkpoint [-1v] [-h home] [-k kbytes] [-L file] [-p min]\n"); - exit(1); -} diff --git a/db2/progs/db_deadlock/db_deadlock.c b/db2/progs/db_deadlock/db_deadlock.c deleted file mode 100644 index bc5039e95f..0000000000 --- a/db2/progs/db_deadlock/db_deadlock.c +++ /dev/null @@ -1,245 +0,0 @@ -/*- - * See the file LICENSE for redistribution information. - * - * Copyright (c) 1996, 1997, 1998 - * Sleepycat Software. All rights reserved. - */ - -#include "config.h" - -#ifndef lint -static const char copyright[] = -"@(#) Copyright (c) 1996, 1997, 1998\n\ - Sleepycat Software Inc. All rights reserved.\n"; -static const char sccsid[] = "@(#)db_deadlock.c 10.23 (Sleepycat) 10/4/98"; -#endif - -#ifndef NO_SYSTEM_INCLUDES -#include <sys/types.h> - -#include <errno.h> -#include <limits.h> -#include <signal.h> -#include <stdio.h> -#include <stdlib.h> -#include <time.h> -#include <unistd.h> -#endif - -#include "db_int.h" -#include "clib_ext.h" -#include "common_ext.h" - -#define BAD_KILLID 0xffffffff - -DB_ENV *db_init __P((char *, int)); -int logpid __P((char *, int)); -int main __P((int, char *[])); -void onint __P((int)); -void siginit __P((void)); -void usage __P((void)); - -int interrupted; -const char - *progname = "db_deadlock"; /* Program name. */ - -int -main(argc, argv) - int argc; - char *argv[]; -{ - extern char *optarg; - extern int optind; - DB_ENV *dbenv; - u_int32_t atype; - time_t now; - long usecs; - u_int32_t flags; - int ch, ret, verbose; - char *home, *logfile; - - atype = DB_LOCK_DEFAULT; - home = logfile = NULL; - usecs = 0; - flags = 0; - ret = verbose = 0; - while ((ch = getopt(argc, argv, "a:h:L:t:vw")) != EOF) - switch (ch) { - case 'a': - switch (optarg[0]) { - case 'o': - atype = DB_LOCK_OLDEST; - break; - case 'y': - atype = DB_LOCK_YOUNGEST; - break; - default: - usage(); - /* NOTREACHED */ - } - if (optarg[1] != '\0') - usage(); - break; - case 'h': - home = optarg; - break; - case 'L': - logfile = optarg; - break; - case 't': - get_long(optarg, 1, LONG_MAX, &usecs); - usecs *= 1000000; - break; - case 'v': - verbose = 1; - break; - case 'w': - LF_SET(DB_LOCK_CONFLICT); - break; - case '?': - default: - usage(); - } - argc -= optind; - argv += optind; - - if (argc != 0) - usage(); - - if (usecs == 0 && !LF_ISSET(DB_LOCK_CONFLICT)) { - warnx("at least one of -t and -w must be specified"); - usage(); - } - - /* - * We detect every 100ms (100000 us) when we're running in - * DB_LOCK_CONFLICT mode. - */ - if (usecs == 0) - usecs = 100000; - - /* Initialize the deadlock detector by opening the lock manager. */ - siginit(); - dbenv = db_init(home, verbose); - - if (logfile != NULL && logpid(logfile, 1)) { - (void)db_appexit(dbenv); - return (1); - } - - while (!interrupted) { - if (dbenv->db_verbose != 0) { - time(&now); - warnx("Running at %.24s", ctime(&now)); - } - - if ((errno = lock_detect(dbenv->lk_info, flags, atype)) != 0) { - ret = 1; - warnx(NULL); - break; - } - - /* Make a pass every "usecs" usecs. */ - (void)usleep(usecs); - } - - if (logfile != NULL && logpid(logfile, 0)) - ret = 1; - - if ((errno = db_appexit(dbenv)) != 0) { - ret = 1; - warn(NULL); - } - - if (interrupted) { - (void)signal(interrupted, SIG_DFL); - (void)raise(interrupted); - /* NOTREACHED */ - } - - return (ret); -} - -DB_ENV * -db_init(home, verbose) - char *home; - int verbose; -{ - DB_ENV *dbenv; - - if ((dbenv = (DB_ENV *)calloc(sizeof(DB_ENV), 1)) == NULL) { - errno = ENOMEM; - err(1, NULL); - } - dbenv->db_errfile = stderr; - dbenv->db_errpfx = progname; - dbenv->db_verbose = verbose; - - if ((errno = db_appinit(home, - NULL, dbenv, DB_INIT_LOCK | DB_USE_ENVIRON)) != 0) - err(1, "db_appinit"); - - return (dbenv); -} - -/* - * logpid -- - * Log that we're running. - */ -int -logpid(fname, is_open) - char *fname; - int is_open; -{ - FILE *fp; - time_t now; - - if (is_open) { - if ((fp = fopen(fname, "w")) == NULL) { - warn("%s", fname); - return (1); - } - (void)time(&now); - fprintf(fp, - "%.24s: %lu %s", progname, (u_long)getpid(), ctime(&now)); - fclose(fp); - } else - (void)remove(fname); - return (0); -} - -/* - * siginit -- - * Initialize the set of signals for which we want to clean up. - * Generally, we try not to leave the shared regions locked if - * we can. - */ -void -siginit() -{ -#ifdef SIGHUP - (void)signal(SIGHUP, onint); -#endif - (void)signal(SIGINT, onint); - (void)signal(SIGTERM, onint); -} - -/* - * onint -- - * Interrupt signal handler. - */ -void -onint(signo) - int signo; -{ - if ((interrupted = signo) == 0) - interrupted = SIGINT; -} - -void -usage() -{ - (void)fprintf(stderr, - "usage: db_deadlock [-vw] [-a m | o | y] [-h home] [-L file] [-t sec]\n"); - exit(1); -} diff --git a/db2/progs/db_dump/db_dump.c b/db2/progs/db_dump/db_dump.c deleted file mode 100644 index 0f34ddc789..0000000000 --- a/db2/progs/db_dump/db_dump.c +++ /dev/null @@ -1,260 +0,0 @@ -/*- - * See the file LICENSE for redistribution information. - * - * Copyright (c) 1996, 1997, 1998 - * Sleepycat Software. All rights reserved. - */ - -#include "config.h" - -#ifndef lint -static const char copyright[] = -"@(#) Copyright (c) 1996, 1997, 1998\n\ - Sleepycat Software Inc. All rights reserved.\n"; -static const char sccsid[] = "@(#)db_dump.c 10.24 (Sleepycat) 11/22/98"; -#endif - -#ifndef NO_SYSTEM_INCLUDES -#include <sys/types.h> - -#include <ctype.h> -#include <errno.h> -#include <stdlib.h> -#include <stdio.h> -#include <string.h> -#include <unistd.h> -#endif - -#undef stat - -#include "db_int.h" -#include "db_page.h" -#include "btree.h" -#include "hash.h" -#include "clib_ext.h" - -void configure __P((char *)); -DB_ENV *db_init __P((char *)); -int main __P((int, char *[])); -void pheader __P((DB *, int)); -void usage __P((void)); - -const char - *progname = "db_dump"; /* Program name. */ - -int -main(argc, argv) - int argc; - char *argv[]; -{ - extern char *optarg; - extern int optind; - DB *dbp; - DBC *dbcp; - DBT key, data; - DB_ENV *dbenv; - int ch, checkprint, dflag; - char *home; - - home = NULL; - checkprint = dflag = 0; - while ((ch = getopt(argc, argv, "df:h:Np")) != EOF) - switch (ch) { - case 'd': - dflag = 1; - break; - case 'f': - if (freopen(optarg, "w", stdout) == NULL) - err(1, "%s", optarg); - break; - case 'h': - home = optarg; - break; - case 'N': - (void)db_value_set(0, DB_MUTEXLOCKS); - break; - case 'p': - checkprint = 1; - break; - case '?': - default: - usage(); - } - argc -= optind; - argv += optind; - - if (argc != 1) - usage(); - - if (dflag && checkprint) - errx(1, "the -d and -p options may not both be specified"); - - /* Initialize the environment. */ - dbenv = db_init(home); - - /* Open the DB file. */ - if ((errno = - db_open(argv[0], DB_UNKNOWN, DB_RDONLY, 0, dbenv, NULL, &dbp)) != 0) - err(1, "%s", argv[0]); - - /* DB dump. */ - if (dflag) { - (void)__db_dump(dbp, NULL, 1); - if ((errno = dbp->close(dbp, 0)) != 0) - err(1, "close"); - exit (0); - } - - /* Get a cursor and step through the database. */ - if ((errno = dbp->cursor(dbp, NULL, &dbcp, 0)) != 0) { - (void)dbp->close(dbp, 0); - err(1, "cursor"); - } - - /* Print out the header. */ - pheader(dbp, checkprint); - - /* Print out the key/data pairs. */ - memset(&key, 0, sizeof(key)); - memset(&data, 0, sizeof(data)); - while ((errno = dbcp->c_get(dbcp, &key, &data, DB_NEXT)) == 0) { - if (dbp->type != DB_RECNO && - (errno = __db_prdbt(&key, checkprint, stdout)) != 0) - break; - if ((errno = __db_prdbt(&data, checkprint, stdout)) != 0) - break; - } - - if (errno != DB_NOTFOUND) - err(1, "cursor get"); - - if ((errno = dbp->close(dbp, 0)) != 0) - err(1, "close"); - return (0); -} - -/* - * db_init -- - * Initialize the environment. - */ -DB_ENV * -db_init(home) - char *home; -{ - DB_ENV *dbenv; - - if ((dbenv = (DB_ENV *)calloc(1, sizeof(DB_ENV))) == NULL) { - errno = ENOMEM; - err(1, NULL); - } - - /* - * Try and use the shared mpool region so that we get pages that - * haven't been flushed to disk (mostly useful for debugging). - * If that fails, try again, without the DB_INIT_MPOOL flag. - * - * If it works, set the error output options so that future errors - * are correctly reported. - */ - if ((errno = db_appinit(home, - NULL, dbenv, DB_USE_ENVIRON | DB_INIT_MPOOL)) == 0) { - dbenv->db_errfile = stderr; - dbenv->db_errpfx = progname; - return (dbenv); - } - - /* Set the error output options -- this time we want a message. */ - memset(dbenv, 0, sizeof(*dbenv)); - dbenv->db_errfile = stderr; - dbenv->db_errpfx = progname; - - /* Try again, and it's fatal if we fail. */ - if ((errno = db_appinit(home, NULL, dbenv, DB_USE_ENVIRON)) != 0) - err(1, "db_appinit"); - - return (dbenv); -} - -/* - * pheader -- - * Write out the header information. - */ -void -pheader(dbp, pflag) - DB *dbp; - int pflag; -{ - DBC *dbc; - DB_BTREE_STAT *btsp; - HASH_CURSOR *hcp; - int ret; - - printf("format=%s\n", pflag ? "print" : "bytevalue"); - switch (dbp->type) { - case DB_BTREE: - printf("type=btree\n"); - if ((errno = dbp->stat(dbp, &btsp, NULL, 0)) != 0) - err(1, "dbp->stat"); - if (F_ISSET(dbp, DB_BT_RECNUM)) - printf("recnum=1\n"); - if (btsp->bt_maxkey != 0) - printf("bt_maxkey=%lu\n", (u_long)btsp->bt_maxkey); - if (btsp->bt_minkey != 0) - printf("bt_minkey=%lu\n", (u_long)btsp->bt_minkey); - break; - case DB_HASH: - printf("type=hash\n"); - if ((ret = dbp->cursor(dbp, NULL, &dbc, 0)) != 0) - break; - hcp = (HASH_CURSOR *)dbc->internal; - GET_META(dbp, hcp, ret); - if (ret == 0) { - if (hcp->hdr->ffactor != 0) - printf("h_ffactor=%lu\n", - (u_long)hcp->hdr->ffactor); - if (hcp->hdr->nelem != 0) - printf("h_nelem=%lu\n", - (u_long)hcp->hdr->nelem); - RELEASE_META(dbp, hcp); - } - (void)dbc->c_close(dbc); - break; - case DB_RECNO: - printf("type=recno\n"); - if ((errno = dbp->stat(dbp, &btsp, NULL, 0)) != 0) - err(1, "dbp->stat"); - if (F_ISSET(dbp, DB_RE_RENUMBER)) - printf("renumber=1\n"); - if (F_ISSET(dbp, DB_RE_FIXEDLEN)) - printf("re_len=%lu\n", (u_long)btsp->bt_re_len); - if (F_ISSET(dbp, DB_RE_PAD)) - printf("re_pad=%#x\n", btsp->bt_re_pad); - break; - case DB_UNKNOWN: - abort(); - /* NOTREACHED */ - } - - if (F_ISSET(dbp, DB_AM_DUP)) - printf("duplicates=1\n"); - - if (dbp->dbenv->db_lorder != 0) - printf("db_lorder=%lu\n", (u_long)dbp->dbenv->db_lorder); - - if (!F_ISSET(dbp, DB_AM_PGDEF)) - printf("db_pagesize=%lu\n", (u_long)dbp->pgsize); - - printf("HEADER=END\n"); -} - -/* - * usage -- - * Display the usage message. - */ -void -usage() -{ - (void)fprintf(stderr, - "usage: db_dump [-dNp] [-f file] [-h home] db_file\n"); - exit(1); -} diff --git a/db2/progs/db_dump185/db_dump185.c b/db2/progs/db_dump185/db_dump185.c deleted file mode 100644 index 17451100f9..0000000000 --- a/db2/progs/db_dump185/db_dump185.c +++ /dev/null @@ -1,353 +0,0 @@ -/*- - * See the file LICENSE for redistribution information. - * - * Copyright (c) 1996, 1997, 1998 - * Sleepycat Software. All rights reserved. - */ - -#include "config.h" - -#ifndef lint -static const char copyright[] = -"@(#) Copyright (c) 1996, 1997, 1998\n\ - Sleepycat Software Inc. All rights reserved.\n"; -static const char sccsid[] = "@(#)db_dump185.c 10.10 (Sleepycat) 4/10/98"; -#endif - -#ifndef NO_SYSTEM_INCLUDES -#include <sys/types.h> - -#include <ctype.h> -#include <errno.h> -#include <fcntl.h> -#include <stdlib.h> -#include <stdio.h> -#include <string.h> -#include <unistd.h> -#endif - -#include "db_185.h" -#include "clib_ext.h" - -/* Hash Table Information */ -typedef struct hashhdr185 { /* Disk resident portion */ - int magic; /* Magic NO for hash tables */ - int version; /* Version ID */ - u_int32_t lorder; /* Byte Order */ - int bsize; /* Bucket/Page Size */ - int bshift; /* Bucket shift */ - int dsize; /* Directory Size */ - int ssize; /* Segment Size */ - int sshift; /* Segment shift */ - int ovfl_point; /* Where overflow pages are being - * allocated */ - int last_freed; /* Last overflow page freed */ - int max_bucket; /* ID of Maximum bucket in use */ - int high_mask; /* Mask to modulo into entire table */ - int low_mask; /* Mask to modulo into lower half of - * table */ - int ffactor; /* Fill factor */ - int nkeys; /* Number of keys in hash table */ -} HASHHDR185; -typedef struct htab185 { /* Memory resident data structure */ - HASHHDR185 hdr; /* Header */ -} HTAB185; - -/* Hash Table Information */ -typedef struct hashhdr186 { /* Disk resident portion */ - int32_t magic; /* Magic NO for hash tables */ - int32_t version; /* Version ID */ - int32_t lorder; /* Byte Order */ - int32_t bsize; /* Bucket/Page Size */ - int32_t bshift; /* Bucket shift */ - int32_t ovfl_point; /* Where overflow pages are being allocated */ - int32_t last_freed; /* Last overflow page freed */ - int32_t max_bucket; /* ID of Maximum bucket in use */ - int32_t high_mask; /* Mask to modulo into entire table */ - int32_t low_mask; /* Mask to modulo into lower half of table */ - int32_t ffactor; /* Fill factor */ - int32_t nkeys; /* Number of keys in hash table */ - int32_t hdrpages; /* Size of table header */ - int32_t h_charkey; /* value of hash(CHARKEY) */ -#define NCACHED 32 /* number of bit maps and spare points */ - int32_t spares[NCACHED];/* spare pages for overflow */ - u_int16_t bitmaps[NCACHED]; /* address of overflow page bitmaps */ -} HASHHDR186; -typedef struct htab186 { /* Memory resident data structure */ - HASHHDR186 hdr; /* Header */ -} HTAB186; - -typedef struct _epgno { - u_int32_t pgno; /* the page number */ - u_int16_t index; /* the index on the page */ -} EPGNO; - -typedef struct _epg { - void *page; /* the (pinned) page */ - u_int16_t index; /* the index on the page */ -} EPG; - -typedef struct _cursor { - EPGNO pg; /* B: Saved tree reference. */ - DBT key; /* B: Saved key, or key.data == NULL. */ - u_int32_t rcursor; /* R: recno cursor (1-based) */ - -#define CURS_ACQUIRE 0x01 /* B: Cursor needs to be reacquired. */ -#define CURS_AFTER 0x02 /* B: Unreturned cursor after key. */ -#define CURS_BEFORE 0x04 /* B: Unreturned cursor before key. */ -#define CURS_INIT 0x08 /* RB: Cursor initialized. */ - u_int8_t flags; -} CURSOR; - -/* The in-memory btree/recno data structure. */ -typedef struct _btree { - void *bt_mp; /* memory pool cookie */ - - void *bt_dbp; /* pointer to enclosing DB */ - - EPG bt_cur; /* current (pinned) page */ - void *bt_pinned; /* page pinned across calls */ - - CURSOR bt_cursor; /* cursor */ - - EPGNO bt_stack[50]; /* stack of parent pages */ - EPGNO *bt_sp; /* current stack pointer */ - - DBT bt_rkey; /* returned key */ - DBT bt_rdata; /* returned data */ - - int bt_fd; /* tree file descriptor */ - - u_int32_t bt_free; /* next free page */ - u_int32_t bt_psize; /* page size */ - u_int16_t bt_ovflsize; /* cut-off for key/data overflow */ - int bt_lorder; /* byte order */ - /* sorted order */ - enum { NOT, BACK, FORWARD } bt_order; - EPGNO bt_last; /* last insert */ - - /* B: key comparison function */ - int (*bt_cmp) __P((const DBT *, const DBT *)); - /* B: prefix comparison function */ - size_t (*bt_pfx) __P((const DBT *, const DBT *)); - /* R: recno input function */ - int (*bt_irec) __P((struct _btree *, u_int32_t)); - - FILE *bt_rfp; /* R: record FILE pointer */ - int bt_rfd; /* R: record file descriptor */ - - void *bt_cmap; /* R: current point in mapped space */ - void *bt_smap; /* R: start of mapped space */ - void *bt_emap; /* R: end of mapped space */ - size_t bt_msize; /* R: size of mapped region. */ - - u_int32_t bt_nrecs; /* R: number of records */ - size_t bt_reclen; /* R: fixed record length */ - u_char bt_bval; /* R: delimiting byte/pad character */ - -/* - * NB: - * B_NODUPS and R_RECNO are stored on disk, and may not be changed. - */ -#define B_INMEM 0x00001 /* in-memory tree */ -#define B_METADIRTY 0x00002 /* need to write metadata */ -#define B_MODIFIED 0x00004 /* tree modified */ -#define B_NEEDSWAP 0x00008 /* if byte order requires swapping */ -#define B_RDONLY 0x00010 /* read-only tree */ - -#define B_NODUPS 0x00020 /* no duplicate keys permitted */ -#define R_RECNO 0x00080 /* record oriented tree */ - -#define R_CLOSEFP 0x00040 /* opened a file pointer */ -#define R_EOF 0x00100 /* end of input file reached. */ -#define R_FIXLEN 0x00200 /* fixed length records */ -#define R_MEMMAPPED 0x00400 /* memory mapped file. */ -#define R_INMEM 0x00800 /* in-memory file */ -#define R_MODIFIED 0x01000 /* modified file */ -#define R_RDONLY 0x02000 /* read-only file */ - -#define B_DB_LOCK 0x04000 /* DB_LOCK specified. */ -#define B_DB_SHMEM 0x08000 /* DB_SHMEM specified. */ -#define B_DB_TXN 0x10000 /* DB_TXN specified. */ - u_int32_t flags; -} BTREE; - -void db_btree __P((DB *, int)); -void db_hash __P((DB *, int)); -void dbt_dump __P((DBT *)); -void dbt_print __P((DBT *)); -int main __P((int, char *[])); -void usage __P((void)); - -const char - *progname = "db_dump185"; /* Program name. */ - -int -main(argc, argv) - int argc; - char *argv[]; -{ - extern char *optarg; - extern int optind; - DB *dbp; - DBT key, data; - int ch, pflag, rval; - - pflag = 0; - while ((ch = getopt(argc, argv, "f:p")) != EOF) - switch (ch) { - case 'f': - if (freopen(optarg, "w", stdout) == NULL) - err(1, "%s", optarg); - break; - case 'p': - pflag = 1; - break; - case '?': - default: - usage(); - } - argc -= optind; - argv += optind; - - if (argc != 1) - usage(); - - if ((dbp = dbopen(argv[0], O_RDONLY, 0, DB_BTREE, NULL)) == NULL) { - if ((dbp = dbopen(argv[0], O_RDONLY, 0, DB_HASH, NULL)) == NULL) - err(1, "%s", argv[0]); - db_hash(dbp, pflag); - } else - db_btree(dbp, pflag); - - /* - * !!! - * DB 1.85 DBTs are a subset of DB 2.0 DBTs, so we just use the - * new dump/print routines. - */ - if (pflag) - while (!(rval = dbp->seq(dbp, &key, &data, R_NEXT))) { - dbt_print(&key); - dbt_print(&data); - } - else - while (!(rval = dbp->seq(dbp, &key, &data, R_NEXT))) { - dbt_dump(&key); - dbt_dump(&data); - } - - if (rval == -1) - err(1, "seq"); - return (0); -} - -/* - * db_hash -- - * Dump out hash header information. - */ -void -db_hash(dbp, pflag) - DB *dbp; - int pflag; -{ - HTAB185 *hash185p; - HTAB186 *hash186p; - - printf("format=%s\n", pflag ? "print" : "bytevalue"); - printf("type=hash\n"); - - /* DB 1.85 was version 2, DB 1.86 was version 3. */ - hash185p = dbp->internal; - if (hash185p->hdr.version > 2) { - hash186p = dbp->internal; - printf("h_ffactor=%lu\n", (u_long)hash186p->hdr.ffactor); - if (hash186p->hdr.lorder != 0) - printf("db_lorder=%lu\n", (u_long)hash186p->hdr.lorder); - printf("db_pagesize=%lu\n", (u_long)hash186p->hdr.bsize); - } else { - printf("h_ffactor=%lu\n", (u_long)hash185p->hdr.ffactor); - if (hash185p->hdr.lorder != 0) - printf("db_lorder=%lu\n", (u_long)hash185p->hdr.lorder); - printf("db_pagesize=%lu\n", (u_long)hash185p->hdr.bsize); - } - printf("HEADER=END\n"); -} - -/* - * db_btree -- - * Dump out btree header information. - */ -void -db_btree(dbp, pflag) - DB *dbp; - int pflag; -{ - BTREE *btp; - - btp = dbp->internal; - - printf("format=%s\n", pflag ? "print" : "bytevalue"); - printf("type=btree\n"); -#ifdef NOT_AVAILABLE_IN_185 - printf("bt_minkey=%lu\n", (u_long)XXX); - printf("bt_maxkey=%lu\n", (u_long)XXX); -#endif - if (btp->bt_lorder != 0) - printf("db_lorder=%lu\n", (u_long)btp->bt_lorder); - printf("db_pagesize=%lu\n", (u_long)btp->bt_psize); - if (!(btp->flags & B_NODUPS)) - printf("duplicates=1\n"); - printf("HEADER=END\n"); -} - -static char hex[] = "0123456789abcdef"; - -/* - * dbt_dump -- - * Write out a key or data item using byte values. - */ -void -dbt_dump(dbtp) - DBT *dbtp; -{ - size_t len; - u_int8_t *p; - - for (len = dbtp->size, p = dbtp->data; len--; ++p) - (void)printf("%c%c", - hex[(*p & 0xf0) >> 4], hex[*p & 0x0f]); - printf("\n"); -} - -/* - * dbt_print -- - * Write out a key or data item using printable characters. - */ -void -dbt_print(dbtp) - DBT *dbtp; -{ - size_t len; - u_int8_t *p; - - for (len = dbtp->size, p = dbtp->data; len--; ++p) - if (isprint(*p)) { - if (*p == '\\') - (void)printf("\\"); - (void)printf("%c", *p); - } else - (void)printf("\\%c%c", - hex[(*p & 0xf0) >> 4], hex[*p & 0x0f]); - printf("\n"); -} - -/* - * usage -- - * Display the usage message. - */ -void -usage() -{ - (void)fprintf(stderr, "usage: db_dump [-p] [-f file] db_file\n"); - exit(1); -} diff --git a/db2/progs/db_load/db_load.c b/db2/progs/db_load/db_load.c deleted file mode 100644 index a2426028dc..0000000000 --- a/db2/progs/db_load/db_load.c +++ /dev/null @@ -1,571 +0,0 @@ -/*- - * See the file LICENSE for redistribution information. - * - * Copyright (c) 1996, 1997, 1998 - * Sleepycat Software. All rights reserved. - */ - -#include "config.h" - -#ifndef lint -static const char copyright[] = -"@(#) Copyright (c) 1996, 1997, 1998\n\ - Sleepycat Software Inc. All rights reserved.\n"; -static const char sccsid[] = "@(#)db_load.c 10.23 (Sleepycat) 10/4/98"; -#endif - -#ifndef NO_SYSTEM_INCLUDES -#include <sys/types.h> - -#include <errno.h> -#include <limits.h> -#include <signal.h> -#include <stdio.h> -#include <stdlib.h> -#include <string.h> -#include <unistd.h> -#endif - -#include "db_int.h" -#include "db_page.h" -#include "db_am.h" -#include "clib_ext.h" - -void badnum __P((void)); -void configure __P((DB_INFO *, char **)); -DB_ENV *db_init __P((char *)); -int dbt_rdump __P((DBT *)); -int dbt_rprint __P((DBT *)); -int digitize __P((int)); -int main __P((int, char *[])); -void onint __P((int)); -void rheader __P((DBTYPE *, int *, DB_INFO *)); -void siginit __P((void)); -void usage __P((void)); - -int interrupted; -const char - *progname = "db_load"; /* Program name. */ - -int -main(argc, argv) - int argc; - char *argv[]; -{ - extern char *optarg; - extern int optind; - DB *dbp; - DBT key, data; - DBTYPE argtype, dbtype; - DB_ENV *dbenv; - DB_INFO dbinfo; - db_recno_t recno; - u_int32_t db_nooverwrite; - int ch, checkprint, existed, no_header, ret; - char **clist, **clp, *home; - - /* Allocate enough room for configuration arguments. */ - if ((clp = clist = (char **)calloc(argc + 1, sizeof(char *))) == NULL) - err(1, NULL); - - dbp = NULL; - home = NULL; - db_nooverwrite = 0; - checkprint = existed = no_header = ret = 0; - argtype = dbtype = DB_UNKNOWN; - while ((ch = getopt(argc, argv, "c:f:h:nTt:")) != EOF) - switch (ch) { - case 'c': - *clp++ = optarg; - break; - case 'f': - if (freopen(optarg, "r", stdin) == NULL) - err(1, "%s", optarg); - break; - case 'h': - home = optarg; - break; - case 'n': - db_nooverwrite = DB_NOOVERWRITE; - break; - case 'T': - no_header = checkprint = 1; - break; - case 't': - if (strcmp(optarg, "btree") == 0) { - argtype = DB_BTREE; - break; - } - if (strcmp(optarg, "hash") == 0) { - argtype = DB_HASH; - break; - } - if (strcmp(optarg, "recno") == 0) { - argtype = DB_RECNO; - break; - } - usage(); - /* NOTREACHED */ - case '?': - default: - usage(); - } - argc -= optind; - argv += optind; - - if (argc != 1) - usage(); - - /* - * Read the header. If there isn't any header, we're expecting flat - * text, set the checkprint flag appropriately. - */ - memset(&dbinfo, 0, sizeof(DB_INFO)); - if (no_header) - dbtype = argtype; - else { - rheader(&dbtype, &checkprint, &dbinfo); - if (argtype != DB_UNKNOWN) { - /* Conversion to/from recno is prohibited. */ - if ((dbtype == DB_RECNO && argtype != DB_RECNO) || - (argtype == DB_RECNO && dbtype != DB_RECNO)) - errx(1, - "databases of type recno may not be converted"); - dbtype = argtype; - } - } - - if (dbtype == DB_UNKNOWN) - errx(1, "no database type specified"); - - /* Apply command-line configuration changes. */ - configure(&dbinfo, clist); - - /* Initialize the key/data pair. */ - memset(&key, 0, sizeof(DBT)); - if (dbtype == DB_RECNO) { - key.data = &recno; - key.size = sizeof(recno); - } else - if ((key.data = (void *)malloc(key.ulen = 1024)) == NULL) { - errno = ENOMEM; - err(1, NULL); - } - memset(&data, 0, sizeof(DBT)); - if ((data.data = (void *)malloc(data.ulen = 1024)) == NULL) { - errno = ENOMEM; - err(1, NULL); - } - - /* Initialize the environment if the user specified one. */ - siginit(); - dbenv = home == NULL ? NULL : db_init(home); - - /* Open the DB file. */ - if ((errno = db_open(argv[0], dbtype, DB_CREATE, - __db_omode("rwrwrw"), dbenv, &dbinfo, &dbp)) != 0) { - warn("%s", argv[0]); - goto err; - } - - /* Get each key/data pair and add them to the database. */ - for (recno = 1; !interrupted; ++recno) { - if (dbtype == DB_RECNO) { - if (checkprint) { - if (dbt_rprint(&data)) - break; - } else { - if (dbt_rdump(&data)) - break; - } - } else { - if (checkprint) { - if (dbt_rprint(&key)) - break; - if (dbt_rprint(&data)) - goto fmt; - } else { - if (dbt_rdump(&key)) - break; - if (dbt_rdump(&data)) { -fmt: warnx("odd number of key/data pairs"); - goto err; - } - } - } - switch (errno = - dbp->put(dbp, NULL, &key, &data, db_nooverwrite)) { - case 0: - break; - case DB_KEYEXIST: - existed = 1; - warnx("%s: line %d: key already exists, not loaded:", - argv[0], - dbtype == DB_RECNO ? recno : recno * 2 - 1); - - (void)__db_prdbt(&key, checkprint, stderr); - break; - default: - warn(NULL); - goto err; - } - } - - if (0) { -err: ret = 1; - } - if (dbp != NULL && (errno = dbp->close(dbp, 0)) != 0) { - ret = 1; - warn(NULL); - } - - if (dbenv != NULL && (errno = db_appexit(dbenv)) != 0) { - ret = 1; - warn(NULL); - } - - if (interrupted) { - (void)signal(interrupted, SIG_DFL); - (void)raise(interrupted); - /* NOTREACHED */ - } - - /* Return 0 on success, 1 if keys existed already, and 2 on failure. */ - return (ret == 0 ? (existed == 0 ? 0 : 1) : 2); -} - -/* - * db_init -- - * Initialize the environment. - */ -DB_ENV * -db_init(home) - char *home; -{ - DB_ENV *dbenv; - - if ((dbenv = (DB_ENV *)calloc(sizeof(DB_ENV), 1)) == NULL) { - errno = ENOMEM; - err(1, NULL); - } - - /* - * The database may be live, try and use the shared regions. - * - * If it works, we're done. Set the error output options so that - * future errors are correctly reported. - */ - if ((errno = db_appinit(home, NULL, dbenv, DB_INIT_LOCK | - DB_INIT_LOG | DB_INIT_MPOOL | DB_INIT_TXN | DB_USE_ENVIRON)) == 0) { - dbenv->db_errfile = stderr; - dbenv->db_errpfx = progname; - return (dbenv); - } - - /* - * If the db_appinit fails, assume the database isn't live, and don't - * bother with an environment. - */ - free(dbenv); - return (NULL); -} - -#define FLAG(name, value, keyword, flag) \ - if (strcmp(name, keyword) == 0) { \ - switch (*value) { \ - case '1': \ - dbinfop->flags |= (flag); \ - break; \ - case '0': \ - dbinfop->flags &= ~(flag); \ - break; \ - default: \ - badnum(); \ - /* NOTREACHED */ \ - } \ - continue; \ - } -#define NUMBER(name, value, keyword, field, flag) \ - if (strcmp(name, keyword) == 0) { \ - get_long(value, 1, LONG_MAX, &val); \ - dbinfop->field = val; \ - if (flag != 0) \ - dbinfop->flags |= (flag); \ - continue; \ - } -#define STRING(name, value, keyword, field, flag) \ - if (strcmp(name, keyword) == 0) { \ - dbinfop->field = value[0]; \ - if (flag != 0) \ - dbinfop->flags |= (flag); \ - continue; \ - } - -/* - * configure -- - * Handle command-line configuration options. - */ -void -configure(dbinfop, clp) - DB_INFO *dbinfop; - char **clp; -{ - long val; - char *name, *value; - - for (; (name = *clp) != NULL; ++clp) { - if ((value = strchr(name, '=')) == NULL) - errx(1, - "command-line configuration uses name=value format"); - *value++ = '\0'; - - NUMBER(name, value, "bt_maxkey", bt_maxkey, 0); - NUMBER(name, value, "bt_minkey", bt_minkey, 0); - NUMBER(name, value, "db_lorder", db_lorder, 0); - NUMBER(name, value, "db_pagesize", db_pagesize, 0); - FLAG(name, value, "duplicates", DB_DUP); - NUMBER(name, value, "h_ffactor", h_ffactor, 0); - NUMBER(name, value, "h_nelem", h_nelem, 0); - NUMBER(name, value, "re_len", re_len, DB_FIXEDLEN); - STRING(name, value, "re_pad", re_pad, DB_PAD); - FLAG(name, value, "recnum", DB_RECNUM); - FLAG(name, value, "renumber", DB_RENUMBER); - - errx(1, "unknown command-line configuration keyword"); - } -} - -/* - * rheader -- - * Read the header message. - */ -void -rheader(dbtypep, checkprintp, dbinfop) - DBTYPE *dbtypep; - int *checkprintp; - DB_INFO *dbinfop; -{ - long lineno, val; - char name[256], value[256]; - - *dbtypep = DB_UNKNOWN; - *checkprintp = 0; - - for (lineno = 1;; ++lineno) { - /* If we don't see the expected information, it's an error. */ - if (fscanf(stdin, "%[^=]=%s\n", name, value) != 2) - errx(1, "line %lu: unexpected format", lineno); - - /* Check for the end of the header lines. */ - if (strcmp(name, "HEADER") == 0) - break; - - if (strcmp(name, "format") == 0) { - if (strcmp(value, "bytevalue") == 0) { - *checkprintp = 0; - continue; - } - if (strcmp(value, "print") == 0) { - *checkprintp = 1; - continue; - } - errx(1, "line %d: unknown format", lineno); - } - if (strcmp(name, "type") == 0) { - if (strcmp(value, "btree") == 0) { - *dbtypep = DB_BTREE; - continue; - } - if (strcmp(value, "hash") == 0) { - *dbtypep = DB_HASH; - continue; - } - if (strcmp(value, "recno") == 0) { - *dbtypep = DB_RECNO; - continue; - } - errx(1, "line %d: unknown type", lineno); - } - NUMBER(name, value, "bt_maxkey", bt_maxkey, 0); - NUMBER(name, value, "bt_minkey", bt_minkey, 0); - NUMBER(name, value, "db_lorder", db_lorder, 0); - NUMBER(name, value, "db_pagesize", db_pagesize, 0); - FLAG(name, value, "duplicates", DB_DUP); - NUMBER(name, value, "h_ffactor", h_ffactor, 0); - NUMBER(name, value, "h_nelem", h_nelem, 0); - NUMBER(name, value, "re_len", re_len, DB_FIXEDLEN); - STRING(name, value, "re_pad", re_pad, DB_PAD); - FLAG(name, value, "recnum", DB_RECNUM); - FLAG(name, value, "renumber", DB_RENUMBER); - - errx(1, "unknown input-file header configuration keyword"); - } -} - -/* - * dbt_rprint -- - * Read a printable line into a DBT structure. - */ -int -dbt_rprint(dbtp) - DBT *dbtp; -{ - u_int32_t len; - u_int8_t *p; - int c1, c2, escape; - - escape = 0; - for (p = dbtp->data, len = 0; (c1 = getchar()) != '\n';) { - if (c1 == EOF) { - if (len == 0) - return (1); - err(1, "unexpected end of key/data pair"); - } - if (escape) { - if (c1 != '\\') { - if ((c2 = getchar()) == EOF) - err(1, - "unexpected end of key/data pair"); - c1 = digitize(c1) << 4 | digitize(c2); - } - escape = 0; - } else - if (c1 == '\\') { - escape = 1; - continue; - } - if (len >= dbtp->ulen - 10) { - dbtp->ulen *= 2; - if ((dbtp->data = - (void *)realloc(dbtp->data, dbtp->ulen)) == NULL) { - errno = ENOMEM; - err(1, NULL); - } - p = (u_int8_t *)dbtp->data + len; - } - ++len; - *p++ = c1; - } - dbtp->size = len; - return (0); -} - -/* - * dbt_rdump -- - * Read a byte dump line into a DBT structure. - */ -int -dbt_rdump(dbtp) - DBT *dbtp; -{ - u_int32_t len; - u_int8_t *p; - int c1, c2; - - for (p = dbtp->data, len = 0; (c1 = getchar()) != '\n';) { - if (c1 == EOF) { - if (len == 0) - return (1); - err(1, "unexpected end of key/data pair"); - } - if ((c2 = getchar()) == EOF) - err(1, "unexpected end of key/data pair"); - if (len >= dbtp->ulen - 10) { - dbtp->ulen *= 2; - if ((dbtp->data = - (void *)realloc(dbtp->data, dbtp->ulen)) == NULL) { - errno = ENOMEM; - err(1, NULL); - } - p = (u_int8_t *)dbtp->data + len; - } - ++len; - *p++ = digitize(c1) << 4 | digitize(c2); - } - dbtp->size = len; - return (0); -} - -/* - * digitize -- - * Convert a character to an integer. - */ -int -digitize(c) - int c; -{ - switch (c) { /* Don't depend on ASCII ordering. */ - case '0': return (0); - case '1': return (1); - case '2': return (2); - case '3': return (3); - case '4': return (4); - case '5': return (5); - case '6': return (6); - case '7': return (7); - case '8': return (8); - case '9': return (9); - case 'a': return (10); - case 'b': return (11); - case 'c': return (12); - case 'd': return (13); - case 'e': return (14); - case 'f': return (15); - } - - err(1, "unexpected hexadecimal value"); - /* NOTREACHED */ - - return (0); -} - -/* - * badnum -- - * Display the bad number message. - */ -void -badnum() -{ - err(1, "boolean name=value pairs require a value of 0 or 1"); -} - -/* - * siginit -- - * Initialize the set of signals for which we want to clean up. - * Generally, we try not to leave the shared regions locked if - * we can. - */ -void -siginit() -{ -#ifdef SIGHUP - (void)signal(SIGHUP, onint); -#endif - (void)signal(SIGINT, onint); - (void)signal(SIGTERM, onint); -} - -/* - * onint -- - * Interrupt signal handler. - */ -void -onint(signo) - int signo; -{ - if ((interrupted = signo) == 0) - interrupted = SIGINT; -} - -/* - * usage -- - * Display the usage message. - */ -void -usage() -{ - (void)fprintf(stderr, "%s\n\t%s\n", - "usage: db_load [-nT]", - "[-c name=value] [-f file] [-h home] [-t btree | hash | recno] db_file"); - exit(1); -} diff --git a/db2/progs/db_printlog/README b/db2/progs/db_printlog/README deleted file mode 100644 index 05051f33cd..0000000000 --- a/db2/progs/db_printlog/README +++ /dev/null @@ -1,22 +0,0 @@ -# @(#)README 10.3 (Sleepycat) 11/1/98 - -Berkeley DB log dump utility. This utility dumps out a DB log in human -readable form, a record at a time, to assist in recovery and transaction -abort debugging. - -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= -commit.awk Output transaction ID of committed transactions. - -count.awk Print out the number of log records for transactions - that we encountered. - -pgno.awk Take a comma-separated list of page numbers and spit - out all the log records that affect those page numbers. - -range.awk Print out a range of the log. - -status.awk Read through db_printlog output and list the transactions - encountered, and whether they commited or aborted. - -txn.awk Print out all the records for a comma-separated list of - transaction IDs. diff --git a/db2/progs/db_printlog/commit.awk b/db2/progs/db_printlog/commit.awk deleted file mode 100644 index 711064bb00..0000000000 --- a/db2/progs/db_printlog/commit.awk +++ /dev/null @@ -1,7 +0,0 @@ -# @(#)commit.awk 10.1 (Sleepycat) 11/1/98 -# -# Output tid of committed transactions. - -/txn_regop/ { - print $5 -} diff --git a/db2/progs/db_printlog/count.awk b/db2/progs/db_printlog/count.awk deleted file mode 100644 index a0b214a6ff..0000000000 --- a/db2/progs/db_printlog/count.awk +++ /dev/null @@ -1,9 +0,0 @@ -# @(#)count.awk 10.1 (Sleepycat) 11/1/98 -# -# Print out the number of log records for transactions that we -# encountered. - -/^\[/{ - if ($5 != 0) - print $5 -} diff --git a/db2/progs/db_printlog/db_printlog.c b/db2/progs/db_printlog/db_printlog.c deleted file mode 100644 index 5a0c2ebd9f..0000000000 --- a/db2/progs/db_printlog/db_printlog.c +++ /dev/null @@ -1,192 +0,0 @@ -/*- - * See the file LICENSE for redistribution information. - * - * Copyright (c) 1996, 1997, 1998 - * Sleepycat Software. All rights reserved. - */ - -#include "config.h" - -#ifndef lint -static const char copyright[] = -"@(#) Copyright (c) 1996, 1997, 1998\n\ - Sleepycat Software Inc. All rights reserved.\n"; -static const char sccsid[] = "@(#)db_printlog.c 10.17 (Sleepycat) 11/1/98"; -#endif - -#ifndef NO_SYSTEM_INCLUDES -#include <sys/types.h> - -#include <errno.h> -#include <signal.h> -#include <stdio.h> -#include <stdlib.h> -#include <string.h> -#include <unistd.h> -#endif - -#include "db_int.h" -#include "shqueue.h" -#include "db_page.h" -#include "btree.h" -#include "hash.h" -#include "log.h" -#include "txn.h" -#include "db_am.h" -#include "clib_ext.h" - -DB_ENV *db_init __P((char *)); -int main __P((int, char *[])); -void onint __P((int)); -void siginit __P((void)); -void usage __P((void)); - -int interrupted; -const char - *progname = "db_printlog"; /* Program name. */ - -int -main(argc, argv) - int argc; - char *argv[]; -{ - extern char *optarg; - extern int optind; - DB_ENV *dbenv; - DBT data; - DB_LSN key; - int ch, ret; - char *home; - - ret = 0; - home = NULL; - while ((ch = getopt(argc, argv, "h:N")) != EOF) - switch (ch) { - case 'h': - home = optarg; - break; - case 'N': - (void)db_value_set(0, DB_MUTEXLOCKS); - break; - case '?': - default: - usage(); - } - argc -= optind; - argv += optind; - - if (argc > 0) - usage(); - - /* Initialize the environment. */ - siginit(); - dbenv = db_init(home); - - if ((errno = __bam_init_print(dbenv)) != 0 || - (errno = __db_init_print(dbenv)) != 0 || - (errno = __ham_init_print(dbenv)) != 0 || - (errno = __log_init_print(dbenv)) != 0 || - (errno = __txn_init_print(dbenv)) != 0) { - warn("initialization"); - (void)db_appexit(dbenv); - return (1); - } - - memset(&data, 0, sizeof(data)); - while (!interrupted) { - if ((errno = - log_get(dbenv->lg_info, &key, &data, DB_NEXT)) != 0) { - if (errno == DB_NOTFOUND) - break; - warn("log_get"); - goto err; - } - if (dbenv->tx_recover != NULL) - errno = dbenv->tx_recover(dbenv->lg_info, - &data, &key, 0, NULL); - else - errno = __db_dispatch(dbenv->lg_info, - &data, &key, 0, NULL); - - fflush(stdout); - if (errno != 0) { - warn("dispatch"); - goto err; - } - } - - if (0) { -err: ret = 1; - } - - if (dbenv != NULL && (errno = db_appexit(dbenv)) != 0) { - ret = 1; - warn(NULL); - } - - if (interrupted) { - (void)signal(interrupted, SIG_DFL); - (void)raise(interrupted); - /* NOTREACHED */ - } - - return (ret); -} - -/* - * db_init -- - * Initialize the environment. - */ -DB_ENV * -db_init(home) - char *home; -{ - DB_ENV *dbenv; - - if ((dbenv = (DB_ENV *)calloc(sizeof(DB_ENV), 1)) == NULL) { - errno = ENOMEM; - err(1, NULL); - } - dbenv->db_errfile = stderr; - dbenv->db_errpfx = progname; - - if ((errno = - db_appinit(home, NULL, dbenv, DB_CREATE | DB_INIT_LOG)) != 0) - err(1, "db_appinit"); - return (dbenv); -} - -/* - * siginit -- - * Initialize the set of signals for which we want to clean up. - * Generally, we try not to leave the shared regions locked if - * we can. - */ -void -siginit() -{ -#ifdef SIGHUP - (void)signal(SIGHUP, onint); -#endif - (void)signal(SIGINT, onint); - (void)signal(SIGTERM, onint); -} - -/* - * onint -- - * Interrupt signal handler. - */ -void -onint(signo) - int signo; -{ - if ((interrupted = signo) == 0) - interrupted = SIGINT; -} - -void -usage() -{ - fprintf(stderr, "usage: db_printlog [-N] [-h home]\n"); - exit (1); -} diff --git a/db2/progs/db_printlog/pgno.awk b/db2/progs/db_printlog/pgno.awk deleted file mode 100644 index 99aa38f2b9..0000000000 --- a/db2/progs/db_printlog/pgno.awk +++ /dev/null @@ -1,43 +0,0 @@ -# @(#)pgno.awk 10.1 (Sleepycat) 11/1/98 -# -# Take a comma-separated list of page numbers and spit out all the -# log records that affect those page numbers. - -{ - if (NR == 1) { - npages = 0 - while ((ndx = index(PGNO, ",")) != 0) { - pgno[npages] = substr(PGNO, 1, ndx - 1); - PGNO = substr(PGNO, ndx + 1, length(PGNO) - ndx); - npages++ - } - pgno[npages] = PGNO; - } -} -/^\[/{ - if (printme == 1) { - printf("%s\n", rec); - printme = 0 - } - rec = ""; - - rec = $0 -} -/^ /{ - rec = sprintf("%s\n%s", rec, $0); -} -/pgno/{ - for (i = 0; i <= npages; i++) - if ($2 == pgno[i]) - printme = 1 -} -/right/{ - for (i = 0; i <= npages; i++) - if ($2 == pgno[i]) - printme = 1 -} -/left/{ - for (i = 0; i <= npages; i++) - if ($2 == pgno[i]) - printme = 1 -} diff --git a/db2/progs/db_printlog/range.awk b/db2/progs/db_printlog/range.awk deleted file mode 100644 index 89c56eae52..0000000000 --- a/db2/progs/db_printlog/range.awk +++ /dev/null @@ -1,27 +0,0 @@ -# @(#)range.awk 10.1 (Sleepycat) 11/1/98 -# -# Print out a range of the log - -/^\[/{ - l = length($1) - 1; - i = index($1, "]"); - file = substr($1, 2, i - 2); - file += 0; - start = i + 2; - offset = substr($1, start, l - start + 1); - i = index(offset, "]"); - offset = substr($1, start, i - 1); - offset += 0; - - if ((file == START_FILE && offset >= START_OFFSET || file > START_FILE)\ - && (file < END_FILE || (file == END_FILE && offset < END_OFFSET))) - printme = 1 - else if (file == END_FILE && offset > END_OFFSET || file > END_FILE) - exit - else - printme = 0 -} -{ - if (printme == 1) - print $0 -} diff --git a/db2/progs/db_printlog/status.awk b/db2/progs/db_printlog/status.awk deleted file mode 100644 index d97e9357b7..0000000000 --- a/db2/progs/db_printlog/status.awk +++ /dev/null @@ -1,26 +0,0 @@ -# @(#)status.awk 10.1 (Sleepycat) 11/1/98 -# -# Read through db_printlog output and list all the transactions encountered -# and whether they commited or aborted. -# -# 1 = started -# 2 = commited -BEGIN { - cur_txn = 0 -} -/^\[/{ - if (status[$5] == 0) { - status[$5] = 1; - txns[cur_txn] = $5; - cur_txn++; - } -} -/txn_regop/ { - status[$5] = 2 -} -END { - for (i = 0; i < cur_txn; i++) { - printf("%s\t%s\n", - txns[i], status[txns[i]] == 1 ? "ABORT" : "COMMIT"); - } -} diff --git a/db2/progs/db_printlog/txn.awk b/db2/progs/db_printlog/txn.awk deleted file mode 100644 index c8d3bd36c8..0000000000 --- a/db2/progs/db_printlog/txn.awk +++ /dev/null @@ -1,30 +0,0 @@ -# @(#)txn.awk 10.1 (Sleepycat) 11/1/98 -# -# Print out all the records for a comma-separated list of transaction ids. -{ - if (NR == 1) { - ntxns = 0 - while ((ndx = index(TXN, ",")) != 0) { - txn[ntxns] = substr(TXN, 1, ndx - 1); - TXN = substr(TXN, ndx + 1, length(TXN) - ndx); - ntxns++ - } - txn[ntxns] = TXN; - } -} -/^\[/{ - if (printme == 1) { - printf("%s\n", rec); - printme = 0 - } - rec = ""; - - for (i = 0; i <= ntxns; i++) - if (txn[i] == $5) { - rec = $0 - printme = 1 - } -} -/^ /{ - rec = sprintf("%s\n%s", rec, $0); -} diff --git a/db2/progs/db_recover/db_recover.c b/db2/progs/db_recover/db_recover.c deleted file mode 100644 index d946ca15ee..0000000000 --- a/db2/progs/db_recover/db_recover.c +++ /dev/null @@ -1,147 +0,0 @@ -/*- - * See the file LICENSE for redistribution information. - * - * Copyright (c) 1996, 1997, 1998 - * Sleepycat Software. All rights reserved. - */ - -#include "config.h" - -#ifndef lint -static const char copyright[] = -"@(#) Copyright (c) 1996, 1997, 1998\n\ - Sleepycat Software Inc. All rights reserved.\n"; -static const char sccsid[] = "@(#)db_recover.c 10.23 (Sleepycat) 10/5/98"; -#endif - -#ifndef NO_SYSTEM_INCLUDES -#include <sys/types.h> - -#include <errno.h> -#include <signal.h> -#include <stdlib.h> -#include <time.h> -#include <unistd.h> -#endif - -#include "db_int.h" -#include "shqueue.h" -#include "txn.h" -#include "common_ext.h" -#include "clib_ext.h" - -DB_ENV *db_init __P((char *, u_int32_t, int)); -int main __P((int, char *[])); -void nosig __P((void)); -void usage __P((void)); - -const char - *progname = "db_recover"; /* Program name. */ - -int -main(argc, argv) - int argc; - char *argv[]; -{ - extern char *optarg; - extern int optind; - DB_ENV *dbenv; - time_t now; - u_int32_t flags; - int ch, verbose; - char *home; - - home = NULL; - flags = verbose = 0; - while ((ch = getopt(argc, argv, "ch:v")) != EOF) - switch (ch) { - case 'c': - LF_SET(DB_RECOVER_FATAL); - break; - case 'h': - home = optarg; - break; - case 'v': - verbose = 1; - break; - case '?': - default: - usage(); - } - argc -= optind; - argv += optind; - - if (argc != 0) - usage(); - - /* - * Ignore signals -- we don't want to be interrupted because we're - * spending all of our time in the DB library. - */ - nosig(); - dbenv = db_init(home, flags, verbose); - if (verbose) { - __db_err(dbenv, "Recovery complete at %.24s", ctime(&now)); - __db_err(dbenv, "%s %lx %s [%lu][%lu]", - "Maximum transaction id", - (u_long)dbenv->tx_info->region->last_txnid, - "Recovery checkpoint", - (u_long)dbenv->tx_info->region->last_ckp.file, - (u_long)dbenv->tx_info->region->last_ckp.offset); - } - - return (db_appexit(dbenv)); -} - -DB_ENV * -db_init(home, flags, verbose) - char *home; - u_int32_t flags; - int verbose; -{ - DB_ENV *dbenv; - u_int32_t local_flags; - - if ((dbenv = (DB_ENV *)calloc(sizeof(DB_ENV), 1)) == NULL) { - errno = ENOMEM; - err(1, NULL); - } - dbenv->db_errfile = stderr; - dbenv->db_errpfx = "db_recover"; - dbenv->db_verbose = verbose; - - /* Initialize environment for pathnames only. */ - local_flags = DB_CREATE | DB_INIT_LOG | - DB_INIT_MPOOL | DB_INIT_LOCK | DB_INIT_TXN | DB_USE_ENVIRON; - - if (LF_ISSET(DB_RECOVER_FATAL)) - local_flags |= DB_RECOVER_FATAL; - else - local_flags |= DB_RECOVER; - - if ((errno = db_appinit(home, NULL, dbenv, local_flags)) != 0) - err(1, "appinit failed"); - - return (dbenv); -} - -/* - * nosig -- - * We don't want to be interrupted. - */ -void -nosig() -{ -#ifdef SIGHUP - (void)signal(SIGHUP, SIG_IGN); -#endif - (void)signal(SIGINT, SIG_IGN); - (void)signal(SIGTERM, SIG_IGN); -} - -void -usage() -{ - (void)fprintf(stderr, "usage: db_recover [-cv] [-h home]\n"); - exit(1); -} diff --git a/db2/progs/db_stat/db_stat.c b/db2/progs/db_stat/db_stat.c deleted file mode 100644 index cef645da00..0000000000 --- a/db2/progs/db_stat/db_stat.c +++ /dev/null @@ -1,621 +0,0 @@ -/*- - * See the file LICENSE for redistribution information. - * - * Copyright (c) 1996, 1997, 1998 - * Sleepycat Software. All rights reserved. - */ - -#include "config.h" - -#ifndef lint -static const char copyright[] = -"@(#) Copyright (c) 1996, 1997, 1998\n\ - Sleepycat Software Inc. All rights reserved.\n"; -static const char sccsid[] = "@(#)db_stat.c 8.41 (Sleepycat) 10/3/98"; -#endif - -#ifndef NO_SYSTEM_INCLUDES -#include <sys/types.h> - -#include <ctype.h> -#include <errno.h> -#include <signal.h> -#include <stdlib.h> -#include <string.h> -#include <time.h> -#include <unistd.h> -#endif - -#undef stat - -#include "db_int.h" -#include "shqueue.h" -#include "db_shash.h" -#include "lock.h" -#include "mp.h" -#include "clib_ext.h" - -typedef enum { T_NOTSET, T_DB, T_LOCK, T_LOG, T_MPOOL, T_TXN } test_t; - -int argcheck __P((char *, const char *)); -void btree_stats __P((DB *)); -DB_ENV *db_init __P((char *, test_t)); -void dl __P((const char *, u_long)); -void hash_stats __P((DB *)); -int lock_ok __P((char *)); -void lock_stats __P((DB_ENV *)); -void log_stats __P((DB_ENV *)); -int main __P((int, char *[])); -int mpool_ok __P((char *)); -void mpool_stats __P((DB_ENV *)); -void nosig __P((void)); -void prflags __P((u_int32_t, const FN *)); -int txn_compare __P((const void *, const void *)); -void txn_stats __P((DB_ENV *)); -void usage __P((void)); - -char *internal; -const char - *progname = "db_stat"; /* Program name. */ - -int -main(argc, argv) - int argc; - char *argv[]; -{ - extern char *optarg; - extern int optind; - DB *dbp; - DB_ENV *dbenv; - test_t ttype; - int ch; - char *db, *home; - - ttype = T_NOTSET; - db = home = NULL; - while ((ch = getopt(argc, argv, "C:cd:h:lM:mNt")) != EOF) - switch (ch) { - case 'C': - ttype = T_LOCK; - if (!argcheck(internal = optarg, "Acflmo")) - usage(); - break; - case 'c': - ttype = T_LOCK; - break; - case 'd': - db = optarg; - ttype = T_DB; - break; - case 'h': - home = optarg; - break; - case 'l': - ttype = T_LOG; - break; - case 'M': - ttype = T_MPOOL; - if (!argcheck(internal = optarg, "Ahlm")) - usage(); - break; - case 'm': - ttype = T_MPOOL; - break; - case 'N': - (void)db_value_set(0, DB_MUTEXLOCKS); - break; - case 't': - ttype = T_TXN; - break; - case '?': - default: - usage(); - } - argc -= optind; - argv += optind; - - if (argc != 0 || ttype == T_NOTSET) - usage(); - - /* - * Ignore signals -- we don't want to be interrupted because we're - * spending all of our time in the DB library. - */ - nosig(); - dbenv = db_init(home, ttype); - - switch (ttype) { - case T_DB: - if ((errno = db_open(db, DB_UNKNOWN, - DB_RDONLY, 0, dbenv, NULL, &dbp)) != 0) { - warn("%s", db); - return (1); - } - switch (dbp->type) { - case DB_BTREE: - case DB_RECNO: - btree_stats(dbp); - break; - case DB_HASH: - hash_stats(dbp); - break; - case DB_UNKNOWN: - abort(); /* Impossible. */ - /* NOTREACHED */ - } - (void)dbp->close(dbp, 0); - break; - case T_LOCK: - lock_stats(dbenv); - break; - case T_LOG: - log_stats(dbenv); - break; - case T_MPOOL: - mpool_stats(dbenv); - break; - case T_TXN: - txn_stats(dbenv); - break; - case T_NOTSET: - abort(); /* Impossible. */ - /* NOTREACHED */ - } - - if ((errno = db_appexit(dbenv)) != 0) { - warn(NULL); - return (1); - } - return (0); -} - -/* - * btree_stats -- - * Display btree/recno statistics. - */ -void -btree_stats(dbp) - DB *dbp; -{ - static const FN fn[] = { - { DB_DUP, "DB_DUP" }, - { DB_FIXEDLEN, "DB_FIXEDLEN" }, - { DB_RECNUM, "DB_RECNUM" }, - { DB_RENUMBER, "DB_RENUMBER" }, - { 0 } - }; - DB_BTREE_STAT *sp; - - if (dbp->stat(dbp, &sp, NULL, 0)) - err(1, "dbp->stat"); - -#define PCT(f, t) \ - (t == 0 ? 0 : \ - (((double)((t * sp->bt_pagesize) - f) / (t * sp->bt_pagesize)) * 100)) - - printf("%#lx\tBtree magic number.\n", (u_long)sp->bt_magic); - printf("%lu\tBtree version number.\n", (u_long)sp->bt_version); - prflags(sp->bt_flags, fn); - if (dbp->type == DB_BTREE) { -#ifdef NOT_IMPLEMENTED - dl("Maximum keys per-page.\n", (u_long)sp->bt_maxkey); -#endif - dl("Minimum keys per-page.\n", (u_long)sp->bt_minkey); - } - if (dbp->type == DB_RECNO) { - dl("Fixed-length record size.\n", (u_long)sp->bt_re_len); - if (isprint(sp->bt_re_pad)) - printf("%c\tFixed-length record pad.\n", - (int)sp->bt_re_pad); - else - printf("0x%x\tFixed-length record pad.\n", - (int)sp->bt_re_pad); - } - dl("Underlying tree page size.\n", (u_long)sp->bt_pagesize); - dl("Number of levels in the tree.\n", (u_long)sp->bt_levels); - dl("Number of keys in the tree.\n", (u_long)sp->bt_nrecs); - dl("Number of tree internal pages.\n", (u_long)sp->bt_int_pg); - dl("Number of tree leaf pages.\n", (u_long)sp->bt_leaf_pg); - dl("Number of tree duplicate pages.\n", (u_long)sp->bt_dup_pg); - dl("Number of tree overflow pages.\n", (u_long)sp->bt_over_pg); - dl("Number of pages on the free list.\n", (u_long)sp->bt_free); - dl("Number of bytes free in tree internal pages", - (u_long)sp->bt_int_pgfree); - printf(" (%.0f%% ff).\n", PCT(sp->bt_int_pgfree, sp->bt_int_pg)); - dl("Number of bytes free in tree leaf pages", - (u_long)sp->bt_leaf_pgfree); - printf(" (%.0f%% ff).\n", PCT(sp->bt_leaf_pgfree, sp->bt_leaf_pg)); - dl("Number of bytes free in tree duplicate pages", - (u_long)sp->bt_dup_pgfree); - printf(" (%.0f%% ff).\n", PCT(sp->bt_dup_pgfree, sp->bt_dup_pg)); - dl("Number of bytes free in tree overflow pages", - (u_long)sp->bt_over_pgfree); - printf(" (%.0f%% ff).\n", PCT(sp->bt_over_pgfree, sp->bt_over_pg)); -} - -/* - * hash_stats -- - * Display hash statistics. - */ -void -hash_stats(dbp) - DB *dbp; -{ - COMPQUIET(dbp, NULL); - - printf("Hash statistics not currently available.\n"); - return; -} - -/* - * lock_stats -- - * Display lock statistics. - */ -void -lock_stats(dbenv) - DB_ENV *dbenv; -{ - DB_LOCK_STAT *sp; - - if (internal != NULL) { - __lock_dump_region(dbenv->lk_info, internal, stdout); - return; - } - - if (lock_stat(dbenv->lk_info, &sp, NULL)) - err(1, NULL); - - printf("%#lx\tLock magic number.\n", (u_long)sp->st_magic); - printf("%lu\tLock version number.\n", (u_long)sp->st_version); - dl("Lock region reference count.\n", (u_long)sp->st_refcnt); - dl("Lock region size.\n", (u_long)sp->st_regsize); - dl("Maximum number of locks.\n", (u_long)sp->st_maxlocks); - dl("Number of lock modes.\n", (u_long)sp->st_nmodes); - dl("Number of lock objects.\n", (u_long)sp->st_numobjs); - dl("Number of lockers.\n", (u_long)sp->st_nlockers); - dl("Number of lock conflicts.\n", (u_long)sp->st_nconflicts); - dl("Number of lock requests.\n", (u_long)sp->st_nrequests); - dl("Number of lock releases.\n", (u_long)sp->st_nreleases); - dl("Number of deadlocks.\n", (u_long)sp->st_ndeadlocks); - dl("The number of region locks granted without waiting.\n", - (u_long)sp->st_region_nowait); - dl("The number of region locks granted after waiting.\n", - (u_long)sp->st_region_wait); -} - -/* - * log_stats -- - * Display log statistics. - */ -void -log_stats(dbenv) - DB_ENV *dbenv; -{ - DB_LOG_STAT *sp; - - if (log_stat(dbenv->lg_info, &sp, NULL)) - err(1, NULL); - - printf("%#lx\tLog magic number.\n", (u_long)sp->st_magic); - printf("%lu\tLog version number.\n", (u_long)sp->st_version); - dl("Log region reference count.\n", (u_long)sp->st_refcnt); - dl("Log region size.\n", (u_long)sp->st_regsize); - printf("%#o\tLog file mode.\n", sp->st_mode); - if (sp->st_lg_max % MEGABYTE == 0) - printf("%luMb\tLog file size.\n", - (u_long)sp->st_lg_max / MEGABYTE); - else if (sp->st_lg_max % 1024 == 0) - printf("%luKb\tLog file size.\n", (u_long)sp->st_lg_max / 1024); - else - printf("%lu\tLog file size.\n", (u_long)sp->st_lg_max); - printf("%luMb\tLog bytes written (+%lu bytes).\n", - (u_long)sp->st_w_mbytes, (u_long)sp->st_w_bytes); - printf("%luMb\tLog bytes written since last checkpoint (+%lu bytes).\n", - (u_long)sp->st_wc_mbytes, (u_long)sp->st_wc_bytes); - dl("Total log file writes.\n", (u_long)sp->st_wcount); - dl("Total log file flushes.\n", (u_long)sp->st_scount); - printf("%lu\tCurrent log file number.\n", (u_long)sp->st_cur_file); - printf("%lu\tCurrent log file offset.\n", (u_long)sp->st_cur_offset); - dl("The number of region locks granted without waiting.\n", - (u_long)sp->st_region_nowait); - dl("The number of region locks granted after waiting.\n", - (u_long)sp->st_region_wait); -} - -/* - * mpool_stats -- - * Display mpool statistics. - */ -void -mpool_stats(dbenv) - DB_ENV *dbenv; -{ - DB_MPOOL_FSTAT **fsp; - DB_MPOOL_STAT *gsp; - - if (internal != NULL) { - __memp_dump_region(dbenv->mp_info, internal, stdout); - return; - } - - if (memp_stat(dbenv->mp_info, &gsp, &fsp, NULL)) - err(1, NULL); - - dl("Pool region reference count.\n", (u_long)gsp->st_refcnt); - dl("Pool region size.\n", (u_long)gsp->st_regsize); - dl("Cache size", (u_long)gsp->st_cachesize); - printf(" (%luK).\n", (u_long)gsp->st_cachesize / 1024); - dl("Requested pages found in the cache", (u_long)gsp->st_cache_hit); - if (gsp->st_cache_hit + gsp->st_cache_miss != 0) - printf(" (%.0f%%)", ((double)gsp->st_cache_hit / - (gsp->st_cache_hit + gsp->st_cache_miss)) * 100); - printf(".\n"); - dl("Requested pages mapped into the process' address space.\n", - (u_long)gsp->st_map); - dl("Requested pages not found in the cache.\n", - (u_long)gsp->st_cache_miss); - dl("Pages created in the cache.\n", (u_long)gsp->st_page_create); - dl("Pages read into the cache.\n", (u_long)gsp->st_page_in); - dl("Pages written from the cache to the backing file.\n", - (u_long)gsp->st_page_out); - dl("Clean pages forced from the cache.\n", - (u_long)gsp->st_ro_evict); - dl("Dirty pages forced from the cache.\n", - (u_long)gsp->st_rw_evict); - dl("Dirty buffers written by trickle-sync thread.\n", - (u_long)gsp->st_page_trickle); - dl("Current clean buffer count.\n", - (u_long)gsp->st_page_clean); - dl("Current dirty buffer count.\n", - (u_long)gsp->st_page_dirty); - dl("Number of hash buckets used for page location.\n", - (u_long)gsp->st_hash_buckets); - dl("Total number of times hash chains searched for a page.\n", - (u_long)gsp->st_hash_searches); - dl("The longest hash chain searched for a page.\n", - (u_long)gsp->st_hash_longest); - dl("Total number of hash buckets examined for page location.\n", - (u_long)gsp->st_hash_examined); - dl("The number of region locks granted without waiting.\n", - (u_long)gsp->st_region_nowait); - dl("The number of region locks granted after waiting.\n", - (u_long)gsp->st_region_wait); - - for (; fsp != NULL && *fsp != NULL; ++fsp) { - printf("%s\n", DB_LINE); - printf("%s\n", (*fsp)->file_name); - dl("Page size.\n", (u_long)(*fsp)->st_pagesize); - dl("Requested pages found in the cache", - (u_long)(*fsp)->st_cache_hit); - if ((*fsp)->st_cache_hit + (*fsp)->st_cache_miss != 0) - printf(" (%.0f%%)", ((double)(*fsp)->st_cache_hit / - ((*fsp)->st_cache_hit + (*fsp)->st_cache_miss)) * - 100); - printf(".\n"); - dl("Requested pages mapped into the process' address space.\n", - (u_long)(*fsp)->st_map); - dl("Requested pages not found in the cache.\n", - (u_long)(*fsp)->st_cache_miss); - dl("Pages created in the cache.\n", - (u_long)(*fsp)->st_page_create); - dl("Pages read into the cache.\n", - (u_long)(*fsp)->st_page_in); - dl("Pages written from the cache to the backing file.\n", - (u_long)(*fsp)->st_page_out); - } -} - -/* - * txn_stats -- - * Display transaction statistics. - */ -void -txn_stats(dbenv) - DB_ENV *dbenv; -{ - DB_TXN_STAT *sp; - u_int32_t i; - const char *p; - - if (txn_stat(dbenv->tx_info, &sp, NULL)) - err(1, NULL); - - dl("Txn region reference count.\n", (u_long)sp->st_refcnt); - dl("Txn region size.\n", (u_long)sp->st_regsize); - p = sp->st_last_ckp.file == 0 ? - "No checkpoint LSN." : "File/offset for last checkpoint LSN."; - printf("%lu/%lu\t%s\n", - (u_long)sp->st_last_ckp.file, (u_long)sp->st_last_ckp.offset, p); - p = sp->st_pending_ckp.file == 0 ? - "No pending checkpoint LSN." : - "File/offset for last pending checkpoint LSN."; - printf("%lu/%lu\t%s\n", - (u_long)sp->st_pending_ckp.file, - (u_long)sp->st_pending_ckp.offset, p); - if (sp->st_time_ckp == 0) - printf("0\tNo checkpoint timestamp.\n"); - else - printf("%.24s\tCheckpoint timestamp.\n", - ctime(&sp->st_time_ckp)); - printf("%lx\tLast transaction ID allocated.\n", - (u_long)sp->st_last_txnid); - dl("Maximum number of active transactions.\n", (u_long)sp->st_maxtxns); - dl("Number of transactions begun.\n", (u_long)sp->st_nbegins); - dl("Number of transactions aborted.\n", (u_long)sp->st_naborts); - dl("Number of transactions committed.\n", (u_long)sp->st_ncommits); - dl("The number of region locks granted without waiting.\n", - (u_long)sp->st_region_nowait); - dl("The number of region locks granted after waiting.\n", - (u_long)sp->st_region_wait); - dl("Active transactions.\n", (u_long)sp->st_nactive); - qsort(sp->st_txnarray, - sp->st_nactive, sizeof(sp->st_txnarray[0]), txn_compare); - for (i = 0; i < sp->st_nactive; ++i) - printf("\tid: %lx; initial LSN file/offest %lu/%lu\n", - (u_long)sp->st_txnarray[i].txnid, - (u_long)sp->st_txnarray[i].lsn.file, - (u_long)sp->st_txnarray[i].lsn.offset); -} - -int -txn_compare(a1, b1) - const void *a1, *b1; -{ - const DB_TXN_ACTIVE *a, *b; - - a = a1; - b = b1; - - if (a->txnid > b->txnid) - return (1); - if (a->txnid < b->txnid) - return (-1); - return (0); -} - -/* - * dl -- - * Display a big value. - */ -void -dl(msg, value) - const char *msg; - u_long value; -{ - /* - * Two formats: if less than 10 million, display as the number, if - * greater than 10 million display as ###M. - */ - if (value < 10000000) - printf("%lu\t%s", value, msg); - else - printf("%luM\t%s", value / 1000000, msg); -} - -/* - * prflags -- - * Print out flag values. - */ -void -prflags(flags, fnp) - u_int32_t flags; - const FN *fnp; -{ - const char *sep; - - sep = " "; - printf("Flags:"); - for (; fnp->mask != 0; ++fnp) - if (fnp->mask & flags) { - printf("%s%s", sep, fnp->name); - sep = ", "; - } - printf("\n"); -} - -/* - * db_init -- - * Initialize the environment. - */ -DB_ENV * -db_init(home, ttype) - char *home; - test_t ttype; -{ - DB_ENV *dbenv; - u_int32_t flags; - - if ((dbenv = (DB_ENV *)malloc(sizeof(DB_ENV))) == NULL) { - errno = ENOMEM; - err(1, NULL); - } - - /* - * Try and use the shared regions when reporting statistics on the - * DB databases, so our information is as up-to-date as possible, - * even if the mpool cache hasn't been flushed. If that fails, we - * turn off the DB_INIT_MPOOL flag and try again. - */ - flags = DB_USE_ENVIRON; - switch (ttype) { - case T_DB: - case T_MPOOL: - LF_SET(DB_INIT_MPOOL); - break; - case T_LOCK: - LF_SET(DB_INIT_LOCK); - break; - case T_LOG: - LF_SET(DB_INIT_LOG); - break; - case T_TXN: - LF_SET(DB_INIT_TXN); - break; - case T_NOTSET: - abort(); - /* NOTREACHED */ - } - - /* - * If it works, we're done. Set the error output options so that - * future errors are correctly reported. - */ - memset(dbenv, 0, sizeof(*dbenv)); - if ((errno = db_appinit(home, NULL, dbenv, flags)) == 0) { - dbenv->db_errfile = stderr; - dbenv->db_errpfx = progname; - return (dbenv); - } - - /* Turn off the DB_INIT_MPOOL flag if it's a database. */ - if (ttype == T_DB) - LF_CLR(DB_INIT_MPOOL); - - /* Set the error output options -- this time we want a message. */ - memset(dbenv, 0, sizeof(*dbenv)); - dbenv->db_errfile = stderr; - dbenv->db_errpfx = progname; - - /* Try again, and it's fatal if we fail. */ - if ((errno = db_appinit(home, NULL, dbenv, flags)) != 0) - err(1, "db_appinit"); - - return (dbenv); -} - -/* - * argcheck -- - * Return if argument flags are okay. - */ -int -argcheck(arg, ok_args) - char *arg; - const char *ok_args; -{ - for (; *arg != '\0'; ++arg) - if (strchr(ok_args, *arg) == NULL) - return (0); - return (1); -} - -/* - * nosig -- - * We don't want to be interrupted. - */ -void -nosig() -{ -#ifdef SIGHUP - (void)signal(SIGHUP, SIG_IGN); -#endif - (void)signal(SIGINT, SIG_IGN); - (void)signal(SIGTERM, SIG_IGN); -} - -void -usage() -{ - fprintf(stderr, - "usage: db_stat [-clmNt] [-C Acflmo] [-d file] [-h home] [-M Ahlm]\n"); - exit (1); -} |