dovecot-2.2: dict-redis: Use EXPIRE also after INCRBY commands.
dovecot at dovecot.org
dovecot at dovecot.org
Tue Dec 2 08:26:48 UTC 2014
details: http://hg.dovecot.org/dovecot-2.2/rev/668068a45447
changeset: 18121:668068a45447
user: Timo Sirainen <tss at iki.fi>
date: Tue Dec 02 00:26:24 2014 -0800
description:
dict-redis: Use EXPIRE also after INCRBY commands.
diffstat:
src/lib-dict/dict-redis.c | 41 +++++++++++++++++++++++++++--------------
1 files changed, 27 insertions(+), 14 deletions(-)
diffs (73 lines):
diff -r 096d233acb7d -r 668068a45447 src/lib-dict/dict-redis.c
--- a/src/lib-dict/dict-redis.c Mon Dec 01 22:43:33 2014 +0200
+++ b/src/lib-dict/dict-redis.c Tue Dec 02 00:26:24 2014 -0800
@@ -635,6 +635,23 @@
return 0;
}
+static void
+redis_append_expire(struct redis_dict_transaction_context *ctx,
+ string_t *cmd, const char *key)
+{
+ struct redis_dict *dict = (struct redis_dict *)ctx->ctx.dict;
+
+ if (dict->expire_value == NULL)
+ return;
+
+ str_printfa(cmd, "*3\r\n$6\r\nEXPIRE\r\n$%u\r\n%s\r\n$%u\r\n%s\r\n",
+ (unsigned int)strlen(key), key,
+ (unsigned int)strlen(dict->expire_value),
+ dict->expire_value);
+ redis_input_state_add(dict, REDIS_INPUT_STATE_MULTI);
+ ctx->cmd_count++;
+}
+
static void redis_set(struct dict_transaction_context *_ctx,
const char *key, const char *value)
{
@@ -653,14 +670,7 @@
(unsigned int)strlen(value), value);
redis_input_state_add(dict, REDIS_INPUT_STATE_MULTI);
ctx->cmd_count++;
- if (dict->expire_value != NULL) {
- str_printfa(cmd, "*3\r\n$6\r\nEXPIRE\r\n$%u\r\n%s\r\n$%u\r\n%s\r\n",
- (unsigned int)strlen(key), key,
- (unsigned int)strlen(dict->expire_value),
- dict->expire_value);
- redis_input_state_add(dict, REDIS_INPUT_STATE_MULTI);
- ctx->cmd_count++;
- }
+ redis_append_expire(ctx, cmd, key);
if (o_stream_send(dict->conn.conn.output, str_data(cmd), str_len(cmd)) < 0)
ctx->failed = TRUE;
}
@@ -712,20 +722,23 @@
struct redis_dict_transaction_context *ctx =
(struct redis_dict_transaction_context *)_ctx;
struct redis_dict *dict = (struct redis_dict *)_ctx->dict;
- const char *cmd, *diffstr;
+ const char *diffstr;
+ string_t *cmd;
if (redis_check_transaction(ctx) < 0)
return;
key = redis_dict_get_full_key(dict, key);
diffstr = t_strdup_printf("%lld", diff);
- cmd = t_strdup_printf("*3\r\n$6\r\nINCRBY\r\n$%u\r\n%s\r\n$%u\r\n%s\r\n",
- (unsigned int)strlen(key), key,
- (unsigned int)strlen(diffstr), diffstr);
- if (o_stream_send_str(dict->conn.conn.output, cmd) < 0)
- ctx->failed = TRUE;
+ cmd = t_str_new(128);
+ str_printfa(cmd, "*3\r\n$6\r\nINCRBY\r\n$%u\r\n%s\r\n$%u\r\n%s\r\n",
+ (unsigned int)strlen(key), key,
+ (unsigned int)strlen(diffstr), diffstr);
redis_input_state_add(dict, REDIS_INPUT_STATE_MULTI);
ctx->cmd_count++;
+ redis_append_expire(ctx, cmd, key);
+ if (o_stream_send(dict->conn.conn.output, str_data(cmd), str_len(cmd)) < 0)
+ ctx->failed = TRUE;
}
struct dict dict_driver_redis = {
More information about the dovecot-cvs
mailing list