--- src/plugins/fts-solr/fts-solr-plugin.h.orig 2019-04-14 15:12:07.694289402 +0200 +++ src/plugins/fts-solr/fts-solr-plugin.h 2019-04-14 14:04:17.213939414 +0200 @@ -12,8 +12,10 @@ struct fts_solr_settings { const char *url, *default_ns_prefix; + unsigned int batch_size; bool use_libfts; bool debug; + bool no_soft_commit; }; struct fts_solr_user { --- src/plugins/fts-solr/fts-solr-plugin.c.orig 2019-04-14 11:41:03.591782439 +0200 +++ src/plugins/fts-solr/fts-solr-plugin.c 2019-04-14 14:37:46.059433864 +0200 @@ -10,6 +10,8 @@ #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; @@ -37,6 +39,10 @@ } else if (str_begins(*tmp, "default_ns=")) { set->default_ns_prefix = p_strdup(user->pool, *tmp + 11); + } else if (str_begins(*tmp, "batch_size=")) { + set->batch_size = atoi(*tmp + 11); + } else if (str_begins(*tmp, "no_soft_commit")) { + set->no_soft_commit = TRUE; } else { i_error("fts_solr: Invalid setting: %s", *tmp); return -1; @@ -46,6 +52,7 @@ i_error("fts_solr: url setting missing"); return -1; } + if (set->batch_size <= 0) set->batch_size = DEFAULT_SOLR_BATCH_SIZE; return 0; } --- src/plugins/fts-solr/fts-backend-solr.c.orig 2019-04-14 13:27:56.694117159 +0200 +++ src/plugins/fts-solr/fts-backend-solr.c 2019-04-14 14:40:12.513938845 +0200 @@ -28,8 +28,6 @@ #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; @@ -392,6 +390,9 @@ (struct solr_fts_backend_update_context *)_ctx; struct solr_fts_backend *backend = (struct solr_fts_backend *)_ctx->backend; + struct fts_backend *_backend = + (struct solr_fts_backend *)_ctx->backend; + struct fts_solr_user *fuser = FTS_SOLR_USER_CONTEXT(_backend->ns->user); struct solr_fts_field *field; const char *str; int ret = _ctx->failed ? -1 : 0; @@ -404,10 +405,12 @@ visible to the following search */ if (ctx->expunges) fts_backend_solr_expunge_flush(ctx); - str = t_strdup_printf("", + if(!fuser->set.no_soft_commit) { + str = t_strdup_printf("", ctx->documents_added ? "true" : "false"); - if (solr_connection_post(backend->solr_conn, str) < 0) - ret = -1; + if (solr_connection_post(backend->solr_conn, str) < 0) + ret = -1; + } } str_free(&ctx->cmd); @@ -494,10 +496,13 @@ { struct solr_fts_backend *backend = (struct solr_fts_backend *)ctx->ctx.backend; - - if (ctx->mails_since_flush++ >= SOLR_MAIL_FLUSH_INTERVAL) { + struct fts_backend *_backend = + (struct solr_fts_backend *)ctx->ctx.backend; + struct fts_solr_user *fuser = FTS_SOLR_USER_CONTEXT(_backend->ns->user); + if (ctx->mails_since_flush++ >= fuser->set.batch_size) { if (fts_backed_solr_build_flush(ctx) < 0) ctx->ctx.failed = TRUE; + ctx->mails_since_flush++; } if (ctx->post == NULL) { if (ctx->cmd == NULL) [root@server02 dovecot-2.3.5.1]#