Mercurial > dovecot > core-2.2
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 |
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 } |