diff options
author | Rich Prohaska <prohaska@tokutek.com> | 2013-10-14 14:32:35 -0400 |
---|---|---|
committer | Rich Prohaska <prohaska@tokutek.com> | 2013-10-14 14:32:35 -0400 |
commit | 293a684e92cfe3db9a11497ed6da1b5a2be063ce (patch) | |
tree | 0f44f64d5ae643d3d2edace949964869f730328d | |
parent | 1ed8c69b011535373c035134da9defa8a2f057fb (diff) | |
download | mariadb-git-293a684e92cfe3db9a11497ed6da1b5a2be063ce.tar.gz |
#87 add callback to allow loader memory size to be a session variabletokumx-1.3.0-rc.1tokumx-1.3.0-rc.0
-rw-r--r-- | buildheader/make_tdb.cc | 2 | ||||
-rw-r--r-- | src/loader.cc | 6 | ||||
-rw-r--r-- | src/tests/env_loader_memory.cc | 9 | ||||
-rw-r--r-- | src/ydb-internal.h | 2 | ||||
-rw-r--r-- | src/ydb.cc | 9 |
5 files changed, 19 insertions, 9 deletions
diff --git a/buildheader/make_tdb.cc b/buildheader/make_tdb.cc index 9b279aa6095..dfa17bdecda 100644 --- a/buildheader/make_tdb.cc +++ b/buildheader/make_tdb.cc @@ -459,7 +459,7 @@ static void print_db_env_struct (void) { "void (*change_fsync_log_period) (DB_ENV*, uint32_t)", "int (*iterate_live_transactions) (DB_ENV *env, iterate_transactions_callback callback, void *extra)", "int (*iterate_pending_lock_requests) (DB_ENV *env, iterate_requests_callback callback, void *extra)", - "void (*set_loader_memory_size)(DB_ENV *env, uint64_t loader_memory_size)", + "void (*set_loader_memory_size)(DB_ENV *env, uint64_t (*get_loader_memory_size_callback)(void))", "uint64_t (*get_loader_memory_size)(DB_ENV *env)", NULL}; diff --git a/src/loader.cc b/src/loader.cc index 57beee3810f..93ac551632e 100644 --- a/src/loader.cc +++ b/src/loader.cc @@ -319,8 +319,8 @@ toku_loader_create_loader(DB_ENV *env, } TOKUTXN ttxn = txn ? db_txn_struct_i(txn)->tokutxn : NULL; rval = toku_ft_loader_open(&loader->i->ft_loader, - loader->i->env->i->cachetable, - loader->i->env->i->generate_row_for_put, + env->i->cachetable, + env->i->generate_row_for_put, src_db, N, brts, dbs, @@ -330,7 +330,7 @@ toku_loader_create_loader(DB_ENV *env, load_lsn, ttxn, puts_allowed, - loader->i->env->i->loader_memory_size, + env->get_loader_memory_size(env), compress_intermediates); if ( rval!=0 ) { toku_free(new_inames_in_env); diff --git a/src/tests/env_loader_memory.cc b/src/tests/env_loader_memory.cc index 1cbdc1b16f5..106bdefd3a9 100644 --- a/src/tests/env_loader_memory.cc +++ b/src/tests/env_loader_memory.cc @@ -91,14 +91,21 @@ PATENT RIGHTS GRANT: #include "test.h" #include <db.h> +static uint64_t my_loader_memory_size; + +static uint64_t get_loader_memory_size(void) { + return my_loader_memory_size; +} + int test_main (int argc, char * const argv[]) { parse_args(argc, argv); int r; DB_ENV *env; r = db_env_create(&env, 0); assert_zero(r); + env->set_loader_memory_size(env, get_loader_memory_size); for (uint64_t n = 0 ; n < 10000000000; n += 1000000000) { - env->set_loader_memory_size(env, n); + my_loader_memory_size = n; assert(env->get_loader_memory_size(env) == n); } r = env->close(env, 0); diff --git a/src/ydb-internal.h b/src/ydb-internal.h index fe1113d2c0d..bcb3d63badc 100644 --- a/src/ydb-internal.h +++ b/src/ydb-internal.h @@ -182,7 +182,7 @@ struct __toku_db_env_internal { int datadir_lockfd; int logdir_lockfd; int tmpdir_lockfd; - uint64_t loader_memory_size; + uint64_t (*get_loader_memory_size_callback)(void); }; // test-only environment function for running lock escalation diff --git a/src/ydb.cc b/src/ydb.cc index dc8ec6c7ffa..4bb2e37c193 100644 --- a/src/ydb.cc +++ b/src/ydb.cc @@ -2416,12 +2416,15 @@ env_iterate_live_transactions(DB_ENV *env, return toku_txn_manager_iter_over_live_root_txns(txn_manager, iter_txns_callback, &e); } -static void env_set_loader_memory_size(DB_ENV *env, uint64_t loader_memory_size) { - env->i->loader_memory_size = loader_memory_size; +static void env_set_loader_memory_size(DB_ENV *env, uint64_t (*get_loader_memory_size_callback)(void)) { + env->i->get_loader_memory_size_callback = get_loader_memory_size_callback; } static uint64_t env_get_loader_memory_size(DB_ENV *env) { - return env->i->loader_memory_size; + uint64_t memory_size = 0; + if (env->i->get_loader_memory_size_callback) + memory_size = env->i->get_loader_memory_size_callback(); + return memory_size; } static int |