feat: add an env to enable or disable block cache of an app (#792)
diff --git a/rdsn b/rdsn
index 7e3eab7..e3e24f7 160000
--- a/rdsn
+++ b/rdsn
@@ -1 +1 @@
-Subproject commit 7e3eab786fb5e0675d84eac22d5508b03538d5f4
+Subproject commit e3e24f7fd4d05ba8241beb8dab42ca072dbc3d11
diff --git a/src/base/pegasus_const.cpp b/src/base/pegasus_const.cpp
index d78e7b7..1a72bc6 100644
--- a/src/base/pegasus_const.cpp
+++ b/src/base/pegasus_const.cpp
@@ -85,6 +85,9 @@
/// table level slow query
const std::string ROCKSDB_ENV_SLOW_QUERY_THRESHOLD("replica.slow_query_threshold");
+/// enable or disable block cache of app
+const std::string ROCKSDB_BLOCK_CACHE_ENABLED("replica.rocksdb_block_cache_enabled");
+
/// time threshold of each rocksdb iteration
const std::string
ROCKSDB_ITERATION_THRESHOLD_TIME_MS("replica.rocksdb_iteration_threshold_time_ms");
diff --git a/src/base/pegasus_const.h b/src/base/pegasus_const.h
index 217171a..c0eb973 100644
--- a/src/base/pegasus_const.h
+++ b/src/base/pegasus_const.h
@@ -63,6 +63,8 @@
extern const std::string ROCKSDB_ITERATION_THRESHOLD_TIME_MS;
+extern const std::string ROCKSDB_BLOCK_CACHE_ENABLED;
+
extern const std::string SPLIT_VALIDATE_PARTITION_HASH;
extern const std::string USER_SPECIFIED_COMPACTION;
diff --git a/src/server/pegasus_server_impl.cpp b/src/server/pegasus_server_impl.cpp
index 637a6dc..0779b6c 100644
--- a/src/server/pegasus_server_impl.cpp
+++ b/src/server/pegasus_server_impl.cpp
@@ -2558,6 +2558,28 @@
}
}
+void pegasus_server_impl::update_rocksdb_block_cache_enabled(
+ const std::map<std::string, std::string> &envs)
+{
+ // default of ReadOptions:fill_cache is true
+ bool cache_enabled = true;
+ auto find = envs.find(ROCKSDB_BLOCK_CACHE_ENABLED);
+ if (find != envs.end()) {
+ if (!dsn::buf2bool(find->second, cache_enabled)) {
+ derror_replica("{}={} is invalid.", find->first, find->second);
+ return;
+ }
+ }
+
+ if (_data_cf_rd_opts.fill_cache != cache_enabled) {
+ ddebug_replica("update app env[{}] from \"{}\" to \"{}\" succeed",
+ ROCKSDB_BLOCK_CACHE_ENABLED,
+ _data_cf_rd_opts.fill_cache,
+ cache_enabled);
+ _data_cf_rd_opts.fill_cache = cache_enabled;
+ }
+}
+
void pegasus_server_impl::update_validate_partition_hash(
const std::map<std::string, std::string> &envs)
{
diff --git a/src/server/pegasus_server_impl.h b/src/server/pegasus_server_impl.h
index 48613f3..f7a68cf 100644
--- a/src/server/pegasus_server_impl.h
+++ b/src/server/pegasus_server_impl.h
@@ -269,6 +269,8 @@
void update_rocksdb_iteration_threshold(const std::map<std::string, std::string> &envs);
+ void update_rocksdb_block_cache_enabled(const std::map<std::string, std::string> &envs);
+
void update_validate_partition_hash(const std::map<std::string, std::string> &envs);
void update_user_specified_compaction(const std::map<std::string, std::string> &envs);