Force merge of index did not complete in 1 hour messages in logs

After upgrading Graylog to 7.1.2-1, OptimizeIndexJob started failing during index optimization / force merge.

It looks like Graylog does not wait for elasticsearch_index_optimization_timeout. Instead, the job fails when elasticsearch_socket_timeout is reached.

Before the upgrade, the same kind of optimize jobs completed successfully and took sometimes 15 minutes. After the upgrade, the job fails after defined elasticsearch_socket_timeout.

Is this expected behavior in Graylog 7.1?

Example (elasticsearch_socket_timeout 5m):

2026-05-26T08:36:30.163Z INFO [OptimizeIndexJob] Optimizing index <vmware-vcenter_33>

2026-05-26T08:41:30.362Z ERROR [OptimizeIndexJob] Error optimizing index <vmware-vcenter_33> java.lang.RuntimeException: Force merge of index vmware-vcenter_33 did not complete in 1 hour, not waiting for completion any longer. at org.graylog.storage.opensearch3.OfficialOpensearchClient.mapException(OfficialOpensearchClient.java:207) at org.graylog.storage.opensearch3.OfficialOpensearchClient.executeWithClientTimeout(OfficialOpensearchClient.java:104) at org.graylog.storage.opensearch3.IndicesAdapterOS.optimizeIndex(IndicesAdapterOS.java:637) at org.graylog2.indexer.indices.Indices.optimizeIndex(Indices.java:410) at org.graylog2.indexer.indices.jobs.OptimizeIndexJob.doExecute(OptimizeIndexJob.java:112) at org.graylog2.indexer.indices.jobs.OptimizeIndexJob.execute(OptimizeIndexJob.java:84) at org.graylog2.indexer.indices.jobs.OptimizeIndexJob.execute(OptimizeIndexJob.java:46) at org.graylog.scheduler.system.SystemJob.execute(SystemJob.java:46) at org.graylog.scheduler.JobExecutionEngine.executeJob(JobExecutionEngine.java:299) at org.graylog.scheduler.JobExecutionEngine.lambda$handleTrigger$4(JobExecutionEngine.java:272) at com.codahale.metrics.Timer.time(Timer.java:151) at org.graylog.scheduler.JobExecutionEngine.handleTrigger(JobExecutionEngine.java:272) at org.graylog.scheduler.JobExecutionEngine.handleTriggerWithConcurrencyLimit(JobExecutionEngine.java:244) at org.graylog.scheduler.JobExecutionEngine.lambda$execute$2(JobExecutionEngine.java:209) at org.graylog.scheduler.worker.JobWorkerPool.lambda$execute$0(JobWorkerPool.java:115) at com.codahale.metrics.InstrumentedExecutorService$InstrumentedRunnable.run(InstrumentedExecutorService.java:259) at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) at com.codahale.metrics.InstrumentedThreadFactory$InstrumentedRunnable.run(InstrumentedThreadFactory.java:66) at java.base/java.lang.Thread.run(Unknown Source) Caused by: java.util.concurrent.ExecutionException: java.lang.RuntimeException: Force merge of index vmware-vcenter_33 did not complete in 1 hour, not waiting for completion any longer. at java.base/java.util.concurrent.CompletableFuture.reportGet(Unknown Source) at java.base/java.util.concurrent.CompletableFuture.get(Unknown Source) at org.graylog.storage.opensearch3.OfficialOpensearchClient.executeWithClientTimeout(OfficialOpensearchClient.java:102) … 18 more Caused by: java.lang.RuntimeException: Force merge of index vmware-vcenter_33 did not complete in 1 hour, not waiting for completion any longer. at org.graylog.storage.opensearch3.OfficialOpensearchClient.mapException(OfficialOpensearchClient.java:207) at org.graylog.storage.opensearch3.OfficialOpensearchClient.lambda$async$1(OfficialOpensearchClient.java:111) at java.base/java.util.concurrent.CompletableFuture.uniExceptionally(Unknown Source) at java.base/java.util.concurrent.CompletableFuture$UniExceptionally.tryFire(Unknown Source) at java.base/java.util.concurrent.CompletableFuture.postComplete(Unknown Source) at java.base/java.util.concurrent.CompletableFuture.completeExceptionally(Unknown Source) at org.opensearch.client.transport.httpclient5.ApacheHttpClient5Transport$1.failed(ApacheHttpClient5Transport.java:257) at org.apache.hc.core5.concurrent.BasicFuture.failed(BasicFuture.java:166) at org.apache.hc.core5.concurrent.ComplexFuture.failed(ComplexFuture.java:79) at org.apache.hc.client5.http.impl.async.InternalAbstractHttpAsyncClient$2.failed(InternalAbstractHttpAsyncClient.java:367) at org.apache.hc.client5.http.impl.async.AsyncRedirectExec$1.failed(AsyncRedirectExec.java:261) at org.apache.hc.client5.http.impl.async.AsyncProtocolExec$1.failed(AsyncProtocolExec.java:297) at org.apache.hc.client5.http.impl.async.HttpAsyncMainClientExec$1.failed(HttpAsyncMainClientExec.java:135) at org.apache.hc.core5.http.impl.nio.ClientHttp1StreamHandler.failed(ClientHttp1StreamHandler.java:300) at org.apache.hc.core5.http.impl.nio.ClientHttp1StreamDuplexer.terminate(ClientHttp1StreamDuplexer.java:193) at org.apache.hc.core5.http.impl.nio.AbstractHttp1StreamDuplexer.shutdownSession(AbstractHttp1StreamDuplexer.java:165) at org.apache.hc.core5.http.impl.nio.AbstractHttp1StreamDuplexer.onException(AbstractHttp1StreamDuplexer.java:409) at org.apache.hc.core5.http.impl.nio.AbstractHttp1StreamDuplexer.onTimeout(AbstractHttp1StreamDuplexer.java:404) at org.apache.hc.core5.http.impl.nio.AbstractHttp1IOEventHandler.timeout(AbstractHttp1IOEventHandler.java:82) at org.apache.hc.core5.http.impl.nio.ClientHttp1IOEventHandler.timeout(ClientHttp1IOEventHandler.java:41) at org.apache.hc.core5.reactor.InternalDataChannel.onTimeout(InternalDataChannel.java:170) at org.apache.hc.core5.reactor.InternalChannel.checkTimeout(InternalChannel.java:67) at org.apache.hc.core5.reactor.SingleCoreIOReactor.checkTimeout(SingleCoreIOReactor.java:239) at org.apache.hc.core5.reactor.SingleCoreIOReactor.validateActiveChannels(SingleCoreIOReactor.java:166) at org.apache.hc.core5.reactor.SingleCoreIOReactor.doExecute(SingleCoreIOReactor.java:128) at org.apache.hc.core5.reactor.AbstractSingleCoreIOReactor.execute(AbstractSingleCoreIOReactor.java:92) at org.apache.hc.core5.reactor.IOReactorWorker.run(IOReactorWorker.java:44) … 1 more Caused by: java.util.concurrent.CompletionException: java.net.SocketTimeoutException: 300 SECONDS at java.base/java.util.concurrent.CompletableFuture.encodeThrowable(Unknown Source) at java.base/java.util.concurrent.CompletableFuture.completeThrowable(Unknown Source) at java.base/java.util.concurrent.CompletableFuture$UniApply.tryFire(Unknown Source) … 24 more Caused by: java.net.SocketTimeoutException: 300 SECONDS at org.apache.hc.core5.io.SocketTimeoutExceptionFactory.create(SocketTimeoutExceptionFactory.java:50) … 11 more

Hey @rihorr,

It seems you are not alone in experiencing this. I would suggest you follow the linked issue for updates.

@rihorr, this will be fixed with with the next bug fix release.