batch_size: configure the number of emails sent in single requests to solr, default 1000
#define SOLR_HEADER_LINE_MAX_TRUNC_SIZE 1024
#define SOLR_QUERY_MAX_MAILBOX_COUNT 10
-/* How often to flush indexing request to Solr before beginning a new one. */
-#define SOLR_MAIL_FLUSH_INTERVAL 1000
struct solr_fts_backend {
struct fts_backend backend;
(struct solr_fts_backend_update_context *)_ctx;
struct solr_fts_backend *backend =
(struct solr_fts_backend *)_ctx->backend;
+ struct fts_solr_user *fuser = FTS_SOLR_USER_CONTEXT(_ctx->backend->ns->user);
struct solr_fts_field *field;
const char *str;
int ret = _ctx->failed ? -1 : 0;
{
struct solr_fts_backend *backend =
(struct solr_fts_backend *)ctx->ctx.backend;
+ struct fts_solr_user *fuser = FTS_SOLR_USER_CONTEXT(ctx->ctx.backend->ns->user);
- if (ctx->mails_since_flush >= SOLR_MAIL_FLUSH_INTERVAL) {
+ if (ctx->mails_since_flush >= fuser->set.batch_size) {
if (fts_backed_solr_build_flush(ctx) < 0)
ctx->ctx.failed = TRUE;
}
#include "fts-user.h"
#include "fts-solr-plugin.h"
+#define DEFAULT_SOLR_BATCH_SIZE 1000
const char *fts_solr_plugin_version = DOVECOT_ABI_VERSION;
struct http_client *solr_http_client = NULL;
if (str == NULL)
str = "";
+ set->batch_size = DEFAULT_SOLR_BATCH_SIZE;
+
for (tmp = t_strsplit_spaces(str, " "); *tmp != NULL; tmp++) {
if (str_begins(*tmp, "url=")) {
set->url = p_strdup(user->pool, *tmp + 4);
p_strdup(user->pool, *tmp + 11);
} else if (str_begins(*tmp, "rawlog_dir=")) {
set->rawlog_dir = p_strdup(user->pool, *tmp + 11);
+ } else if (str_begins(*tmp, "batch_size=")) {
+ if (str_to_uint(*tmp+11, &set->batch_size) < 0 ||
+ set->batch_size == 0) {
+ i_error("fts_solr: batch_size must be a positive integer");
+ return -1;
+ }
} else {
i_error("fts_solr: Invalid setting: %s", *tmp);
return -1;
struct fts_solr_settings {
const char *url, *default_ns_prefix, *rawlog_dir;
+ unsigned int batch_size;
bool use_libfts;
bool debug;
};