summaryrefslogtreecommitdiffstats
path: root/database/storage_engine.c
diff options
context:
space:
mode:
Diffstat (limited to 'database/storage_engine.c')
-rw-r--r--database/storage_engine.c143
1 files changed, 42 insertions, 101 deletions
diff --git a/database/storage_engine.c b/database/storage_engine.c
index 1998238222..33014767e2 100644
--- a/database/storage_engine.c
+++ b/database/storage_engine.c
@@ -1,118 +1,59 @@
// SPDX-License-Identifier: GPL-3.0-or-later
#include "storage_engine.h"
+
#include "ram/rrddim_mem.h"
#ifdef ENABLE_DBENGINE
#include "engine/rrdengineapi.h"
#endif
-static STORAGE_ENGINE engines[] = {
- {
- .id = RRD_MEMORY_MODE_NONE,
- .name = RRD_MEMORY_MODE_NONE_NAME,
- .backend = STORAGE_ENGINE_BACKEND_RRDDIM,
- .api = {
- .metric_get = rrddim_metric_get,
- .metric_get_or_create = rrddim_metric_get_or_create,
- .metric_dup = rrddim_metric_dup,
- .metric_release = rrddim_metric_release,
- .metric_retention_by_uuid = rrddim_metric_retention_by_uuid,
- }
- },
- {
- .id = RRD_MEMORY_MODE_RAM,
- .name = RRD_MEMORY_MODE_RAM_NAME,
- .backend = STORAGE_ENGINE_BACKEND_RRDDIM,
- .api = {
- .metric_get = rrddim_metric_get,
- .metric_get_or_create = rrddim_metric_get_or_create,
- .metric_dup = rrddim_metric_dup,
- .metric_release = rrddim_metric_release,
- .metric_retention_by_uuid = rrddim_metric_retention_by_uuid,
- }
- },
- {
- .id = RRD_MEMORY_MODE_MAP,
- .name = RRD_MEMORY_MODE_MAP_NAME,
- .backend = STORAGE_ENGINE_BACKEND_RRDDIM,
- .api = {
- .metric_get = rrddim_metric_get,
- .metric_get_or_create = rrddim_metric_get_or_create,
- .metric_dup = rrddim_metric_dup,
- .metric_release = rrddim_metric_release,
- .metric_retention_by_uuid = rrddim_metric_retention_by_uuid,
- }
- },
- {
- .id = RRD_MEMORY_MODE_SAVE,
- .name = RRD_MEMORY_MODE_SAVE_NAME,
- .backend = STORAGE_ENGINE_BACKEND_RRDDIM,
- .api = {
- .metric_get = rrddim_metric_get,
- .metric_get_or_create = rrddim_metric_get_or_create,
- .metric_dup = rrddim_metric_dup,
- .metric_release = rrddim_metric_release,
- .metric_retention_by_uuid = rrddim_metric_retention_by_uuid,
- }
- },
- {
- .id = RRD_MEMORY_MODE_ALLOC,
- .name = RRD_MEMORY_MODE_ALLOC_NAME,
- .backend = STORAGE_ENGINE_BACKEND_RRDDIM,
- .api = {
- .metric_get = rrddim_metric_get,
- .metric_get_or_create = rrddim_metric_get_or_create,
- .metric_dup = rrddim_metric_dup,
- .metric_release = rrddim_metric_release,
- .metric_retention_by_uuid = rrddim_metric_retention_by_uuid,
- }
- },
#ifdef ENABLE_DBENGINE
- {
- .id = RRD_MEMORY_MODE_DBENGINE,
- .name = RRD_MEMORY_MODE_DBENGINE_NAME,
- .backend = STORAGE_ENGINE_BACKEND_DBENGINE,
- .api = {
- .metric_get = rrdeng_metric_get,
- .metric_get_or_create = rrdeng_metric_get_or_create,
- .metric_dup = rrdeng_metric_dup,
- .metric_release = rrdeng_metric_release,
- .metric_retention_by_uuid = rrdeng_metric_retention_by_uuid,
- }
- },
+STORAGE_ENGINE_ID default_storage_engine_id = STORAGE_ENGINE_DBENGINE;
+#else
+STORAGE_ENGINE_ID default_storage_engine_id = STORAGE_ENGINE_SAVE;
#endif
- { .id = RRD_MEMORY_MODE_NONE, .name = NULL }
-};
-STORAGE_ENGINE* storage_engine_find(const char* name)
-{
- for (STORAGE_ENGINE* it = engines; it->name; it++) {
- if (strcmp(it->name, name) == 0)
- return it;
- }
- return NULL;
-}
+const char *storage_engine_name(STORAGE_ENGINE_ID id) {
+ switch(id) {
+ case STORAGE_ENGINE_RAM:
+ return STORAGE_ENGINE_RAM_NAME;
-STORAGE_ENGINE* storage_engine_get(RRD_MEMORY_MODE mmode)
-{
- for (STORAGE_ENGINE* it = engines; it->name; it++) {
- if (it->id == mmode)
- return it;
- }
- return NULL;
-}
+ case STORAGE_ENGINE_MAP:
+ return STORAGE_ENGINE_MAP_NAME;
+
+ case STORAGE_ENGINE_NONE:
+ return STORAGE_ENGINE_NONE_NAME;
-STORAGE_ENGINE* storage_engine_foreach_init()
-{
- // Assuming at least one engine exists
- return &engines[0];
+ case STORAGE_ENGINE_SAVE:
+ return STORAGE_ENGINE_SAVE_NAME;
+
+ case STORAGE_ENGINE_ALLOC:
+ return STORAGE_ENGINE_ALLOC_NAME;
+
+ case STORAGE_ENGINE_DBENGINE:
+ return STORAGE_ENGINE_DBENGINE_NAME;
+
+ default:
+ __builtin_unreachable();
+ }
}
-STORAGE_ENGINE* storage_engine_foreach_next(STORAGE_ENGINE* it)
-{
- if (!it || !it->name)
- return NULL;
+bool storage_engine_id(const char *name, STORAGE_ENGINE_ID *id) {
+ if (!strcmp(name, STORAGE_ENGINE_RAM_NAME)) {
+ *id = STORAGE_ENGINE_RAM;
+ } else if (!strcmp(name, STORAGE_ENGINE_MAP_NAME)) {
+ *id = STORAGE_ENGINE_MAP;
+ } else if (!strcmp(name, STORAGE_ENGINE_NONE_NAME)) {
+ *id = STORAGE_ENGINE_NONE;
+ } else if (!strcmp(name, STORAGE_ENGINE_SAVE_NAME)) {
+ *id = STORAGE_ENGINE_SAVE;
+ } else if (!strcmp(name, STORAGE_ENGINE_ALLOC_NAME)) {
+ *id = STORAGE_ENGINE_ALLOC;
+ } else if (!strcmp(name, STORAGE_ENGINE_DBENGINE_NAME)) {
+ *id = STORAGE_ENGINE_DBENGINE;
+ } else {
+ return false;
+ }
- it++;
- return it->name ? it : NULL;
+ return true;
}