123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103 |
- #include "environment.h"
- // RAMdisk path for MDB volatile store.
- #define MDB_RAMDISK_PATH TMPDIR "/lsup_mem_graph"
- /**
- * Static handles.
- */
- #define DEFAULT_CTX_LABEL "urn:lsup:default"
- /** @brief Environment "singleton".
- */
- LSUP_Env *LSUP_default_env = NULL;
- LSUP_Env *
- LSUP_env_new (
- const char *default_ctx, const char *mdb_path,
- const char *mdb_ramdisk_path, const LSUP_NSMap *nsmap)
- {
- LSUP_Env *env;
- MALLOC_GUARD (env, NULL);
- // Default store context.
- LSUP_Term *default_ctx_uri = LSUP_uri_new (default_ctx);
- env->default_ctx = LSUP_buffer_new_from_term (default_ctx_uri);
- LSUP_term_free (default_ctx_uri);
- log_info ("Setting up default context.");
- // Permanent store.
- if (LSUP_mdbstore_setup (mdb_path, false) != LSUP_OK) return NULL;
- env->mdbstore = LSUP_mdbstore_new (mdb_path, env->default_ctx);
- if (UNLIKELY (!env->mdbstore)) return NULL;
- log_info ("Initialized persistent back end at %s.", mdb_path);
- // RAM disk store.
- if (LSUP_mdbstore_setup (mdb_ramdisk_path, true) != LSUP_OK)
- return NULL;
- env->mdbstore_ramdisk = LSUP_mdbstore_new (
- mdb_ramdisk_path, env->default_ctx);
- if (UNLIKELY (!env->mdbstore_ramdisk)) return NULL;
- log_info ("Initialized RAM disk back end at %s.", mdb_ramdisk_path);
- return env;
- }
- LSUP_rc
- LSUP_init (void)
- {
- LSUP_rc rc = LSUP_NOACTION;
- if (LSUP_default_env == NULL) {
- #ifdef DEBUG
- // In debug mode, always use max logging.
- int loglevel = LOG_TRACE;
- #else
- char *_loglevel = getenv ("LSUP_LOGLEVEL");
- int loglevel = (_loglevel == NULL) ? LOG_WARN : atoi (_loglevel);
- #endif
- log_set_level (loglevel);
- // Default permanent store path.
- char *mdb_path = getenv ("LSUP_MDB_STORE_PATH");
- if (!mdb_path) {
- mdb_path = DEFAULT_ENV_PATH;
- log_warn (
- "`LSUP_MDB_STORE_PATH' environment variable is not "
- "set. The default location %s will be used as the graph "
- "store.", mdb_path
- );
- }
- LSUP_default_env = LSUP_env_new (
- DEFAULT_CTX_LABEL, mdb_path, MDB_RAMDISK_PATH, NULL);
- if (!LSUP_default_env) rc = LSUP_DB_ERR;
- atexit (LSUP_done);
- rc = LSUP_OK;
- }
- return rc;
- }
- void
- LSUP_env_free (LSUP_Env *env)
- {
- LSUP_mdbstore_free (env->mdbstore);
- LSUP_mdbstore_free (env->mdbstore_ramdisk);
- LSUP_buffer_free (env->default_ctx);
- LSUP_nsmap_free (env->nsm);
- free (env);
- }
- void
- LSUP_done (void)
- { LSUP_env_free (LSUP_default_env); }
|