Skip to content
Snippets Groups Projects
Commit 824b1a52 authored by Vladimír Čunát's avatar Vladimír Čunát Committed by Aleš Mrázek
Browse files

lib/rules kr_rules_init(): allow not overwriting the DB

parent 9aff15f0
Branches
Tags
1 merge request!1540manager: policy-loader: new process for loading policy rules separately
......@@ -497,7 +497,7 @@ int kr_cache_remove(struct kr_cache *, const knot_dname_t *, uint16_t);
int kr_cache_remove_subtree(struct kr_cache *, const knot_dname_t *, _Bool, int);
int kr_cache_commit(struct kr_cache *);
uint32_t packet_ttl(const knot_pkt_t *);
int kr_rules_init(const char *, size_t);
int kr_rules_init(const char *, size_t, _Bool);
int kr_rules_commit(_Bool);
int kr_view_insert_action(const char *, const char *, kr_proto_set, const char *);
int kr_view_select_action(const struct kr_request *, knot_db_val_t *);
......
......@@ -497,7 +497,7 @@ int kr_cache_remove(struct kr_cache *, const knot_dname_t *, uint16_t);
int kr_cache_remove_subtree(struct kr_cache *, const knot_dname_t *, _Bool, int);
int kr_cache_commit(struct kr_cache *);
uint32_t packet_ttl(const knot_pkt_t *);
int kr_rules_init(const char *, size_t);
int kr_rules_init(const char *, size_t, _Bool);
int kr_rules_commit(_Bool);
int kr_view_insert_action(const char *, const char *, kr_proto_set, const char *);
int kr_view_select_action(const struct kr_request *, knot_db_val_t *);
......
......@@ -498,7 +498,7 @@ int kr_cache_remove(struct kr_cache *, const knot_dname_t *, uint16_t);
int kr_cache_remove_subtree(struct kr_cache *, const knot_dname_t *, _Bool, int);
int kr_cache_commit(struct kr_cache *);
uint32_t packet_ttl(const knot_pkt_t *);
int kr_rules_init(const char *, size_t);
int kr_rules_init(const char *, size_t, _Bool);
int kr_rules_commit(_Bool);
int kr_view_insert_action(const char *, const char *, kr_proto_set, const char *);
int kr_view_select_action(const struct kr_request *, knot_db_val_t *);
......
......@@ -141,9 +141,9 @@ int kr_rules_init_ensure(void)
{
if (the_rules)
return kr_ok();
return kr_rules_init(NULL, 0);
return kr_rules_init(NULL, 0, true);
}
int kr_rules_init(const char *path, size_t maxsize)
int kr_rules_init(const char *path, size_t maxsize, bool overwrite)
{
if (the_rules)
return kr_error(EINVAL);
......@@ -157,22 +157,17 @@ int kr_rules_init(const char *path, size_t maxsize)
// FIXME: the file will be sparse, but we still need to choose its size somehow.
// Later we might improve it to auto-resize in case of running out of space.
// Caveat: mdb_env_set_mapsize() can only be called without transactions open.
.maxsize = maxsize ? maxsize :
(size_t)(sizeof(size_t) > 4 ? 2048 : 500) * 1024*1024,
.maxsize = !overwrite ? 0 :
(maxsize ? maxsize : (size_t)(sizeof(size_t) > 4 ? 2048 : 500) * 1024*1024),
};
int ret = the_rules->api->open(&the_rules->db, &the_rules->stats, &opts, NULL);
/* No persistence - we always refill from config for now.
* LATER:
* - Make it include versioning?
* - "\0stamp" key when loading config(s)?
* - Don't clear ruleset data that doesn't come directly from config;
* and add marks for that, etc.
* (after there actually are any kinds of rules like that)
*/
if (ret == 0) ret = ruledb_op(clear);
if (ret == 0 && overwrite) ret = ruledb_op(clear);
if (ret != 0) goto failure;
kr_require(the_rules->db);
if (!overwrite) return kr_ok(); // we assume that the caller ensured OK contents
ret = tag_names_default();
if (ret != 0) goto failure;
......
......@@ -19,11 +19,13 @@ typedef uint64_t kr_rule_tags_t;
/** Open the rule DB.
*
* You can call this to override the path or size (NULL/0 -> default).
* Not allowed if already open (EINVAL), so this optional call has to come
* before writing anything into the DB. */
* You can call this to override the path or size (NULL/0 -> default)
* or choose not to overwrite the DB with just the defaults.
*
* \return error code. Not allowed if already open (EINVAL),
* so this optional call has to come before writing anything into the DB. */
KR_EXPORT
int kr_rules_init(const char *path, size_t maxsize);
int kr_rules_init(const char *path, size_t maxsize, bool overwrite);
/** kr_rules_init() but OK if already open, and not allowing to override defaults. */
KR_EXPORT
int kr_rules_init_ensure(void);
......
......@@ -20,7 +20,7 @@ extern struct kr_rules *the_rules;
#define ENSURE_the_rules \
if (!the_rules) { \
int ret = kr_rules_init(NULL, 0); \
int ret = kr_rules_init(NULL, 0, true); \
if (ret) return ret; \
}
......
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment