[JAVA-2609] mongo throws IllegalStateException: state should be: open Created: 21/Sep/17  Updated: 27/Oct/23  Resolved: 03/Oct/17

Status: Closed
Project: Java Driver
Component/s: None
Affects Version/s: None
Fix Version/s: None

Type: Task Priority: Major - P3
Reporter: Hongkai Wu [X] Assignee: Unassigned
Resolution: Works as Designed Votes: 0
Labels: None
Remaining Estimate: Not Specified
Time Spent: Not Specified
Original Estimate: Not Specified


 Description   

I meet IllegalStateException: state should be: open and wonder how to solve it. Below is more context:

[mongo context]
mongo replica set: 3 nodes
version: 3.4 with WiredTiger
mongo driver in the app: java driver

[app context]
We have 12 workers to process log and write/read related information to mongo. Each worker has multiple threads.

[operation]
MongoCursor<BasicDBObject> cursor = getArrayCollection().aggregate(aggregateParams, BasicDBObject.class).iterator();

[log]
2017-09-15 17:57:17.505 ERROR 14373 [SQSConsumerFixed-18] — c.p.s.worker.sqs.DiagLogWorkerHandler :[2118482-264832996-317561309355740509, OSDiagLogWorkerHandler] Got exception that will be reprocessed
java.lang.IllegalStateException: state should be: open
at com.mongodb.assertions.Assertions.isTrue(Assertions.java:70)
at com.mongodb.connection.BaseCluster.selectServer(BaseCluster.java:82)
at com.mongodb.binding.ClusterBinding$ClusterBindingConnectionSource.<init>(ClusterBinding.java:75)
at com.mongodb.binding.ClusterBinding$ClusterBindingConnectionSource.<init>(ClusterBinding.java:71)
at com.mongodb.binding.ClusterBinding.getReadConnectionSource(ClusterBinding.java:63)
at com.mongodb.operation.OperationHelper.withConnection(OperationHelper.java:402)
at com.mongodb.operation.AggregateOperation.execute(AggregateOperation.java:253)
at com.mongodb.operation.AggregateOperation.execute(AggregateOperation.java:67)
at com.mongodb.Mongo.execute(Mongo.java:836)
at com.mongodb.Mongo$2.execute(Mongo.java:823)
at com.mongodb.OperationIterable.iterator(OperationIterable.java:47)
at com.mongodb.AggregateIterableImpl.iterator(AggregateIterableImpl.java:123)
at com.purestorage.spog.array.ArrayInfoDaoImpl.getArrays_aroundBody0(ArrayInfoDaoImpl.java:122)
at com.purestorage.spog.array.ArrayInfoDaoImpl.getArrays_aroundBody1$advice(ArrayInfoDaoImpl.java:31)
at com.purestorage.spog.array.ArrayInfoDaoImpl.getArrays(ArrayInfoDaoImpl.java:1)
at com.purestorage.spog.worker.diagnostics.FreqDiagLogProcessorBase.isLatestDiag(FreqDiagLogProcessorBase.java:127)
at com.purestorage.spog.worker.diagnostics.OSFreqDiagLogProcessor.processDiagnosticLog_aroundBody0(OSFreqDiagLogProcessor.java:129)
at com.purestorage.spog.worker.diagnostics.OSFreqDiagLogProcessor.processDiagnosticLog_aroundBody1$advice(OSFreqDiagLogProcessor.java:31)
at com.purestorage.spog.worker.diagnostics.OSFreqDiagLogProcessor.processDiagnosticLog(OSFreqDiagLogProcessor.java:1)
at com.purestorage.spog.worker.sqs.DiagLogWorkerHandler.processDiagnosticsLog(DiagLogWorkerHandler.java:255)
at com.purestorage.spog.worker.sqs.DiagLogWorkerHandler.onHandle(DiagLogWorkerHandler.java:173)
at com.purestorage.spog.worker.sqs.OSDiagLogWorkerHandler.onHandle_aroundBody0(OSDiagLogWorkerHandler.java:43)
at com.purestorage.spog.worker.sqs.OSDiagLogWorkerHandler.onHandle_aroundBody1$advice(OSDiagLogWorkerHandler.java:31)
at com.purestorage.spog.worker.sqs.OSDiagLogWorkerHandler.onHandle(OSDiagLogWorkerHandler.java:1)
at com.purestorage.sqshandler.SQSConsumerFixed$SQSWorkerRunnable.lambda$processMessage$0(SQSConsumerFixed.java:220)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)



 Comments   
Comment by Oleh Batih [ 19/May/20 ]

How did you fix that?

Comment by Jeffrey Yemin [ 03/Oct/17 ]

I'm glad you worked it out. Good luck!

Comment by Hongkai Wu [X] [ 21/Sep/17 ]

Hi Jeff,
Thank you so much for this info. You are right. The problem is from Spring side.
Somehow Springboot automatically tries to close the MongoClient and re-initialize the bean. This cause the problem.

Comment by Jeffrey Yemin [ 21/Sep/17 ]

This generally happens when another part of the application has closed the MongoClient via MongoClient#close. The application must ensure that a MongoClient is not used after it's been closed.

Generated at Thu Feb 08 08:57:39 UTC 2024 using Jira 9.7.1#970001-sha1:2222b88b221c4928ef0de3161136cc90c8356a66.