You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@drill.apache.org by "Adam Gilmore (JIRA)" <ji...@apache.org> on 2015/07/21 04:41:04 UTC
[jira] [Created] (DRILL-3522) IllegalStateException from Mongo
storage plugin
Adam Gilmore created DRILL-3522:
-----------------------------------
Summary: IllegalStateException from Mongo storage plugin
Key: DRILL-3522
URL: https://issues.apache.org/jira/browse/DRILL-3522
Project: Apache Drill
Issue Type: Bug
Components: Storage - MongoDB
Affects Versions: 1.1.0
Reporter: Adam Gilmore
Assignee: B Anil Kumar
Priority: Critical
With a Mongo storage plugin enabled, we are sporadically getting the following exception when running queries (even not against the Mongo storage plugin):
{code}
SYSTEM ERROR: IllegalStateException: state should be: open
(org.apache.drill.exec.work.foreman.ForemanException) Unexpected exception during fragment initialization: org.apache.drill.common.exceptions.DrillRuntimeException: state should be: open
org.apache.drill.exec.work.foreman.Foreman.run():253
java.util.concurrent.ThreadPoolExecutor.runWorker():1145
java.util.concurrent.ThreadPoolExecutor$Worker.run():615
java.lang.Thread.run():745
Caused By (com.google.common.util.concurrent.UncheckedExecutionException) org.apache.drill.common.exceptions.DrillRuntimeException: state should be: open
com.google.common.cache.LocalCache$Segment.get():2263
com.google.common.cache.LocalCache.get():4000
com.google.common.cache.LocalCache.getOrLoad():4004
com.google.common.cache.LocalCache$LocalLoadingCache.get():4874
org.apache.drill.exec.store.mongo.schema.MongoSchemaFactory$MongoSchema.getSubSchemaNames():172
org.apache.drill.exec.store.mongo.schema.MongoSchemaFactory$MongoSchema.setHolder():159
org.apache.drill.exec.store.mongo.schema.MongoSchemaFactory.registerSchemas():127
org.apache.drill.exec.store.mongo.MongoStoragePlugin.registerSchemas():86
org.apache.drill.exec.store.StoragePluginRegistry$DrillSchemaFactory.registerSchemas():328
org.apache.drill.exec.ops.QueryContext.getRootSchema():165
org.apache.drill.exec.ops.QueryContext.getRootSchema():154
org.apache.drill.exec.ops.QueryContext.getRootSchema():142
org.apache.drill.exec.ops.QueryContext.getNewDefaultSchema():128
org.apache.drill.exec.planner.sql.DrillSqlWorker.():91
org.apache.drill.exec.work.foreman.Foreman.runSQL():901
org.apache.drill.exec.work.foreman.Foreman.run():242
java.util.concurrent.ThreadPoolExecutor.runWorker():1145
java.util.concurrent.ThreadPoolExecutor$Worker.run():615
java.lang.Thread.run():745
Caused By (org.apache.drill.common.exceptions.DrillRuntimeException) state should be: open
org.apache.drill.exec.store.mongo.schema.MongoSchemaFactory$DatabaseLoader.load():98
org.apache.drill.exec.store.mongo.schema.MongoSchemaFactory$DatabaseLoader.load():82
com.google.common.cache.LocalCache$LoadingValueReference.loadFuture():3599
com.google.common.cache.LocalCache$Segment.loadSync():2379
com.google.common.cache.LocalCache$Segment.lockedGetOrLoad():2342
com.google.common.cache.LocalCache$Segment.get():2257
com.google.common.cache.LocalCache.get():4000
com.google.common.cache.LocalCache.getOrLoad():4004
com.google.common.cache.LocalCache$LocalLoadingCache.get():4874
org.apache.drill.exec.store.mongo.schema.MongoSchemaFactory$MongoSchema.getSubSchemaNames():172
org.apache.drill.exec.store.mongo.schema.MongoSchemaFactory$MongoSchema.setHolder():159
org.apache.drill.exec.store.mongo.schema.MongoSchemaFactory.registerSchemas():127
org.apache.drill.exec.store.mongo.MongoStoragePlugin.registerSchemas():86
org.apache.drill.exec.store.StoragePluginRegistry$DrillSchemaFactory.registerSchemas():328
org.apache.drill.exec.ops.QueryContext.getRootSchema():165
org.apache.drill.exec.ops.QueryContext.getRootSchema():154
org.apache.drill.exec.ops.QueryContext.getRootSchema():142
org.apache.drill.exec.ops.QueryContext.getNewDefaultSchema():128
org.apache.drill.exec.planner.sql.DrillSqlWorker.():91
org.apache.drill.exec.work.foreman.Foreman.runSQL():901
org.apache.drill.exec.work.foreman.Foreman.run():242
java.util.concurrent.ThreadPoolExecutor.runWorker():1145
java.util.concurrent.ThreadPoolExecutor$Worker.run():615
java.lang.Thread.run():745
Caused By (java.lang.IllegalStateException) state should be: open
com.mongodb.assertions.Assertions.isTrue():70
com.mongodb.connection.BaseCluster.selectServer():79
com.mongodb.binding.ClusterBinding$ClusterBindingConnectionSource.():75
com.mongodb.binding.ClusterBinding$ClusterBindingConnectionSource.():71
com.mongodb.binding.ClusterBinding.getReadConnectionSource():63
com.mongodb.operation.OperationHelper.withConnection():166
com.mongodb.operation.ListDatabasesOperation.execute():100
com.mongodb.operation.ListDatabasesOperation.execute():52
com.mongodb.Mongo.execute():738
com.mongodb.Mongo$2.execute():725
com.mongodb.OperationIterable.iterator():47
com.mongodb.OperationIterable.forEach():66
com.mongodb.ListDatabasesIterableImpl.forEach():72
com.mongodb.MappingIterable.forEach():50
com.mongodb.MappingIterable.into():60
org.apache.drill.exec.store.mongo.schema.MongoSchemaFactory$DatabaseLoader.load():91
org.apache.drill.exec.store.mongo.schema.MongoSchemaFactory$DatabaseLoader.load():82
com.google.common.cache.LocalCache$LoadingValueReference.loadFuture():3599
com.google.common.cache.LocalCache$Segment.loadSync():2379
com.google.common.cache.LocalCache$Segment.lockedGetOrLoad():2342
com.google.common.cache.LocalCache$Segment.get():2257
com.google.common.cache.LocalCache.get():4000
com.google.common.cache.LocalCache.getOrLoad():4004
com.google.common.cache.LocalCache$LocalLoadingCache.get():4874
org.apache.drill.exec.store.mongo.schema.MongoSchemaFactory$MongoSchema.getSubSchemaNames():172
org.apache.drill.exec.store.mongo.schema.MongoSchemaFactory$MongoSchema.setHolder():159
org.apache.drill.exec.store.mongo.schema.MongoSchemaFactory.registerSchemas():127
org.apache.drill.exec.store.mongo.MongoStoragePlugin.registerSchemas():86
org.apache.drill.exec.store.StoragePluginRegistry$DrillSchemaFactory.registerSchemas():328
org.apache.drill.exec.ops.QueryContext.getRootSchema():165
org.apache.drill.exec.ops.QueryContext.getRootSchema():154
org.apache.drill.exec.ops.QueryContext.getRootSchema():142
org.apache.drill.exec.ops.QueryContext.getNewDefaultSchema():128
org.apache.drill.exec.planner.sql.DrillSqlWorker.():91
org.apache.drill.exec.work.foreman.Foreman.runSQL():901
org.apache.drill.exec.work.foreman.Foreman.run():242
java.util.concurrent.ThreadPoolExecutor.runWorker():1145
java.util.concurrent.ThreadPoolExecutor$Worker.run():615
java.lang.Thread.run():745
{code}
Upon investigation, the issue appears to be registering the Mongo schemas on connection (because the storage plugin is enabled).
Basically, it appears that recent changes when upgrading the Mongo driver meant that MongoSchemaFactory indefinitely holds onto a MongoClient, even though they are part of a cache that expire after 24 hours. This means that MongoSchemaFactory ends up trying to use a MongoClient that is closed, and thus the exception occurs.
Considering we already have a cache for MongoClient, it is safe for MongoSchemaFactory to call plugin.getClient() every time.
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)