added TaskWaitMillis to config
All checks were successful
BlockStorage/repertory/pipeline/head This commit looks good

This commit is contained in:
Scott E. Graves 2024-12-07 10:43:12 -06:00
parent ff8d037474
commit 31df328be7
4 changed files with 51 additions and 4 deletions

View File

@ -95,9 +95,12 @@ private:
std::string remote_token_;
std::uint16_t retry_read_count_;
std::uint16_t ring_buffer_file_size_;
std::uint16_t task_wait_ms_;
private:
std::string cache_directory_;
host_config hc_;
s3_config s3_config_;
host_config hc_{};
s3_config s3_config_{};
sia_config sia_config_{};
std::uint64_t version_{REPERTORY_CONFIG_VERSION};
std::string log_directory_;
@ -299,6 +302,10 @@ public:
return sia_config_;
}
[[nodiscard]] auto get_task_wait_ms() const -> std::uint16_t {
return std::max(static_cast<std::uint16_t>(50U), task_wait_ms_);
}
[[nodiscard]] auto get_value_by_name(const std::string &name) -> std::string;
[[nodiscard]] auto get_version() const -> std::uint64_t { return version_; }
@ -455,6 +462,10 @@ public:
set_value(retry_read_count_, retry_read_count);
}
void set_task_wait_ms(std::uint16_t task_wait_ms) {
set_value(task_wait_ms_, task_wait_ms);
}
[[nodiscard]] auto set_value_by_name(const std::string &name,
const std::string &value) -> std::string;
};

View File

@ -50,6 +50,7 @@ constexpr const auto default_remote_send_timeout_secs = 30U;
constexpr const auto default_remote_token = "";
constexpr const auto default_retry_read_count = 6U;
constexpr const auto default_ring_buffer_file_size = 512U;
constexpr const auto default_task_wait_ms = 100U;
constexpr const auto retry_save_count = 5U;
} // namespace
@ -95,7 +96,8 @@ app_config::app_config(const provider_type &prov,
remote_send_timeout_secs_(default_remote_send_timeout_secs),
remote_token_(default_remote_token),
retry_read_count_(default_retry_read_count),
ring_buffer_file_size_(default_ring_buffer_file_size) {
ring_buffer_file_size_(default_ring_buffer_file_size),
task_wait_ms_(default_task_wait_ms) {
cache_directory_ = utils::path::combine(data_directory_, {"cache"});
log_directory_ = utils::path::combine(data_directory_, {"logs"});
@ -271,6 +273,7 @@ auto app_config::get_json() const -> json {
{
{"Bucket", sia_config_.bucket},
}},
{"TaskWaitMillis", task_wait_ms_},
{"Version", version_}};
if (prov_ == provider_type::encrypt) {
@ -507,6 +510,9 @@ auto app_config::get_value_by_name(const std::string &name) -> std::string {
if (name == "SiaConfig.Bucket") {
return sia_config_.bucket;
}
if (name == "TaskWaitMillis") {
return std::to_string(get_task_wait_ms());
}
} catch (const std::exception &e) {
utils::error::raise_error(function_name, e, "exception occurred");
}
@ -611,6 +617,7 @@ auto app_config::load() -> bool {
get_value(json_document, "ReadAheadCount", read_ahead_count_, ret);
get_value(json_document, "RingBufferFileSize", ring_buffer_file_size_,
ret);
get_value(json_document, "TaskWaitMillis", task_wait_ms_, ret);
get_value(json_document, "EnableMaxCacheSize", enable_max_cache_size_,
ret);
#if defined(_WIN32)
@ -925,6 +932,10 @@ auto app_config::set_value_by_name(const std::string &name,
set_value(sia_config_.bucket, value);
return sia_config_.bucket;
}
if (name == "TaskWaitMillis") {
set_task_wait_ms(utils::string::to_uint16(value));
return std::to_string(get_task_wait_ms());
}
} catch (const std::exception &e) {
utils::error::raise_error(function_name, e, "exception occurred");
}

View File

@ -50,7 +50,8 @@ auto tasks::task_wait::wait() const -> bool {
auto tasks::schedule(task item) -> task_ptr {
++count_;
while (not stop_requested_ && (count_ >= task_threads_.size())) {
std::this_thread::sleep_for(50ms);
std::this_thread::sleep_for(
std::chrono::milliseconds(config_->get_task_wait_ms()));
}
scheduled_task runnable{item};

View File

@ -101,6 +101,7 @@ const auto DEFAULT_SIA_CONFIG = "{\n"
" \"SiaConfig\": {\n"
" \"Bucket\": \"\"\n"
" },\n"
" \"TaskWaitMillis\": 100,\n"
" \"Version\": " +
std::to_string(REPERTORY_CONFIG_VERSION) +
"\n"
@ -153,6 +154,7 @@ const auto DEFAULT_S3_CONFIG = "{\n"
" \"UsePathStyle\": false,\n"
" \"UseRegionInURL\": false\n"
" },\n"
" \"TaskWaitMillis\": 100,\n"
" \"Version\": " +
std::to_string(REPERTORY_CONFIG_VERSION) +
"\n"
@ -817,4 +819,26 @@ TEST_F(config_test, retry_read_count_minimum_value) {
EXPECT_EQ(2, config.get_retry_read_count());
}
}
TEST_F(config_test, task_wait_ms) {
std::uint16_t original_value{};
{
app_config config(provider_type::sia, sia_directory);
original_value = config.get_task_wait_ms();
config.set_task_wait_ms(original_value + 1U);
EXPECT_EQ(original_value + 1U, config.get_task_wait_ms());
}
{
app_config config(provider_type::sia, sia_directory);
EXPECT_EQ(original_value + 1U, config.get_task_wait_ms());
}
}
TEST_F(config_test, task_wait_ms_minimum_value) {
{
app_config config(provider_type::sia, sia_directory);
config.set_task_wait_ms(1U);
EXPECT_EQ(50U, config.get_task_wait_ms());
}
}
} // namespace repertory