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;