{
struct rspamd_redis_cache_ctx *cache_ctx;
struct rspamd_statfile_config *stf = st->stcf;
- const ucl_object_t *elt;
+ const ucl_object_t *elt, *relt;
cache_ctx = g_slice_alloc0 (sizeof (*cache_ctx));
- elt = ucl_object_find_key (stf->opts, "read_servers");
+ elt = ucl_object_find_any_key (stf->opts, "read_servers", "servers", NULL);
if (elt == NULL) {
- elt = ucl_object_find_key (stf->opts, "servers");
+
+ if (st->classifier->cfg->opts) {
+ elt = ucl_object_find_any_key (st->classifier->cfg->opts,
+ "read_servers", "servers", NULL);
+ }
+
+ if (elt == NULL) {
+ msg_err ("statfile %s has no redis servers needed by cache", stf->symbol);
+
+ return NULL;
+ }
}
- if (elt == NULL) {
- msg_err ("statfile %s has no redis servers", stf->symbol);
+ relt = elt;
+ cache_ctx->read_servers = rspamd_upstreams_create (cfg->ups_ctx);
+ if (!rspamd_upstreams_from_ucl (cache_ctx->read_servers, elt,
+ REDIS_DEFAULT_PORT, NULL)) {
+ msg_err ("statfile %s cannot get read servers configuration for the cache",
+ stf->symbol);
return NULL;
}
- else {
- cache_ctx->read_servers = rspamd_upstreams_create (cfg->ups_ctx);
- if (!rspamd_upstreams_from_ucl (cache_ctx->read_servers, elt,
+
+ elt = ucl_object_find_key (stf->opts, "write_servers");
+ if (elt == NULL) {
+ /* Use read servers as write ones */
+ g_assert (relt != NULL);
+ cache_ctx->write_servers = rspamd_upstreams_create (cfg->ups_ctx);
+ if (!rspamd_upstreams_from_ucl (cache_ctx->read_servers, relt,
REDIS_DEFAULT_PORT, NULL)) {
- msg_err ("statfile %s cannot read servers configuration",
+ msg_err ("statfile %s cannot get read servers configuration for the cache",
stf->symbol);
return NULL;
}
}
-
- elt = ucl_object_find_key (stf->opts, "write_servers");
- if (elt == NULL) {
- msg_err ("statfile %s has no write redis servers, "
- "so learning is impossible", stf->symbol);
- cache_ctx->write_servers = NULL;
- }
else {
cache_ctx->write_servers = rspamd_upstreams_create (cfg->ups_ctx);
if (!rspamd_upstreams_from_ucl (cache_ctx->write_servers, elt,
REDIS_DEFAULT_PORT, NULL)) {
- msg_err ("statfile %s cannot write servers configuration",
+ msg_err ("statfile %s cannot get write servers configuration for the cache",
stf->symbol);
rspamd_upstreams_destroy (cache_ctx->write_servers);
cache_ctx->write_servers = NULL;