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 /src/log/log_method.c | |
parent | 7a2660ba9cc2dc03a69ddfcfd95369395cc87444 (diff) | |
download | berkeleydb-db-6.1.23.tar.gz |
Diffstat (limited to 'src/log/log_method.c')
-rw-r--r-- | src/log/log_method.c | 35 |
1 files changed, 29 insertions, 6 deletions
diff --git a/src/log/log_method.c b/src/log/log_method.c index d5aec116..09fbe863 100644 --- a/src/log/log_method.c +++ b/src/log/log_method.c @@ -1,7 +1,7 @@ /*- * See the file LICENSE for redistribution information. * - * Copyright (c) 1999, 2012 Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 2015 Oracle and/or its affiliates. All rights reserved. * * $Id$ */ @@ -342,6 +342,10 @@ __log_get_flags(dbenv, flagsp) LF_SET(DB_LOG_IN_MEMORY); else LF_CLR(DB_LOG_IN_MEMORY); + if (lp->nosync) + LF_SET(DB_LOG_NOSYNC); + else + LF_CLR(DB_LOG_NOSYNC); *flagsp = flags; } @@ -369,6 +373,8 @@ __log_set_flags(env, flags, on) lp->db_log_autoremove = on ? 1 : 0; if (LF_ISSET(DB_LOG_IN_MEMORY)) lp->db_log_inmemory = on ? 1 : 0; + if (LF_ISSET(DB_LOG_NOSYNC)) + lp->nosync = on ? 1 : 0; } /* @@ -377,13 +383,15 @@ __log_set_flags(env, flags, on) */ #undef OK_FLAGS #define OK_FLAGS \ - (DB_LOG_AUTO_REMOVE | DB_LOG_DIRECT | \ - DB_LOG_DSYNC | DB_LOG_IN_MEMORY | DB_LOG_ZERO) + (DB_LOG_AUTO_REMOVE | DB_LOG_BLOB | DB_LOG_DIRECT | \ + DB_LOG_DSYNC | DB_LOG_IN_MEMORY | DB_LOG_NOSYNC | DB_LOG_ZERO) static const FLAG_MAP LogMap[] = { { DB_LOG_AUTO_REMOVE, DBLOG_AUTOREMOVE}, + { DB_LOG_BLOB, DBLOG_BLOB}, { DB_LOG_DIRECT, DBLOG_DIRECT}, { DB_LOG_DSYNC, DBLOG_DSYNC}, { DB_LOG_IN_MEMORY, DBLOG_INMEMORY}, + { DB_LOG_NOSYNC, DBLOG_NOSYNC}, { DB_LOG_ZERO, DBLOG_ZERO} }; /* @@ -406,10 +414,14 @@ __log_get_config(dbenv, which, onp) if (FLD_ISSET(which, ~OK_FLAGS)) return (__db_ferr(env, "DB_ENV->log_get_config", 0)); dblp = env->lg_handle; - ENV_REQUIRES_CONFIG(env, dblp, "DB_ENV->log_get_config", DB_INIT_LOG); + ENV_NOT_CONFIGURED(env, dblp, "DB_ENV->log_get_config", DB_INIT_LOG); + + if (LOGGING_ON(env)) { + __env_fetch_flags(LogMap, sizeof(LogMap), &dblp->flags, &flags); + __log_get_flags(dbenv, &flags); + } else + flags = dbenv->lg_flags; - __env_fetch_flags(LogMap, sizeof(LogMap), &dblp->flags, &flags); - __log_get_flags(dbenv, &flags); if (LF_ISSET(which)) *onp = 1; else @@ -459,6 +471,17 @@ __log_set_config_int(dbenv, flags, on, in_open) "DB_ENV->log_set_config: direct I/O either not configured or not supported"); return (EINVAL); } + if (REP_ON(env) && LF_ISSET(DB_LOG_BLOB) && !on) { + __db_errx(env, +"DB_ENV->log_set_config: DB_LOG_BLOB must be enabled with replication."); + return (EINVAL); + } + if (FLD_ISSET(flags, DB_LOG_IN_MEMORY) && on > 0 && + PREFMAS_IS_SET(env)) { + __db_errx(env, DB_STR("2587", "DB_LOG_IN_MEMORY is not " + "supported in Replication Manager preferred master mode")); + return (EINVAL); + } if (LOGGING_ON(env)) { if (!in_open && LF_ISSET(DB_LOG_IN_MEMORY) && |