Commit b57d4094 authored by Daniel Salzman's avatar Daniel Salzman

confio: remove confio parameter from conf_io_set

parent 2841c543
......@@ -872,42 +872,28 @@ static int set_item(
}
// Postpone group callbacks to config check.
if (io->key0->type != YP_TGRP) {
conf_check_t args = {
.conf = conf(),
.txn = conf()->io.txn,
.item = (io->key1 != NULL) ? io->key1 : io->key0,
.id = io->id,
.id_len = io->id_len,
.data = io->data.bin,
.data_len = io->data.bin_len
};
// Call the item callbacks.
io->error.code = conf_exec_callbacks(&args);
if (io->error.code != KNOT_EOK) {
io->error.str = args.err_str;
ret = FCN(io);
if (ret == KNOT_EOK) {
ret = io->error.code;
}
}
if (io->key0->type == YP_TGRP) {
return KNOT_EOK;
}
return ret;
conf_check_t args = {
.conf = conf(),
.txn = conf()->io.txn,
.item = (io->key1 != NULL) ? io->key1 : io->key0,
.data = io->data.bin,
.data_len = io->data.bin_len
};
// Call the item callbacks (include).
return conf_exec_callbacks(&args);
}
int conf_io_set(
const char *key0,
const char *key1,
const char *id,
const char *data,
conf_io_t *io)
const char *data)
{
if (io == NULL) {
return KNOT_EINVAL;
}
assert(conf() != NULL);
if (conf()->io.txn == NULL) {
......@@ -936,11 +922,13 @@ int conf_io_set(
yp_flag_t upd_flags = node->item->flags;
conf_io_type_t upd_type = CONF_IO_TNONE;
conf_io_t io = { NULL };
// Key1 is not a group identifier.
if (parent != NULL) {
upd_type = CONF_IO_TCHANGE;
upd_flags |= parent->item->flags;
io_reset_bin(io, parent->item, node->item, parent->id,
io_reset_bin(&io, parent->item, node->item, parent->id,
parent->id_len, node->data, node->data_len);
// No key1 but a group identifier.
} else if (node->id_len != 0) {
......@@ -950,11 +938,11 @@ int conf_io_set(
upd_type = CONF_IO_TSET;
upd_flags |= node->item->var.g.id->flags;
io_reset_bin(io, node->item, node->item->var.g.id, node->id,
io_reset_bin(&io, node->item, node->item->var.g.id, node->id,
node->id_len, NULL, 0);
// Ensure some data for non-group items (include).
} else if (node->item->type == YP_TGRP || node->data_len != 0) {
io_reset_bin(io, node->item, NULL, node->id, node->id_len,
io_reset_bin(&io, node->item, NULL, node->id, node->id_len,
node->data, node->data_len);
// Non-group without data.
} else {
......@@ -963,10 +951,10 @@ int conf_io_set(
}
// Set the item for all identifiers by default.
if (io->key0->type == YP_TGRP && io->key1 != NULL &&
(io->key0->flags & YP_FMULTI) != 0 && io->id_len == 0) {
if (io.key0->type == YP_TGRP && io.key1 != NULL &&
(io.key0->flags & YP_FMULTI) != 0 && io.id_len == 0) {
conf_iter_t iter;
ret = conf_db_iter_begin(conf(), conf()->io.txn, io->key0->name,
ret = conf_db_iter_begin(conf(), conf()->io.txn, io.key0->name,
&iter);
switch (ret) {
case KNOT_EOK:
......@@ -980,14 +968,14 @@ int conf_io_set(
while (ret == KNOT_EOK) {
// Get the identifier.
ret = conf_db_iter_id(conf(), &iter, &io->id, &io->id_len);
ret = conf_db_iter_id(conf(), &iter, &io.id, &io.id_len);
if (ret != KNOT_EOK) {
conf_db_iter_finish(conf(), &iter);
goto set_error;
}
// Set the data.
ret = set_item(io);
ret = set_item(&io);
if (ret != KNOT_EOK) {
conf_db_iter_finish(conf(), &iter);
goto set_error;
......@@ -999,17 +987,17 @@ int conf_io_set(
goto set_error;
}
upd_changes(io, upd_type, upd_flags, true);
upd_changes(&io, upd_type, upd_flags, true);
ret = KNOT_EOK;
goto set_error;
}
// Set the item with a possible identifier.
ret = set_item(io);
ret = set_item(&io);
if (ret == KNOT_EOK) {
upd_changes(io, upd_type, upd_flags, false);
upd_changes(&io, upd_type, upd_flags, false);
}
set_error:
yp_scheme_check_deinit(ctx);
......
......@@ -188,7 +188,6 @@ int conf_io_get(
* \param[in] key1 Item name (NULL to add identifier only).
* \param[in] id Section identifier name (NULL to consider all section identifiers).
* \param[in] data Item data to set/add.
* \param[out] io Operation output (callback error output).
*
* \return Error code, KNOT_EOK if success.
*/
......@@ -196,8 +195,7 @@ int conf_io_set(
const char *key0,
const char *key1,
const char *id,
const char *data,
conf_io_t *io
const char *data
);
/*!
......
......@@ -1188,11 +1188,6 @@ static int ctl_conf_read(ctl_args_t *args, ctl_cmd_t cmd)
static int ctl_conf_modify(ctl_args_t *args, ctl_cmd_t cmd)
{
conf_io_t io = {
.fcn = send_block,
.misc = args->ctl
};
// Start child transaction.
int ret = conf_io_begin(true);
if (ret != KNOT_EOK) {
......@@ -1208,7 +1203,7 @@ static int ctl_conf_modify(ctl_args_t *args, ctl_cmd_t cmd)
switch (cmd) {
case CTL_CONF_SET:
ret = conf_io_set(key0, key1, id, data, &io);
ret = conf_io_set(key0, key1, id, data);
break;
case CTL_CONF_UNSET:
ret = conf_io_unset(key0, key1, id, data);
......
......@@ -207,19 +207,17 @@ static void test_conf_io_abort(void)
#if defined(__OpenBSD__)
SKIP_OPENBSD
#else
conf_io_t io = { NULL };
// Test child persistence after subchild abort.
ok(conf_io_begin(false) == KNOT_EOK, "begin parent txn");
char idx[2] = { '0' };
ok(conf_io_set("server", "version", NULL, idx, &io) ==
ok(conf_io_set("server", "version", NULL, idx) ==
KNOT_EOK, "set single value '%s'", idx);
for (int i = 1; i < CONF_MAX_TXN_DEPTH; i++) {
char idx[2] = { '0' + i };
ok(conf_io_begin(true) == KNOT_EOK, "begin child txn %s", idx);
ok(conf_io_set("server", "version", NULL, idx, &io) ==
ok(conf_io_set("server", "version", NULL, idx) ==
KNOT_EOK, "set single value '%s'", idx);
}
......@@ -239,7 +237,7 @@ static void test_conf_io_abort(void)
ok(conf_io_begin(false) == KNOT_EOK, "begin new parent txn");
ok(conf_io_begin(true) == KNOT_EOK, "begin child txn");
ok(conf_io_begin(true) == KNOT_EOK, "begin subchild txn");
ok(conf_io_set("server", "version", NULL, "text", &io) ==
ok(conf_io_set("server", "version", NULL, "text") ==
KNOT_EOK, "set single value");
ok(conf_io_commit(true) == KNOT_EOK, "commit subchild txn");
conf_val_t val = conf_get_txn(conf(), conf()->io.txn, C_SERVER, C_VERSION);
......@@ -265,19 +263,17 @@ static void test_conf_io_commit(void)
#if defined(__OpenBSD__)
SKIP_OPENBSD
#else
conf_io_t io = { NULL };
// Test subchild persistence after commit.
ok(conf_io_begin(false) == KNOT_EOK, "begin parent txn");
char idx[2] = { '0' };
ok(conf_io_set("server", "version", NULL, idx, &io) ==
ok(conf_io_set("server", "version", NULL, idx) ==
KNOT_EOK, "set single value '%s'", idx);
for (int i = 1; i < CONF_MAX_TXN_DEPTH; i++) {
char idx[2] = { '0' + i };
ok(conf_io_begin(true) == KNOT_EOK, "begin child txn %s", idx);
ok(conf_io_set("server", "version", NULL, idx, &io) ==
ok(conf_io_set("server", "version", NULL, idx) ==
KNOT_EOK, "set single value '%s'", idx);
}
......@@ -319,22 +315,22 @@ static void test_conf_io_check(void)
ok(conf_io_begin(false) == KNOT_EOK, "begin txn");
// Section check.
ok(conf_io_set("remote", "id", NULL, "remote1", &io) ==
ok(conf_io_set("remote", "id", NULL, "remote1") ==
KNOT_EOK, "set remote id");
ok(conf_io_check(&io) ==
KNOT_EINVAL, "check missing remote address");
ok(io.error.code == KNOT_EINVAL, "compare error code");
ok(conf_io_set("remote", "address", "remote1", "1.1.1.1", &io) ==
ok(conf_io_set("remote", "address", "remote1", "1.1.1.1") ==
KNOT_EOK, "set remote address");
ok(conf_io_check(&io) ==
KNOT_EOK, "check remote address");
ok(io.error.code == KNOT_EOK, "compare error code");
// Item check.
ok(conf_io_set("zone", "domain", NULL, ZONE1, &io) ==
ok(conf_io_set("zone", "domain", NULL, ZONE1) ==
KNOT_EOK, "set zone domain "ZONE1);
ok(conf_io_set("zone", "master", ZONE1, "remote1", &io) ==
ok(conf_io_set("zone", "master", ZONE1, "remote1") ==
KNOT_EOK, "set zone master");
ok(conf_io_check(&io) ==
......@@ -352,45 +348,41 @@ static void test_conf_io_check(void)
static void test_conf_io_set(void)
{
conf_io_t io = { NULL };
// ERR no txn.
ok(conf_io_set("server", "version", NULL, "text", &io) ==
ok(conf_io_set("server", "version", NULL, "text") ==
KNOT_TXN_ENOTEXISTS, "set without active txn");
ok(conf_io_begin(false) == KNOT_EOK, "begin txn");
// ERR.
ok(conf_io_set(NULL, NULL, NULL, NULL, &io) ==
ok(conf_io_set(NULL, NULL, NULL, NULL) ==
KNOT_EINVAL, "set NULL key0");
ok(conf_io_set("", NULL, NULL, NULL, &io) ==
ok(conf_io_set("", NULL, NULL, NULL) ==
KNOT_YP_EINVAL_ITEM, "set empty key0");
ok(conf_io_set("uknown", NULL, NULL, NULL, &io) ==
ok(conf_io_set("uknown", NULL, NULL, NULL) ==
KNOT_YP_EINVAL_ITEM, "set unknown key0");
ok(conf_io_set("server", "unknown", NULL, NULL, &io) ==
ok(conf_io_set("server", "unknown", NULL, NULL) ==
KNOT_YP_EINVAL_ITEM, "set unknown key1");
ok(conf_io_set("include", NULL, NULL, NULL, &io) ==
ok(conf_io_set("include", NULL, NULL, NULL) ==
KNOT_YP_ENODATA, "set non-group without data");
ok(conf_io_set("server", "rate-limit", NULL, "x", &io) ==
ok(conf_io_set("server", "rate-limit", NULL, "x") ==
KNOT_EINVAL, "set invalid data");
// ERR callback
ok(io.error.code == KNOT_EOK, "io error check before");
ok(conf_io_set("include", NULL, NULL, "invalid", &io) ==
ok(conf_io_set("include", NULL, NULL, "invalid") ==
KNOT_EFILE, "set invalid callback value");
ok(io.error.code == KNOT_EFILE, "io error check after");
// Single group, single value.
ok(conf_io_set("server", "version", NULL, "text", &io) ==
ok(conf_io_set("server", "version", NULL, "text") ==
KNOT_EOK, "set single value");
conf_val_t val = conf_get_txn(conf(), conf()->io.txn, C_SERVER, C_VERSION);
ok(val.code == KNOT_EOK, "check entry");
ok(strcmp(conf_str(&val), "text") == 0, "check entry value");
// Single group, multi value.
ok(conf_io_set("server", "listen", NULL, "1.1.1.1", &io) ==
ok(conf_io_set("server", "listen", NULL, "1.1.1.1") ==
KNOT_EOK, "set multivalue 1");
ok(conf_io_set("server", "listen", NULL, "1.1.1.2", &io) ==
ok(conf_io_set("server", "listen", NULL, "1.1.1.2") ==
KNOT_EOK, "set multivalue 2");
val = conf_get_txn(conf(), conf()->io.txn, C_SERVER, C_LISTEN);
ok(val.code == KNOT_EOK, "check entry");
......@@ -405,24 +397,24 @@ static void test_conf_io_set(void)
ok(zone3 != NULL, "create dname "ZONE3);
// Multi group ids.
ok(conf_io_set("zone", "domain", NULL, ZONE1, &io) ==
ok(conf_io_set("zone", "domain", NULL, ZONE1) ==
KNOT_EOK, "set zone domain "ZONE1);
ok(conf_io_set("zone", NULL, ZONE2, NULL, &io) ==
ok(conf_io_set("zone", NULL, ZONE2, NULL) ==
KNOT_EOK, "set zone domain "ZONE2);
// Multi group, single value.
ok(conf_io_set("zone", "file", ZONE1, "name", &io) ==
ok(conf_io_set("zone", "file", ZONE1, "name") ==
KNOT_EOK, "set zone file");
val = conf_zone_get_txn(conf(), conf()->io.txn, C_FILE, zone1);
ok(val.code == KNOT_EOK, "check entry");
ok(strcmp(conf_str(&val), "name") == 0, "check entry value");
// Multi group, single value, bad id.
ok(conf_io_set("zone", "file", ZONE3, "name", &io) ==
ok(conf_io_set("zone", "file", ZONE3, "name") ==
KNOT_YP_EINVAL_ID, "set zone file");
// Multi group, single value, all ids.
ok(conf_io_set("zone", "comment", NULL, "abc", &io) ==
ok(conf_io_set("zone", "comment", NULL, "abc") ==
KNOT_EOK, "set zones comment");
val = conf_zone_get_txn(conf(), conf()->io.txn, C_COMMENT, zone1);
ok(val.code == KNOT_EOK, "check entry");
......@@ -432,9 +424,9 @@ static void test_conf_io_set(void)
ok(strcmp(conf_str(&val), "abc") == 0, "check entry value");
// Prepare different comment.
ok(conf_io_set("zone", "domain", NULL, ZONE3, &io) ==
ok(conf_io_set("zone", "domain", NULL, ZONE3) ==
KNOT_EOK, "set zone domain "ZONE3);
ok(conf_io_set("zone", "comment", ZONE3, "xyz", &io) ==
ok(conf_io_set("zone", "comment", ZONE3, "xyz") ==
KNOT_EOK, "set zone comment");
val = conf_zone_get_txn(conf(), conf()->io.txn, C_COMMENT, zone3);
ok(val.code == KNOT_EOK, "check entry");
......@@ -667,7 +659,7 @@ static void test_conf_io_get(void)
KNOT_ENOTSUP, "get non-group item");
// Update item in the active txn.
ok(conf_io_set("server", "version", NULL, "new text", &io) ==
ok(conf_io_set("server", "version", NULL, "new text") ==
KNOT_EOK, "set single value");
// Get new, active txn.
......@@ -793,7 +785,7 @@ static void test_conf_io_diff(void)
ok(strcmp(ref, out) == 0, "compare result");
// Update singlevalued item.
ok(conf_io_set("server", "version", NULL, "new text", &io) ==
ok(conf_io_set("server", "version", NULL, "new text") ==
KNOT_EOK, "set single value");
*out = '\0';
......@@ -805,7 +797,7 @@ static void test_conf_io_diff(void)
// Update multivalued item.
ok(conf_io_unset("server", "listen", NULL, "1.1.1.1") ==
KNOT_EOK, "unset multivalue");
ok(conf_io_set("server", "listen", NULL, "1.1.1.3", &io) ==
ok(conf_io_set("server", "listen", NULL, "1.1.1.3") ==
KNOT_EOK, "set multivalue");
*out = '\0';
......
Markdown is supported
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