Only adds the parameter, doesn't use it.
trans = array_append_space(&cmd->conn->transactions);
trans->id = id;
trans->conn = cmd->conn;
- trans->ctx = dict_transaction_begin(cmd->conn->dict);
+ trans->ctx = dict_transaction_begin(cmd->conn->dict, NULL);
return 0;
}
if (cmd_dict_init(cctx, cmd_dict_set, &dict) < 0)
return;
- trans = dict_transaction_begin(dict);
+ trans = dict_transaction_begin(dict, NULL);
dict_set(trans, key, value);
if (dict_transaction_commit(&trans, &error) <= 0) {
i_error("dict_transaction_commit() failed: %s", error);
if (cmd_dict_init(cctx, cmd_dict_unset, &dict) < 0)
return;
- trans = dict_transaction_begin(dict);
+ trans = dict_transaction_begin(dict, NULL);
dict_unset(trans, key);
if (dict_transaction_commit(&trans, &error) <= 0) {
i_error("dict_transaction_commit() failed: %s", error);
if (cmd_dict_init(cctx, cmd_dict_inc, &dict) < 0)
return;
- trans = dict_transaction_begin(dict);
+ trans = dict_transaction_begin(dict, NULL);
dict_atomic_inc(trans, key, diff);
ret = dict_transaction_commit(&trans, &error);
if (ret < 0) {
test_set_expected(dict, &res);
/* 1 field */
- struct dict_transaction_context *ctx = dict_transaction_begin(dict);
+ struct dict_transaction_context *ctx = dict_transaction_begin(dict, NULL);
dict_atomic_inc(ctx, "shared/counters/global/counter", 128);
test_assert(dict_transaction_commit(&ctx, &error) == 0);
if (error != NULL)
error = NULL;
/* 2 fields */
- ctx = dict_transaction_begin(dict);
+ ctx = dict_transaction_begin(dict, NULL);
dict_atomic_inc(ctx, "priv/quota/bytes", 128);
dict_atomic_inc(ctx, "priv/quota/count", 1);
test_assert(dict_transaction_commit(&ctx, &error) == 0);
error = NULL;
/* 3 fields */
- ctx = dict_transaction_begin(dict);
+ ctx = dict_transaction_begin(dict, NULL);
dict_atomic_inc(ctx, "priv/quota/bytes", 128);
dict_atomic_inc(ctx, "priv/quota/count", 1);
dict_atomic_inc(ctx, "priv/quota/folders", 123);
test_set_expected(dict, &res);
/* 1 field */
- struct dict_transaction_context *ctx = dict_transaction_begin(dict);
+ struct dict_transaction_context *ctx = dict_transaction_begin(dict, NULL);
dict_set(ctx, "shared/counters/global/counter", "128");
test_assert(dict_transaction_commit(&ctx, &error) == 1);
if (error != NULL)
error = NULL;
/* 2 fields */
- ctx = dict_transaction_begin(dict);
+ ctx = dict_transaction_begin(dict, NULL);
dict_set(ctx, "priv/quota/bytes", "128");
dict_set(ctx, "priv/quota/count", "1");
test_assert(dict_transaction_commit(&ctx, &error) == 1);
error = NULL;
/* 3 fields */
- ctx = dict_transaction_begin(dict);
+ ctx = dict_transaction_begin(dict, NULL);
dict_set(ctx, "priv/quota/bytes", "128");
dict_set(ctx, "priv/quota/count", "1");
dict_set(ctx, "priv/quota/folders", "123");
test_set_expected(dict, &res);
- struct dict_transaction_context *ctx = dict_transaction_begin(dict);
+ struct dict_transaction_context *ctx = dict_transaction_begin(dict, NULL);
dict_unset(ctx, "shared/counters/global/counter");
test_assert(dict_transaction_commit(&ctx, &error) == 1);
if (error != NULL)
i_error("dict_transaction_commit failed: %s", error);
error = NULL;
- ctx = dict_transaction_begin(dict);
+ ctx = dict_transaction_begin(dict, NULL);
dict_unset(ctx, "priv/quota/bytes");
dict_unset(ctx, "priv/quota/count");
test_assert(dict_transaction_commit(&ctx, &error) == 1);
const char *value)
{
const char *got_value, *error;
- struct dict_transaction_context *t = dict_transaction_begin(dict);
+ struct dict_transaction_context *t = dict_transaction_begin(dict, NULL);
dict_set(t, key, value);
if (dict_transaction_commit(&t, &error) < 0)
i_fatal("dict_transaction_commit(%s) failed: %s", key, error);
pool = pool_alloconly_create("lua dict txn", 128);
txn = p_new(pool, struct lua_dict_txn, 1);
txn->pool = pool;
- txn->txn = dict_transaction_begin(dict);
+ txn->txn = dict_transaction_begin(dict, NULL);
txn->state = STATE_OPEN;
txn->L = L;
return ret;
}
-struct dict_transaction_context *dict_transaction_begin(struct dict *dict)
+struct dict_transaction_context *
+dict_transaction_begin(struct dict *dict, const struct dict_op_settings *set ATTR_UNUSED)
{
struct dict_transaction_context *ctx;
guid_128_t guid;
int dict_iterate_deinit(struct dict_iterate_context **ctx, const char **error_r);
/* Start a new dictionary transaction. */
-struct dict_transaction_context *dict_transaction_begin(struct dict *dict);
+struct dict_transaction_context *
+dict_transaction_begin(struct dict *dict, const struct dict_op_settings *set);
/* Don't log a warning if the transaction commit took a long time.
This is needed if there are no guarantees that an asynchronous commit will
finish up anytime soon. Mainly useful for transactions which aren't
struct dict_transaction_context *trans;
pending++;
- trans = dict_transaction_begin(dict);
+ trans = dict_transaction_begin(dict, NULL);
dict_set(trans, key, value);
dict_transaction_commit_async(&trans, commit_callback, NULL);
break;
struct dict_transaction_context *trans;
pending++;
- trans = dict_transaction_begin(dict);
+ trans = dict_transaction_begin(dict, NULL);
dict_unset(trans, key);
dict_transaction_commit_async(&trans, commit_callback, NULL);
break;
return -1;
fs_dict_write_rename_if_needed(file);
- trans = dict_transaction_begin(fs->dict);
+ trans = dict_transaction_begin(fs->dict, NULL);
switch (fs->encoding) {
case FS_DICT_VALUE_ENCODING_RAW:
dict_set(trans, file->key, str_c(file->write_buffer));
struct dict_transaction_context *trans;
const char *error;
- trans = dict_transaction_begin(fs->dict);
+ trans = dict_transaction_begin(fs->dict, NULL);
dict_unset(trans, file->key);
if (dict_transaction_commit(&trans, &error) < 0) {
fs_set_error(_file->event, EIO,
{
const char *error;
struct dict_transaction_context *ctx =
- dict_transaction_begin(keys_dict);
+ dict_transaction_begin(keys_dict, NULL);
algo = t_str_ucase(algo);
dict_set(ctx, t_strconcat(DICT_PATH_SHARED, azp, "/", algo, "/",
name, NULL),
if (index_storage_get_dict(t->box, type_flags, &dict, mailbox_prefix_r) < 0)
return -1;
i_assert(*dtransp == NULL);
- *dtransp = *dtrans_r = dict_transaction_begin(dict);
+ *dtransp = *dtrans_r = dict_transaction_begin(dict, NULL);
return 0;
}
/* new identifier, add it */
str_truncate(path, prefix_len);
str_append(path, new_ids[newi]);
- dt = dict_transaction_begin(dict->dict);
+ dt = dict_transaction_begin(dict->dict, NULL);
dict_set(dt, str_c(path), "1");
newi++;
} else if (!no_removes) {
str_append(path, old_ids[oldi]);
str_append_c(path, '/');
str_append(path, username);
- dt = dict_transaction_begin(dict->dict);
+ dt = dict_transaction_begin(dict->dict, NULL);
dict_unset(dt, str_c(path));
oldi++;
}
precision = mail_user_plugin_getenv(user, "last_login_precision");
- trans = dict_transaction_begin(dict);
+ trans = dict_transaction_begin(dict, NULL);
if (precision == NULL || strcmp(precision, "s") == 0)
dict_set(trans, key_name, dec2str(ioloop_time));
else if (strcmp(precision, "ms") == 0) {
i_error("notify-status: var_expand(%s) failed: %s",
nuser->value_template, error);
} else {
- t = dict_transaction_begin(nuser->dict);
+ t = dict_transaction_begin(nuser->dict, NULL);
dict_set(t, key, str_c(dest));
dict_transaction_commit_async(&t, notify_update_callback, NULL) ;
}
const char *key =
t_strdup_printf(NOTIFY_STATUS_KEY, mailbox_get_vname(box));
- t = dict_transaction_begin(nuser->dict);
+ t = dict_transaction_begin(nuser->dict, NULL);
dict_unset(t, key);
dict_transaction_commit_async(&t, notify_update_callback, NULL) ;
}
the special case of lookup changing from
RESULT_LIMITED/RESULT_UNLIMITED to RESULT_UNKNOWN_RESOURCE, which
leaves the old value unchanged. */
- trans = dict_transaction_begin(quser->dict);
+ trans = dict_transaction_begin(quser->dict, NULL);
if (bytes_res == QUOTA_GET_RESULT_LIMITED ||
bytes_res == QUOTA_GET_RESULT_UNLIMITED) {
dict_set(trans, DICT_QUOTA_CLONE_BYTES_PATH,
if (quota_count(&root->root, &bytes, &count, &error_res, error_r) < 0)
return error_res;
- dt = dict_transaction_begin(root->dict);
+ dt = dict_transaction_begin(root->dict, NULL);
/* these unsets are mainly necessary for pgsql, because its
trigger otherwise increases quota without deleting it.
but some people with other databases want to store the
<= QUOTA_GET_RESULT_INTERNAL_ERROR)
return -1;
} else {
- dt = dict_transaction_begin(root->dict);
+ dt = dict_transaction_begin(root->dict, NULL);
if (ctx->bytes_used != 0) {
dict_atomic_inc(dt, DICT_QUOTA_CURRENT_BYTES_PATH,
ctx->bytes_used);
}
}
- trans = dict_transaction_begin(root->limit_set_dict);
+ trans = dict_transaction_begin(root->limit_set_dict, NULL);
key = t_strdup_printf(QUOTA_LIMIT_SET_PATH"%s", key);
dict_set(trans, key, dec2str(value));
if (dict_transaction_commit(&trans, &error) < 0) {