summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--buildheader/make_tdb.cc2
-rw-r--r--src/loader.cc6
-rw-r--r--src/tests/env_loader_memory.cc9
-rw-r--r--src/ydb-internal.h2
-rw-r--r--src/ydb.cc9
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