annotate src/lib-dict/dict-transaction-memory.c @ 22325:e01bc3015b2f

lib-index: Check .log.2 rotation only when syncing Instead of also whenever appending transactions to .log file. This shouldn't change the behavior much, and it's needed for the following change to work correctly.
author Timo Sirainen <timo.sirainen@dovecot.fi>
date Tue, 11 Jul 2017 15:33:56 +0300
parents 2e2563132d5f
children cb108f786fb4
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
21390
2e2563132d5f Updated copyright notices to include the year 2017.
Stephan Bosch <stephan.bosch@dovecot.fi>
parents: 19552
diff changeset
1 /* Copyright (c) 2005-2017 Dovecot authors, see the included COPYING file */
14905
e266c31ebd02 lib-dict: Moved "in-memory transaction" code from dict-file to more generic API.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
2
e266c31ebd02 lib-dict: Moved "in-memory transaction" code from dict-file to more generic API.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
3 #include "lib.h"
e266c31ebd02 lib-dict: Moved "in-memory transaction" code from dict-file to more generic API.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
4 #include "array.h"
e266c31ebd02 lib-dict: Moved "in-memory transaction" code from dict-file to more generic API.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
5 #include "dict-transaction-memory.h"
e266c31ebd02 lib-dict: Moved "in-memory transaction" code from dict-file to more generic API.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
6
e266c31ebd02 lib-dict: Moved "in-memory transaction" code from dict-file to more generic API.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
7 void dict_transaction_memory_init(struct dict_transaction_memory_context *ctx,
e266c31ebd02 lib-dict: Moved "in-memory transaction" code from dict-file to more generic API.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
8 struct dict *dict, pool_t pool)
e266c31ebd02 lib-dict: Moved "in-memory transaction" code from dict-file to more generic API.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
9 {
e266c31ebd02 lib-dict: Moved "in-memory transaction" code from dict-file to more generic API.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
10 ctx->ctx.dict = dict;
e266c31ebd02 lib-dict: Moved "in-memory transaction" code from dict-file to more generic API.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
11 ctx->pool = pool;
e266c31ebd02 lib-dict: Moved "in-memory transaction" code from dict-file to more generic API.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
12 p_array_init(&ctx->changes, pool, 32);
e266c31ebd02 lib-dict: Moved "in-memory transaction" code from dict-file to more generic API.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
13 }
e266c31ebd02 lib-dict: Moved "in-memory transaction" code from dict-file to more generic API.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
14
e266c31ebd02 lib-dict: Moved "in-memory transaction" code from dict-file to more generic API.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
15 void dict_transaction_memory_rollback(struct dict_transaction_context *_ctx)
e266c31ebd02 lib-dict: Moved "in-memory transaction" code from dict-file to more generic API.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
16 {
e266c31ebd02 lib-dict: Moved "in-memory transaction" code from dict-file to more generic API.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
17 struct dict_transaction_memory_context *ctx =
e266c31ebd02 lib-dict: Moved "in-memory transaction" code from dict-file to more generic API.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
18 (struct dict_transaction_memory_context *)_ctx;
e266c31ebd02 lib-dict: Moved "in-memory transaction" code from dict-file to more generic API.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
19
e266c31ebd02 lib-dict: Moved "in-memory transaction" code from dict-file to more generic API.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
20 pool_unref(&ctx->pool);
e266c31ebd02 lib-dict: Moved "in-memory transaction" code from dict-file to more generic API.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
21 }
e266c31ebd02 lib-dict: Moved "in-memory transaction" code from dict-file to more generic API.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
22
e266c31ebd02 lib-dict: Moved "in-memory transaction" code from dict-file to more generic API.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
23 void dict_transaction_memory_set(struct dict_transaction_context *_ctx,
e266c31ebd02 lib-dict: Moved "in-memory transaction" code from dict-file to more generic API.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
24 const char *key, const char *value)
e266c31ebd02 lib-dict: Moved "in-memory transaction" code from dict-file to more generic API.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
25 {
e266c31ebd02 lib-dict: Moved "in-memory transaction" code from dict-file to more generic API.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
26 struct dict_transaction_memory_context *ctx =
e266c31ebd02 lib-dict: Moved "in-memory transaction" code from dict-file to more generic API.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
27 (struct dict_transaction_memory_context *)_ctx;
e266c31ebd02 lib-dict: Moved "in-memory transaction" code from dict-file to more generic API.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
28 struct dict_transaction_memory_change *change;
e266c31ebd02 lib-dict: Moved "in-memory transaction" code from dict-file to more generic API.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
29
e266c31ebd02 lib-dict: Moved "in-memory transaction" code from dict-file to more generic API.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
30 change = array_append_space(&ctx->changes);
e266c31ebd02 lib-dict: Moved "in-memory transaction" code from dict-file to more generic API.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
31 change->type = DICT_CHANGE_TYPE_SET;
e266c31ebd02 lib-dict: Moved "in-memory transaction" code from dict-file to more generic API.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
32 change->key = p_strdup(ctx->pool, key);
e266c31ebd02 lib-dict: Moved "in-memory transaction" code from dict-file to more generic API.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
33 change->value.str = p_strdup(ctx->pool, value);
e266c31ebd02 lib-dict: Moved "in-memory transaction" code from dict-file to more generic API.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
34 }
e266c31ebd02 lib-dict: Moved "in-memory transaction" code from dict-file to more generic API.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
35
e266c31ebd02 lib-dict: Moved "in-memory transaction" code from dict-file to more generic API.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
36 void dict_transaction_memory_unset(struct dict_transaction_context *_ctx,
e266c31ebd02 lib-dict: Moved "in-memory transaction" code from dict-file to more generic API.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
37 const char *key)
e266c31ebd02 lib-dict: Moved "in-memory transaction" code from dict-file to more generic API.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
38 {
e266c31ebd02 lib-dict: Moved "in-memory transaction" code from dict-file to more generic API.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
39 struct dict_transaction_memory_context *ctx =
e266c31ebd02 lib-dict: Moved "in-memory transaction" code from dict-file to more generic API.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
40 (struct dict_transaction_memory_context *)_ctx;
e266c31ebd02 lib-dict: Moved "in-memory transaction" code from dict-file to more generic API.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
41 struct dict_transaction_memory_change *change;
e266c31ebd02 lib-dict: Moved "in-memory transaction" code from dict-file to more generic API.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
42
e266c31ebd02 lib-dict: Moved "in-memory transaction" code from dict-file to more generic API.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
43 change = array_append_space(&ctx->changes);
e266c31ebd02 lib-dict: Moved "in-memory transaction" code from dict-file to more generic API.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
44 change->type = DICT_CHANGE_TYPE_UNSET;
e266c31ebd02 lib-dict: Moved "in-memory transaction" code from dict-file to more generic API.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
45 change->key = p_strdup(ctx->pool, key);
e266c31ebd02 lib-dict: Moved "in-memory transaction" code from dict-file to more generic API.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
46 }
e266c31ebd02 lib-dict: Moved "in-memory transaction" code from dict-file to more generic API.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
47
e266c31ebd02 lib-dict: Moved "in-memory transaction" code from dict-file to more generic API.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
48 void dict_transaction_memory_append(struct dict_transaction_context *_ctx,
e266c31ebd02 lib-dict: Moved "in-memory transaction" code from dict-file to more generic API.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
49 const char *key, const char *value)
e266c31ebd02 lib-dict: Moved "in-memory transaction" code from dict-file to more generic API.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
50 {
e266c31ebd02 lib-dict: Moved "in-memory transaction" code from dict-file to more generic API.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
51 struct dict_transaction_memory_context *ctx =
e266c31ebd02 lib-dict: Moved "in-memory transaction" code from dict-file to more generic API.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
52 (struct dict_transaction_memory_context *)_ctx;
e266c31ebd02 lib-dict: Moved "in-memory transaction" code from dict-file to more generic API.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
53 struct dict_transaction_memory_change *change;
e266c31ebd02 lib-dict: Moved "in-memory transaction" code from dict-file to more generic API.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
54
e266c31ebd02 lib-dict: Moved "in-memory transaction" code from dict-file to more generic API.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
55 change = array_append_space(&ctx->changes);
e266c31ebd02 lib-dict: Moved "in-memory transaction" code from dict-file to more generic API.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
56 change->type = DICT_CHANGE_TYPE_APPEND;
e266c31ebd02 lib-dict: Moved "in-memory transaction" code from dict-file to more generic API.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
57 change->key = p_strdup(ctx->pool, key);
e266c31ebd02 lib-dict: Moved "in-memory transaction" code from dict-file to more generic API.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
58 change->value.str = p_strdup(ctx->pool, value);
e266c31ebd02 lib-dict: Moved "in-memory transaction" code from dict-file to more generic API.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
59 }
e266c31ebd02 lib-dict: Moved "in-memory transaction" code from dict-file to more generic API.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
60
e266c31ebd02 lib-dict: Moved "in-memory transaction" code from dict-file to more generic API.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
61 void dict_transaction_memory_atomic_inc(struct dict_transaction_context *_ctx,
e266c31ebd02 lib-dict: Moved "in-memory transaction" code from dict-file to more generic API.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
62 const char *key, long long diff)
e266c31ebd02 lib-dict: Moved "in-memory transaction" code from dict-file to more generic API.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
63 {
e266c31ebd02 lib-dict: Moved "in-memory transaction" code from dict-file to more generic API.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
64 struct dict_transaction_memory_context *ctx =
e266c31ebd02 lib-dict: Moved "in-memory transaction" code from dict-file to more generic API.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
65 (struct dict_transaction_memory_context *)_ctx;
e266c31ebd02 lib-dict: Moved "in-memory transaction" code from dict-file to more generic API.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
66 struct dict_transaction_memory_change *change;
e266c31ebd02 lib-dict: Moved "in-memory transaction" code from dict-file to more generic API.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
67
e266c31ebd02 lib-dict: Moved "in-memory transaction" code from dict-file to more generic API.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
68 change = array_append_space(&ctx->changes);
e266c31ebd02 lib-dict: Moved "in-memory transaction" code from dict-file to more generic API.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
69 change->type = DICT_CHANGE_TYPE_INC;
e266c31ebd02 lib-dict: Moved "in-memory transaction" code from dict-file to more generic API.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
70 change->key = p_strdup(ctx->pool, key);
e266c31ebd02 lib-dict: Moved "in-memory transaction" code from dict-file to more generic API.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
71 change->value.diff = diff;
e266c31ebd02 lib-dict: Moved "in-memory transaction" code from dict-file to more generic API.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
72 }