From d6effec2c38c3d0d79beeb4e170f1e10bd0c6e56 Mon Sep 17 00:00:00 2001 From: githubzilla Date: Fri, 21 Nov 2025 17:58:18 +0800 Subject: [PATCH] Add disable write stall --- eloq_data_store_service/rocksdb_cloud_data_store.cpp | 5 +++++ eloq_data_store_service/rocksdb_config.cpp | 10 ++++++++++ eloq_data_store_service/rocksdb_config.h | 1 + eloq_data_store_service/rocksdb_data_store_common.h | 2 ++ 4 files changed, 18 insertions(+) diff --git a/eloq_data_store_service/rocksdb_cloud_data_store.cpp b/eloq_data_store_service/rocksdb_cloud_data_store.cpp index 8748bec..ffc9f81 100644 --- a/eloq_data_store_service/rocksdb_cloud_data_store.cpp +++ b/eloq_data_store_service/rocksdb_cloud_data_store.cpp @@ -596,6 +596,11 @@ bool RocksDBCloudDataStore::OpenCloudDB( max_bytes_for_level_multiplier_; } + if (disable_write_stall_) + { + options.disable_write_stall = disable_write_stall_; + } + // Add event listener for purger rocksdb::CloudFileSystemImpl *cfs_impl = dynamic_cast(cloud_fs_.get()); diff --git a/eloq_data_store_service/rocksdb_config.cpp b/eloq_data_store_service/rocksdb_config.cpp index 7ef76d7..b0d2916 100644 --- a/eloq_data_store_service/rocksdb_config.cpp +++ b/eloq_data_store_service/rocksdb_config.cpp @@ -98,6 +98,10 @@ DEFINE_string( rocksdb_batch_write_size, "1MB", /*Adjust for balancing the memory footprint and throughput*/ "RocksDB batch write size when doing checkpoint"); +DEFINE_bool( + rocksdb_disable_write_stall, + false, + "RocksDB disable write stall due to too many background operations"); DEFINE_uint32( rocksdb_periodic_compaction_seconds, @@ -489,6 +493,12 @@ RocksDBConfig::RocksDBConfig(const INIReader &config, : config.GetString("store", "rocksdb_dialy_offpeak_time_utc", FLAGS_rocksdb_dialy_offpeak_time_utc); + disable_write_stall_ = + !CheckCommandLineFlagIsDefault("rocksdb_disable_write_stall") + ? FLAGS_rocksdb_disable_write_stall + : config.GetBoolean("store", + "rocksdb_disable_write_stall", + FLAGS_rocksdb_disable_write_stall); }; #if (defined(DATA_STORE_TYPE_ELOQDSS_ROCKSDB_CLOUD_S3) || \ diff --git a/eloq_data_store_service/rocksdb_config.h b/eloq_data_store_service/rocksdb_config.h index d1d715a..278f16f 100644 --- a/eloq_data_store_service/rocksdb_config.h +++ b/eloq_data_store_service/rocksdb_config.h @@ -66,6 +66,7 @@ struct RocksDBConfig size_t batch_write_size_; size_t periodic_compaction_seconds_; std::string dialy_offpeak_time_utc_; + bool disable_write_stall_; }; #if (defined(DATA_STORE_TYPE_ELOQDSS_ROCKSDB_CLOUD_S3) || \ diff --git a/eloq_data_store_service/rocksdb_data_store_common.h b/eloq_data_store_service/rocksdb_data_store_common.h index b205dbc..c8b1c96 100644 --- a/eloq_data_store_service/rocksdb_data_store_common.h +++ b/eloq_data_store_service/rocksdb_data_store_common.h @@ -141,6 +141,7 @@ class RocksDBDataStoreCommon : public DataStore config.hard_pending_compaction_bytes_limit_bytes_), max_subcompactions_(config.max_subcompactions_), write_rate_limit_(config.write_rate_limit_bytes_), + disable_write_stall_(config.disable_write_stall_), batch_write_size_(config.batch_write_size_), periodic_compaction_seconds_(config.periodic_compaction_seconds_), dialy_offpeak_time_utc_(config.dialy_offpeak_time_utc_), @@ -307,6 +308,7 @@ class RocksDBDataStoreCommon : public DataStore const size_t hard_pending_compaction_bytes_limit_; const size_t max_subcompactions_; const size_t write_rate_limit_; + const bool disable_write_stall_; const size_t batch_write_size_; const size_t periodic_compaction_seconds_; const std::string dialy_offpeak_time_utc_;