diff options
Diffstat (limited to 'database/storage_engine.c')
-rw-r--r-- | database/storage_engine.c | 143 |
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; } |