diff options
author | Lorry Tar Creator <lorry-tar-importer@baserock.org> | 2015-02-17 17:25:57 +0000 |
---|---|---|
committer | <> | 2015-03-17 16:26:24 +0000 |
commit | 780b92ada9afcf1d58085a83a0b9e6bc982203d1 (patch) | |
tree | 598f8b9fa431b228d29897e798de4ac0c1d3d970 /util/db_printlog.c | |
parent | 7a2660ba9cc2dc03a69ddfcfd95369395cc87444 (diff) | |
download | berkeleydb-master.tar.gz |
Diffstat (limited to 'util/db_printlog.c')
-rw-r--r-- | util/db_printlog.c | 122 |
1 files changed, 109 insertions, 13 deletions
diff --git a/util/db_printlog.c b/util/db_printlog.c index 03a8f375..fa10de88 100644 --- a/util/db_printlog.c +++ b/util/db_printlog.c @@ -1,7 +1,7 @@ /*- * See the file LICENSE for redistribution information. * - * Copyright (c) 1996, 2012 Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1996, 2015 Oracle and/or its affiliates. All rights reserved. * * $Id$ */ @@ -21,7 +21,7 @@ #ifndef lint static const char copyright[] = - "Copyright (c) 1996, 2012 Oracle and/or its affiliates. All rights reserved.\n"; + "Copyright (c) 1996, 2015 Oracle and/or its affiliates. All rights reserved.\n"; #endif int db_printlog_print_app_record __P((DB_ENV *, DBT *, DB_LSN *, db_recops)); @@ -30,6 +30,9 @@ int env_init_print_42 __P((ENV *, DB_DISTAB *)); int env_init_print_43 __P((ENV *, DB_DISTAB *)); int env_init_print_47 __P((ENV *, DB_DISTAB *)); int env_init_print_48 __P((ENV *, DB_DISTAB *)); +int env_init_print_53 __P((ENV *, DB_DISTAB *)); +int env_init_print_60 __P((ENV *, DB_DISTAB *)); +int env_init_print_61 __P((ENV *, DB_DISTAB *)); int lsn_arg __P((char *, DB_LSN *)); int main __P((int, char *[])); int open_rep_db __P((DB_ENV *, DB **, DBC **)); @@ -152,9 +155,6 @@ main(argc, argv) dbenv->set_errpfx(dbenv, progname); dbenv->set_msgfile(dbenv, stdout); - if (data_len != NULL) - (void)dbenv->set_data_len(dbenv, (u_int32_t)atol(data_len)); - if (nflag) { if ((ret = dbenv->set_flags(dbenv, DB_NOLOCKING, 1)) != 0) { dbenv->err(dbenv, ret, "set_flags: DB_NOLOCKING"); @@ -192,7 +192,7 @@ main(argc, argv) if (repflag) { if ((ret = dbenv->open(dbenv, home, DB_INIT_MPOOL | DB_USE_ENVIRON, 0)) != 0 && - (ret == DB_VERSION_MISMATCH || + (ret == DB_VERSION_MISMATCH || ret == DB_REP_LOCKOUT || (ret = dbenv->open(dbenv, home, DB_CREATE | DB_INIT_MPOOL | DB_PRIVATE | DB_USE_ENVIRON, 0)) != 0)) { @@ -200,12 +200,23 @@ main(argc, argv) goto err; } } else if ((ret = dbenv->open(dbenv, home, DB_USE_ENVIRON, 0)) != 0 && - (ret == DB_VERSION_MISMATCH || + (ret == DB_VERSION_MISMATCH || ret == DB_REP_LOCKOUT || (ret = dbenv->open(dbenv, home, DB_CREATE | DB_INIT_LOG | DB_PRIVATE | DB_USE_ENVIRON, 0)) != 0)) { dbenv->err(dbenv, ret, "DB_ENV->open"); goto err; } + + /* + * Set data_len after environment opens. The value passed + * by -D takes priority. + */ + if (data_len != NULL && (ret = dbenv->set_data_len(dbenv, + (u_int32_t)atol(data_len))) != 0) { + dbenv->err(dbenv, ret, "set_data_len"); + goto err; + } + env = dbenv->env; /* Allocate a log cursor. */ @@ -348,6 +359,8 @@ err: exitval = 1; /* * env_init_print -- + * + * Fill the dispatch table for printing this log version's records. */ int env_init_print(env, version, dtabp) @@ -391,11 +404,25 @@ env_init_print(env, version, dtabp) if ((ret = __txn_init_print(env, dtabp)) != 0) goto err; + if (version == DB_LOGVERSION) + goto done; + + /* DB_LOGVERSION_60p1 changed the fop_write_file log. */ + if (version > DB_LOGVERSION_60) + goto done; + if ((ret = env_init_print_60(env, dtabp)) != 0) + goto err; + + /* DB_LOGVERSION_53 changed the heap addrem log record. */ + if (version > DB_LOGVERSION_53) + goto done; + if ((ret = env_init_print_53(env, dtabp)) != 0) + goto err; /* - * There are no log differences between 5.0 and 5.2, but 5.2 - * is a superset of 5.0. Patch 2 of 4.8 added __db_pg_trunc - * but didn't alter any log records so we want the same - * override as 4.8 + * Since DB_LOGVERSION_53 is a strict superset of DB_LOGVERSION_50, + * there is no need to check for log version between them; so only + * check > DB_LOGVERSION_48p2. Patch 2 of 4.8 added __db_pg_trunc but + * didn't alter any log records so we want the same override as 4.8. */ if (version > DB_LOGVERSION_48p2) goto done; @@ -557,10 +584,79 @@ err: } int +env_init_print_53(env, dtabp) + ENV *env; + DB_DISTAB *dtabp; +{ + int ret; +#ifdef HAVE_HEAP + ret = __db_add_recovery_int(env, + dtabp,__heap_addrem_50_print, DB___heap_addrem_50); +#else + COMPQUIET(env, NULL); + COMPQUIET(dtabp, NULL); + COMPQUIET(ret, 0); +#endif + return (ret); +} + +int +env_init_print_60(env, dtabp) + ENV *env; + DB_DISTAB *dtabp; +{ + int ret; + + if ((ret = __db_add_recovery_int(env, &env->recover_dtab, + __fop_create_60_print, DB___fop_create_60)) != 0) + goto err; + + if ((ret = __db_add_recovery_int(env, dtabp, + __fop_remove_60_print, DB___fop_remove_60)) != 0) + goto err; + + if ((ret = __db_add_recovery_int(env, dtabp, + __fop_rename_60_print, DB___fop_rename_60)) != 0) + goto err; + + if ((ret = __db_add_recovery_int(env, dtabp, + __fop_rename_60_print, DB___fop_rename_noundo_60)) != 0) + goto err; + + if ((ret = __db_add_recovery_int(env, dtabp, + __fop_file_remove_60_print, DB___fop_file_remove_60)) != 0) + goto err; + + if ((ret = __db_add_recovery_int(env, dtabp, + __fop_write_60_print, DB___fop_write_60)) != 0) + goto err; + + if ((ret = __db_add_recovery_int(env, dtabp, + __fop_write_file_60_print, DB___fop_write_file_60)) != 0) + goto err; + +err: return (ret); +} + +int +env_init_print_61(env, dtabp) + ENV *env; + DB_DISTAB *dtabp; +{ + int ret; + + ret = __db_add_recovery_int(env, + dtabp,__dbreg_register_42_print, DB___dbreg_register_42); + + return (ret); +} + +int usage() { - fprintf(stderr, "usage: %s %s\n", progname, - "[-NrV] [-b file/offset] [-e file/offset] [-h home] [-P password]"); + fprintf(stderr, "usage: %s %s%s\n", progname, + "[-NrV] [-b file/offset] [-D data_len] ", + "[-e file/offset] [-h home] [-P password]"); return (EXIT_FAILURE); } |