Skip to content

Commit

Permalink
dict-sql: Remove unnecessary "affected rows" tracking from dict_set()
Browse files Browse the repository at this point in the history
This was useful for dict_atomic_inc(), but not for dict_set().

Fixes assert-crash with Cassandra:
Panic: file driver-cassandra.c: line 1350 (driver_cassandra_update): assertion failed: (affected_rows == NULL)
  • Loading branch information
sirainen committed Jan 15, 2017
1 parent bfd7b7e commit 25d2704
Showing 1 changed file with 3 additions and 22 deletions.
25 changes: 3 additions & 22 deletions src/lib-dict/dict-sql.c
Expand Up @@ -69,8 +69,6 @@ struct sql_dict_transaction_context {
const struct dict_sql_map *prev_set_map;
char *prev_set_key;
char *prev_set_value;
pool_t set_row_pool;
struct sql_dict_inc_row *set_row;

dict_transaction_commit_callback_t *async_callback;
void *async_context;
Expand Down Expand Up @@ -807,8 +805,6 @@ static void sql_dict_transaction_free(struct sql_dict_transaction_context *ctx)
{
if (ctx->inc_row_pool != NULL)
pool_unref(&ctx->inc_row_pool);
if (ctx->set_row_pool != NULL)
pool_unref(&ctx->set_row_pool);
i_free(ctx->prev_inc_key);
i_free(ctx);
}
Expand Down Expand Up @@ -1072,6 +1068,8 @@ static void sql_dict_set_real(struct dict_transaction_context *_ctx,

if (ctx->prev_inc_map != NULL)
sql_dict_prev_inc_flush(ctx);
if (ctx->prev_set_map != NULL)
sql_dict_prev_set_flush(ctx);

T_BEGIN {
struct dict_sql_build_query build;
Expand Down Expand Up @@ -1143,22 +1141,6 @@ sql_dict_append(struct dict_transaction_context *_ctx,
ctx->failed = TRUE;
}

static unsigned int *
sql_dict_next_set_row(struct sql_dict_transaction_context *ctx)
{
struct sql_dict_inc_row *row;

if (ctx->set_row_pool == NULL) {
ctx->set_row_pool =
pool_alloconly_create("sql dict set rows", 128);
}
row = p_new(ctx->set_row_pool, struct sql_dict_inc_row, 1);
row->prev = ctx->set_row;
row->rows = UINT_MAX;
ctx->set_row = row;
return &row->rows;
}

static unsigned int *
sql_dict_next_inc_row(struct sql_dict_transaction_context *ctx)
{
Expand Down Expand Up @@ -1317,8 +1299,7 @@ static void sql_dict_set(struct dict_transaction_context *_ctx,
i_error("dict-sql: Failed to set %s: %s", key, error);
ctx->failed = TRUE;
} else {
sql_update_get_rows(ctx->sql_ctx, query,
sql_dict_next_set_row(ctx));
sql_update(ctx->sql_ctx, query);
}
i_free_and_null(ctx->prev_set_value);
i_free_and_null(ctx->prev_set_key);
Expand Down

0 comments on commit 25d2704

Please sign in to comment.