diff --git a/storage/rocksdb/ha_rocksdb.cc b/storage/rocksdb/ha_rocksdb.cc index 09635272747..2fcd729af6d 100644 --- a/storage/rocksdb/ha_rocksdb.cc +++ b/storage/rocksdb/ha_rocksdb.cc @@ -600,6 +600,7 @@ static unsigned long // NOLINT(runtime/int) rocksdb_persistent_cache_size_mb; static ulong rocksdb_info_log_level; static char *rocksdb_wal_dir; +static char *rocksdb_log_dir; static char *rocksdb_persistent_cache_path; static ulong rocksdb_index_type; static uint32_t rocksdb_flush_log_at_trx_commit; @@ -1316,6 +1317,11 @@ static MYSQL_SYSVAR_STR(wal_dir, rocksdb_wal_dir, "DBOptions::wal_dir for RocksDB", nullptr, nullptr, rocksdb_db_options->wal_dir.c_str()); +static MYSQL_SYSVAR_STR(log_dir, rocksdb_log_dir, + PLUGIN_VAR_RQCMDARG | PLUGIN_VAR_READONLY, + "DBOptions::db_log_dir for RocksDB", nullptr, nullptr, + rocksdb_db_options->db_log_dir.c_str()); + static MYSQL_SYSVAR_STR( persistent_cache_path, rocksdb_persistent_cache_path, PLUGIN_VAR_RQCMDARG | PLUGIN_VAR_READONLY, @@ -2041,6 +2047,7 @@ static struct st_mysql_sys_var *rocksdb_system_variables[] = { MYSQL_SYSVAR(max_total_wal_size), MYSQL_SYSVAR(use_fsync), MYSQL_SYSVAR(wal_dir), + MYSQL_SYSVAR(log_dir), MYSQL_SYSVAR(persistent_cache_path), MYSQL_SYSVAR(persistent_cache_size_mb), MYSQL_SYSVAR(delete_obsolete_files_period_micros), @@ -5381,7 +5388,7 @@ static int rocksdb_init_func(void *const p) { rocksdb::NewGenericRateLimiter(rocksdb_rate_limiter_bytes_per_sec)); rocksdb_db_options->rate_limiter = rocksdb_rate_limiter; } - + rocksdb_db_options->db_log_dir = rocksdb_log_dir; rocksdb_db_options->delayed_write_rate = rocksdb_delayed_write_rate; std::shared_ptr myrocks_logger = std::make_shared(); diff --git a/storage/rocksdb/mysql-test/rocksdb/r/rocksdb.result b/storage/rocksdb/mysql-test/rocksdb/r/rocksdb.result index 2dc3d02d4b1..ff68369c389 100644 --- a/storage/rocksdb/mysql-test/rocksdb/r/rocksdb.result +++ b/storage/rocksdb/mysql-test/rocksdb/r/rocksdb.result @@ -942,6 +942,7 @@ rocksdb_keep_log_file_num 1000 rocksdb_large_prefix OFF rocksdb_lock_scanned_rows OFF rocksdb_lock_wait_timeout 1 +rocksdb_log_dir rocksdb_log_file_time_to_roll 0 rocksdb_manifest_preallocation_size 4194304 rocksdb_manual_compaction_threads 0 diff --git a/storage/rocksdb/mysql-test/rocksdb/r/rocksdb_log_dir.result b/storage/rocksdb/mysql-test/rocksdb/r/rocksdb_log_dir.result new file mode 100644 index 00000000000..33f2e9f497c --- /dev/null +++ b/storage/rocksdb/mysql-test/rocksdb/r/rocksdb_log_dir.result @@ -0,0 +1,8 @@ +CREATE DATABASE mysqltest; +USE mysqltest; +CREATE TABLE t1 (a INT PRIMARY KEY); +INSERT INTO t1 VALUES(42); +DROP TABLE t1; +DROP DATABASE mysqltest; +Check for MyRocks info LOG files +db_LOG diff --git a/storage/rocksdb/mysql-test/rocksdb/t/rocksdb_log_dir.opt b/storage/rocksdb/mysql-test/rocksdb/t/rocksdb_log_dir.opt new file mode 100644 index 00000000000..8e5da2c042c --- /dev/null +++ b/storage/rocksdb/mysql-test/rocksdb/t/rocksdb_log_dir.opt @@ -0,0 +1,2 @@ +--plugin-load=$HA_ROCKSDB_SO --default-storage-engine=rocksdb --rocksdb_log_dir=$MYSQL_TMP_DIR + diff --git a/storage/rocksdb/mysql-test/rocksdb/t/rocksdb_log_dir.test b/storage/rocksdb/mysql-test/rocksdb/t/rocksdb_log_dir.test new file mode 100644 index 00000000000..4932011a38c --- /dev/null +++ b/storage/rocksdb/mysql-test/rocksdb/t/rocksdb_log_dir.test @@ -0,0 +1,15 @@ +--source include/have_rocksdb.inc + +CREATE DATABASE mysqltest; +USE mysqltest; +CREATE TABLE t1 (a INT PRIMARY KEY); +INSERT INTO t1 VALUES(42); +DROP TABLE t1; +DROP DATABASE mysqltest; + +--echo Check for MyRocks info LOG files +--replace_regex /.*LOG/db_LOG/ +--list_files $MYSQL_TMP_DIR *LOG + +# Clean up +remove_files_wildcard $MYSQL_TMP_DIR *LOG; diff --git a/storage/rocksdb/mysql-test/rocksdb_sys_vars/r/rocksdb_log_dir_basic.result b/storage/rocksdb/mysql-test/rocksdb_sys_vars/r/rocksdb_log_dir_basic.result new file mode 100644 index 00000000000..b5caf639850 --- /dev/null +++ b/storage/rocksdb/mysql-test/rocksdb_sys_vars/r/rocksdb_log_dir_basic.result @@ -0,0 +1,7 @@ +SET @start_global_value = @@global.ROCKSDB_LOG_DIR; +SELECT @start_global_value; +@start_global_value + +"Trying to set variable @@global.ROCKSDB_LOG_DIR to 444. It should fail because it is readonly." +SET @@global.ROCKSDB_LOG_DIR = 444; +ERROR HY000: Variable 'rocksdb_log_dir' is a read only variable diff --git a/storage/rocksdb/mysql-test/rocksdb_sys_vars/t/rocksdb_log_dir_basic.test b/storage/rocksdb/mysql-test/rocksdb_sys_vars/t/rocksdb_log_dir_basic.test new file mode 100644 index 00000000000..b8ab9c18e70 --- /dev/null +++ b/storage/rocksdb/mysql-test/rocksdb_sys_vars/t/rocksdb_log_dir_basic.test @@ -0,0 +1,6 @@ +--source include/have_rocksdb.inc + +--let $sys_var=ROCKSDB_LOG_DIR +--let $read_only=1 +--let $session=0 +--source include/rocksdb_sys_var.inc