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)