#define REDIS_DEFAULT_USERS_OBJECT "%s%l%r"
#define REDIS_DEFAULT_TIMEOUT 0.5
#define REDIS_STAT_TIMEOUT 30
+#define REDIS_MAX_USERS 1000
struct redis_stat_ctx {
lua_State *L;
gboolean new_schema;
gboolean enable_signatures;
guint expiry;
+ guint max_users;
gint cbref_user;
};
if (more) {
/* Get more stat keys */
redisAsyncCommand(cbdata->redis, rspamd_redis_stat_keys, redis_elt,
- "SSCAN %s_keys %s COUNT 1000",
- cbdata->elt->ctx->stcf->symbol, more_elt->str);
+ "SSCAN %s_keys %s COUNT %d",
+ cbdata->elt->ctx->stcf->symbol,
+ more_elt->str,
+ cbdata->elt->ctx->max_users);
cbdata->inflight += 1;
}
cbdata->inflight = 1;
cbdata->cur = ucl_object_typed_new(UCL_OBJECT);
cbdata->elt = redis_elt;
- cbdata->cur_keys = g_ptr_array_sized_new(1000);
+ cbdata->cur_keys = g_ptr_array_sized_new(ctx->max_users);
redis_elt->cbdata = cbdata;
/* XXX: deal with timeouts maybe */
/* Get keys in redis that match our symbol */
rspamd_redis_maybe_auth(ctx, cbdata->redis);
redisAsyncCommand(cbdata->redis, rspamd_redis_stat_keys, redis_elt,
- "SSCAN %s_keys 0 COUNT 1000",
- ctx->stcf->symbol);
+ "SSCAN %s_keys 0 COUNT %d",
+ ctx->stcf->symbol,
+ ctx->max_users);
}
static void
else {
backend->expiry = 0;
}
+
+ elt = ucl_object_lookup(obj, "max_users");
+ if (elt) {
+ backend->max_users = ucl_object_toint(elt);
+ }
+ else {
+ backend->max_users = REDIS_MAX_USERS;
+ }
}
gpointer
backend = g_malloc0(sizeof(*backend));
backend->L = L;
backend->timeout = REDIS_DEFAULT_TIMEOUT;
+ backend->max_users = REDIS_MAX_USERS;
/* First search in backend configuration */
obj = ucl_object_lookup(st->classifier->cfg->opts, "backend");