From 31df328be77dc84f955c2c641cdc38474ccc46e6 Mon Sep 17 00:00:00 2001 From: "Scott E. Graves" Date: Sat, 7 Dec 2024 10:43:12 -0600 Subject: [PATCH] added TaskWaitMillis to config --- repertory/librepertory/include/app_config.hpp | 15 ++++++++++-- repertory/librepertory/src/app_config.cpp | 13 +++++++++- repertory/librepertory/src/utils/tasks.cpp | 3 ++- repertory/repertory_test/src/config_test.cpp | 24 +++++++++++++++++++ 4 files changed, 51 insertions(+), 4 deletions(-) diff --git a/repertory/librepertory/include/app_config.hpp b/repertory/librepertory/include/app_config.hpp index 59c8aebc..b3de2a64 100644 --- a/repertory/librepertory/include/app_config.hpp +++ b/repertory/librepertory/include/app_config.hpp @@ -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(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; }; diff --git a/repertory/librepertory/src/app_config.cpp b/repertory/librepertory/src/app_config.cpp index aa471756..dc2aefdf 100644 --- a/repertory/librepertory/src/app_config.cpp +++ b/repertory/librepertory/src/app_config.cpp @@ -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"); } diff --git a/repertory/librepertory/src/utils/tasks.cpp b/repertory/librepertory/src/utils/tasks.cpp index 28aecb33..38090c9f 100644 --- a/repertory/librepertory/src/utils/tasks.cpp +++ b/repertory/librepertory/src/utils/tasks.cpp @@ -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}; diff --git a/repertory/repertory_test/src/config_test.cpp b/repertory/repertory_test/src/config_test.cpp index 4ee768bb..1c0b4fc1 100644 --- a/repertory/repertory_test/src/config_test.cpp +++ b/repertory/repertory_test/src/config_test.cpp @@ -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