@cryptotaxi247 / netdata-1 / commits / 75f29fd4d

Add configuration for dbengine page fetch timeout and retry count (#13194)

* Add configuration for page cache fetch timeout and retry count Change page cache wait default timeout to 3 seconds * Issue info message in the error.log if values not within expected lower range * Fix compilation errors with --disable-dbengine

Stelios Fragkakis committed Jun 23, 2022 at 13:48 UTC 75f29fd4d623a0995e8e534982c5a9c3987bb5cd
5 files changed +23 -4
daemon/main.c
+14
@@ -1231,6 +1231,20 @@ int main(int argc, char **argv) {
1231 // initialize the log files
1232 open_all_log_files();
1233
1234 +#ifdef ENABLE_DBENGINE
1235 + default_rrdeng_page_fetch_timeout = (int) config_get_number(CONFIG_SECTION_GLOBAL, "dbengine page fetch timeout", PAGE_CACHE_FETCH_WAIT_TIMEOUT);
1236 + if (default_rrdeng_page_fetch_timeout < 1) {
1237 + info("\"dbengine page fetch timeout\" found in netdata.conf cannot be %d, using 1", default_rrdeng_page_fetch_timeout);
1238 + default_rrdeng_page_fetch_timeout = 1;
1239 + }
1240 +
1241 + default_rrdeng_page_fetch_retries = (int) config_get_number(CONFIG_SECTION_GLOBAL, "dbengine page fetch retries", MAX_PAGE_CACHE_FETCH_RETRIES);
1242 + if (default_rrdeng_page_fetch_retries < 1) {
1243 + info("\"dbengine page fetch retries\" found in netdata.conf cannot be %d, using 1", default_rrdeng_page_fetch_retries);
1244 + default_rrdeng_page_fetch_retries = 1;
1245 + }
1246 +#endif
1247 +
1248 get_system_timezone();
1249 // --------------------------------------------------------------------
1250 // get the certificate and start security
database/engine/pagecache.c
+3 -3
@@ -1067,9 +1067,9 @@ pg_cache_lookup_next(struct rrdengine_instance *ctx, struct pg_cache_page_index
1067 int retry_count = 0;
1068 while (1) {
1069 descr = find_first_page_in_time_range(page_index, start_time, end_time);
1070 - if (NULL == descr || 0 == descr->page_length || retry_count == MAX_PAGE_CACHE_RETRY_WAIT) {
1070 + if (NULL == descr || 0 == descr->page_length || retry_count == default_rrdeng_page_fetch_retries) {
1071 /* non-empty page not found */
1072 - if (retry_count == MAX_PAGE_CACHE_RETRY_WAIT)
1072 + if (retry_count == default_rrdeng_page_fetch_retries)
1073 error_report("Page cache timeout while waiting for page %p : returning FAIL", descr);
1074 uv_rwlock_rdunlock(&page_index->lock);
1075
@@ -1115,7 +1115,7 @@ pg_cache_lookup_next(struct rrdengine_instance *ctx, struct pg_cache_page_index
1115 if (!(flags & RRD_PAGE_POPULATED))
1116 page_not_in_cache = 1;
1117
1118 - if (pg_cache_timedwait_event_unsafe(descr, 1) == UV_ETIMEDOUT) {
1118 + if (pg_cache_timedwait_event_unsafe(descr, default_rrdeng_page_fetch_timeout) == UV_ETIMEDOUT) {
1119 error_report("Page cache timeout while waiting for page %p : retry count = %d", descr, retry_count);
1120 ++retry_count;
1121 }
database/engine/pagecache.h
+2 -1
@@ -11,7 +11,8 @@ struct extent_info;
11 struct rrdeng_page_descr;
12
13 #define INVALID_TIME (0)
14 -#define MAX_PAGE_CACHE_RETRY_WAIT (3)
14 +#define MAX_PAGE_CACHE_FETCH_RETRIES (3)
15 +#define PAGE_CACHE_FETCH_WAIT_TIMEOUT (3)
16
17 /* Page flags */
18 #define RRD_PAGE_DIRTY (1LU << 0)
database/engine/rrdengineapi.c
+2
@@ -5,6 +5,8 @@
5 struct rrdengine_instance multidb_ctx;
6
7 int db_engine_use_malloc = 0;
8 +int default_rrdeng_page_fetch_timeout = 3;
9 +int default_rrdeng_page_fetch_retries = 3;
10 int default_rrdeng_page_cache_mb = 32;
11 int default_rrdeng_disk_quota_mb = 256;
12 int default_multidb_disk_quota_mb = 256;
database/engine/rrdengineapi.h
+2
@@ -13,6 +13,8 @@
13 #define RRDENG_FD_BUDGET_PER_INSTANCE (50)
14
15 extern int db_engine_use_malloc;
16 +extern int default_rrdeng_page_fetch_timeout;
17 +extern int default_rrdeng_page_fetch_retries;
18 extern int default_rrdeng_page_cache_mb;
19 extern int default_rrdeng_disk_quota_mb;
20 extern int default_multidb_disk_quota_mb;