From 8b95e4e709a8b612900c5a76f0f5a2d91598ac65 Mon Sep 17 00:00:00 2001 From: chejinge Date: Thu, 14 Dec 2023 18:09:58 +0800 Subject: [PATCH] fix:cache support config rewrite --- include/pika_conf.h | 6 +++++ src/pika_admin.cc | 63 +++++++++++++++++++++++++++++++++++++++++++++ src/pika_command.cc | 1 - src/pika_conf.cc | 11 ++++++++ 4 files changed, 80 insertions(+), 1 deletion(-) diff --git a/include/pika_conf.h b/include/pika_conf.h index e65cd9a132..1241f5f4d7 100644 --- a/include/pika_conf.h +++ b/include/pika_conf.h @@ -611,6 +611,12 @@ class PikaConf : public pstd::BaseConf { max_rsync_parallel_num_ = value; } + const std::string scache_type() { + std::lock_guard l(rwlock_); + return pstd::StringConcat(cache_type_, COMMA); + } + + void SetCacheType(const std::string &value); void SetCacheDisableFlag() { tmp_cache_disable_flag_ = true; } int zset_cache_start_pos() { return zset_cache_start_pos_; } diff --git a/src/pika_admin.cc b/src/pika_admin.cc index 859fce548b..d210558d13 100644 --- a/src/pika_admin.cc +++ b/src/pika_admin.cc @@ -2049,6 +2049,60 @@ void ConfigCmd::ConfigGet(std::string& ret) { EncodeString(&config_body, g_pika_conf->replication_id()); } + if (pstd::stringmatch(pattern.data(), "cache-num", 1)) { + elements += 2; + EncodeString(&config_body, "cache-num"); + EncodeNumber(&config_body, g_pika_conf->GetCacheNum()); + } + + if (pstd::stringmatch(pattern.data(), "cache-model", 1)) { + elements += 2; + EncodeString(&config_body, "cache-model"); + EncodeNumber(&config_body, g_pika_conf->cache_model()); + } + + if (pstd::stringmatch(pattern.data(), "cache-type", 1)) { + elements += 2; + EncodeString(&config_body, "cache-type"); + EncodeString(&config_body, g_pika_conf->scache_type()); + } + + if (pstd::stringmatch(pattern.data(), "cache-start-direction", 1)) { + elements += 2; + EncodeString(&config_body, "cache-start-direction"); + EncodeNumber(&config_body, g_pika_conf->zset_cache_start_pos()); + } + + if (pstd::stringmatch(pattern.data(), "cache-items-per-key", 1)) { + elements += 2; + EncodeString(&config_body, "cache-items-per-key"); + EncodeNumber(&config_body, g_pika_conf->zset_cache_field_num_per_key()); + } + + if (pstd::stringmatch(pattern.data(), "cache-maxmemory", 1)) { + elements += 2; + EncodeString(&config_body, "cache-maxmemory"); + EncodeNumber(&config_body, g_pika_conf->cache_maxmemory()); + } + + if (pstd::stringmatch(pattern.data(), "cache-maxmemory-policy", 1)) { + elements += 2; + EncodeString(&config_body, "cache-maxmemory-policy"); + EncodeNumber(&config_body, g_pika_conf->cache_maxmemory_policy()); + } + + if (pstd::stringmatch(pattern.data(), "cache-maxmemory-samples", 1)) { + elements += 2; + EncodeString(&config_body, "cache-maxmemory-samples"); + EncodeNumber(&config_body, g_pika_conf->cache_maxmemory_samples()); + } + + if (pstd::stringmatch(pattern.data(), "cache-lfu-decay-time", 1)) { + elements += 2; + EncodeString(&config_body, "cache-lfu-decay-time"); + EncodeNumber(&config_body, g_pika_conf->cache_lfu_decay_time()); + } + std::stringstream resp; resp << "*" << std::to_string(elements) << "\r\n" << config_body; ret = resp.str(); @@ -2095,6 +2149,15 @@ void ConfigCmd::ConfigSet(std::string& ret, std::shared_ptr slot) { EncodeString(&ret, "arena-block-size"); EncodeString(&ret, "throttle-bytes-per-second"); EncodeString(&ret, "max-rsync-parallel-num"); + EncodeString(&ret, "cache-num"); + EncodeString(&ret, "cache-model"); + EncodeString(&ret, "cache-type"); + EncodeString(&ret, "zset-cache-start-direction"); + EncodeString(&ret, "cache-items-per-key"); + EncodeString(&ret, "cache-maxmemory"); + EncodeString(&ret, "cache-maxmemory-policy"); + EncodeString(&ret, "cache-maxmemory-samples"); + EncodeString(&ret, "disable-auto-compactions"); return; } long int ival = 0; diff --git a/src/pika_command.cc b/src/pika_command.cc index 3688623bcb..ba80bb64e4 100644 --- a/src/pika_command.cc +++ b/src/pika_command.cc @@ -842,7 +842,6 @@ void Cmd::DoBinlog(const std::shared_ptr& slot) { res().SetRes(CmdRes::kErrOther); return; } - Status s = slot->ConsensusProposeLog(shared_from_this(), std::dynamic_pointer_cast(conn_ptr), resp_ptr); if (!s.ok()) { diff --git a/src/pika_conf.cc b/src/pika_conf.cc index 007d7490d7..515e04a29a 100644 --- a/src/pika_conf.cc +++ b/src/pika_conf.cc @@ -758,6 +758,17 @@ int PikaConf::ConfigRewrite() { SetConfInt64("slotmigrate", slotmigrate_); // slaveof config item is special SetConfStr("slaveof", slaveof_); + SetConfInt("max-bytes-for-level-multiplier", max_bytes_for_level_multiplier_); + SetConfStr("share-block-cache", share_block_cache_ ? "yes" : "no"); + SetConfStr("cache-index-and-filter-blocks", cache_index_and_filter_blocks_ ? "yes" : "no"); + SetConfStr("optimize-filters-for-hits", optimize_filters_for_hits_ ? "yes" : "no"); + SetConfStr("level-compaction-dynamic-level-bytes", level_compaction_dynamic_level_bytes_ ? "yes" : "no"); + SetConfInt("cache-model", cache_model_); + SetConfStr("cache-type", scache_type()); + SetConfInt("zset_cache_start_pos", zset_cache_start_pos_); + SetConfInt("zset_cache_field_num_per_key", zset_cache_field_num_per_key_); + SetConfInt("block-size", block_size_); + SetConfInt("block-cache", block_cache_); if (!diff_commands_.empty()) { std::vector filtered_items;