hono
hono copied to clipboard
MongoDB Device Registry: IllegalStateException on close
When the MongoDB device registry component is shut down, there may be exceptions like this in the log:
WARN org.eclipse.hono.tracing.TracingHelper An unexpected error occurred!
java.lang.IllegalStateException: state should be: server session pool is open
at com.mongodb.assertions.Assertions.isTrue(Assertions.java:70)
at com.mongodb.internal.session.ServerSessionPool.get(ServerSessionPool.java:79)
at com.mongodb.internal.session.BaseClientSessionImpl.<init>(BaseClientSessionImpl.java:40)
at com.mongodb.async.client.ClientSessionImpl.<init>(ClientSessionImpl.java:49)
at com.mongodb.async.client.ClientSessionHelper.createClientSession(ClientSessionHelper.java:102)
at com.mongodb.async.client.ClientSessionHelper.createClientSession(ClientSessionHelper.java:66)
at com.mongodb.async.client.ClientSessionHelper.withClientSession(ClientSessionHelper.java:51)
at com.mongodb.async.client.OperationExecutorImpl.execute(OperationExecutorImpl.java:66)
at com.mongodb.async.client.FindIterableImpl.first(FindIterableImpl.java:198)
at io.vertx.ext.mongo.impl.MongoClientImpl.findOne(MongoClientImpl.java:312)
at org.eclipse.hono.deviceregistry.mongodb.model.MongoDbBasedTenantDao.getById(MongoDbBasedTenantDao.java:208)
at org.eclipse.hono.deviceregistry.mongodb.model.MongoDbBasedTenantDao.getById(MongoDbBasedTenantDao.java:200)
at org.eclipse.hono.deviceregistry.mongodb.service.DaoBasedTenantInformationService.tenantExists(DaoBasedTenantInformationService.java:74)
at org.eclipse.hono.deviceregistry.service.device.AbstractDeviceManagementService.readDevice(AbstractDeviceManagementService.java:135)
at org.eclipse.hono.service.management.device.DelegatingDeviceManagementHttpEndpoint.lambda$doGetDevice$0(DelegatingDeviceManagementHttpEndpoint.java:151)
at io.vertx.core.Future.lambda$compose$3(Future.java:368)
at io.vertx.core.impl.FutureImpl.dispatch(FutureImpl.java:105)
at io.vertx.core.impl.FutureImpl.onComplete(FutureImpl.java:83)
at io.vertx.core.impl.CompositeFutureImpl.onComplete(CompositeFutureImpl.java:130)
at io.vertx.core.impl.CompositeFutureImpl.onComplete(CompositeFutureImpl.java:25)
at io.vertx.core.Future.compose(Future.java:364)
at io.vertx.core.Future.compose(Future.java:336)
at org.eclipse.hono.service.management.device.DelegatingDeviceManagementHttpEndpoint.doGetDevice(DelegatingDeviceManagementHttpEndpoint.java:149)
at io.vertx.ext.web.impl.RouteState.handleContext(RouteState.java:1038)
at io.vertx.ext.web.impl.RoutingContextImplBase.iterateNext(RoutingContextImplBase.java:137)
at io.vertx.ext.web.impl.RoutingContextImpl.next(RoutingContextImpl.java:132)
at io.vertx.ext.web.handler.impl.CorsHandlerImpl.handle(CorsHandlerImpl.java:125)
at io.vertx.ext.web.handler.impl.CorsHandlerImpl.handle(CorsHandlerImpl.java:38)
at io.vertx.ext.web.impl.RouteState.handleContext(RouteState.java:1038)
at io.vertx.ext.web.impl.RoutingContextImplBase.iterateNext(RoutingContextImplBase.java:137)
at io.vertx.ext.web.impl.RoutingContextImpl.next(RoutingContextImpl.java:132)
at io.vertx.ext.web.handler.impl.BodyHandlerImpl$BHandler.doEnd(BodyHandlerImpl.java:296)
at io.vertx.ext.web.handler.impl.BodyHandlerImpl$BHandler.end(BodyHandlerImpl.java:276)
at io.vertx.ext.web.handler.impl.BodyHandlerImpl.lambda$handle$0(BodyHandlerImpl.java:87)
at io.vertx.core.http.impl.HttpServerRequestImpl.onEnd(HttpServerRequestImpl.java:525)
at io.vertx.core.http.impl.HttpServerRequestImpl.handleEnd(HttpServerRequestImpl.java:511)
at io.vertx.core.http.impl.Http1xServerConnection.handleEnd(Http1xServerConnection.java:176)
[...]
To avoid confusion, such cases should be handled in a better way.
Similar kind of exception, during "get Tenant by ID" invocation:
java.lang.IllegalStateException: The pool is closed
at com.mongodb.internal.connection.ConcurrentPool.poolClosedException(ConcurrentPool.java:296)
at com.mongodb.internal.connection.ConcurrentPool.get(ConcurrentPool.java:144)
at com.mongodb.internal.connection.ConcurrentPool.get(ConcurrentPool.java:130)
at com.mongodb.internal.session.ServerSessionPool.get(ServerSessionPool.java:84)
at com.mongodb.internal.session.BaseClientSessionImpl.<init>(BaseClientSessionImpl.java:49)
at com.mongodb.reactivestreams.client.internal.ClientSessionPublisherImpl.<init>(ClientSessionPublisherImpl.java:57)
at com.mongodb.reactivestreams.client.internal.ClientSessionHelper.createClientSession(ClientSessionHelper.java:90)
at com.mongodb.reactivestreams.client.internal.ClientSessionHelper.lambda$createClientSessionMono$1(ClientSessionHelper.java:60)
at reactor.core.publisher.MonoCallable.subscribe(MonoCallable.java:56)
at reactor.core.publisher.MonoMapFuseable.subscribe(MonoMapFuseable.java:59)
at reactor.core.publisher.MonoSwitchIfEmpty.subscribe(MonoSwitchIfEmpty.java:44)
at reactor.core.publisher.MonoFlatMap.subscribe(MonoFlatMap.java:60)
at reactor.core.publisher.MonoMapFuseable.subscribe(MonoMapFuseable.java:59)
at reactor.core.publisher.MonoFlatMap.subscribe(MonoFlatMap.java:60)
at reactor.core.publisher.Mono.subscribe(Mono.java:3873)
at io.vertx.ext.mongo.impl.MongoClientImpl.findOne(MongoClientImpl.java:410)
at org.eclipse.hono.deviceregistry.mongodb.model.MongoDbBasedTenantDao.getById(MongoDbBasedTenantDao.java:205)
at org.eclipse.hono.deviceregistry.mongodb.model.MongoDbBasedTenantDao.getById(MongoDbBasedTenantDao.java:199)
at org.eclipse.hono.deviceregistry.mongodb.service.MongoDbBasedTenantManagementService.processReadTenant(MongoDbBasedTenantManagementService.java:96)
at org.eclipse.hono.deviceregistry.service.tenant.AbstractTenantManagementService.readTenant(AbstractTenantManagementService.java:234)
at org.eclipse.hono.deviceregistry.service.tenant.DefaultTenantInformationService.tenantExists(DefaultTenantInformationService.java:52)
at org.eclipse.hono.deviceregistry.service.device.AbstractRegistrationService.assertRegistration(AbstractRegistrationService.java:220)
at org.eclipse.hono.service.registration.DelegatingRegistrationAmqpEndpoint.processAssertRequest(DelegatingRegistrationAmqpEndpoint.java:106)
at org.eclipse.hono.service.registration.DelegatingRegistrationAmqpEndpoint.handleRequestMessage(DelegatingRegistrationAmqpEndpoint.java:76)
at org.eclipse.hono.service.amqp.AbstractRequestResponseEndpoint.lambda$handleRequestMessage$5(AbstractRequestResponseEndpoint.java:235)
at io.vertx.core.impl.future.Composition.onSuccess(Composition.java:38)
at io.vertx.core.impl.future.FutureBase.emitSuccess(FutureBase.java:60)
at io.vertx.core.impl.future.FutureImpl.addListener(FutureImpl.java:196)
at io.vertx.core.impl.future.FutureBase.compose(FutureBase.java:84)
at io.vertx.core.Future.compose(Future.java:199)
at org.eclipse.hono.service.amqp.AbstractRequestResponseEndpoint.lambda$handleRequestMessage$9(AbstractRequestResponseEndpoint.java:235)
at io.vertx.core.impl.future.Composition.onSuccess(Composition.java:38)
at io.vertx.core.impl.future.FutureBase.emitSuccess(FutureBase.java:60)
at io.vertx.core.impl.future.FutureImpl.addListener(FutureImpl.java:196)
at io.vertx.core.impl.future.PromiseImpl.addListener(PromiseImpl.java:23)
at io.vertx.core.impl.future.FutureBase.compose(FutureBase.java:84)
at io.vertx.core.impl.future.PromiseImpl.compose(PromiseImpl.java:23)
at io.vertx.core.Future.compose(Future.java:199)
at org.eclipse.hono.service.amqp.AbstractRequestResponseEndpoint.handleRequestMessage(AbstractRequestResponseEndpoint.java:223)
at org.eclipse.hono.service.amqp.AbstractRequestResponseEndpoint.lambda$onLinkAttach$1(AbstractRequestResponseEndpoint.java:160)
[...]