[
https://issues.apache.org/jira/browse/IOTDB-792?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17155353#comment-17155353
]
Jialin Qiao commented on IOTDB-792:
-----------------------------------
[https://github.com/apache/incubator-iotdb/pull/1481]
> A potential deadlock when insert while show latest timeseries
> -------------------------------------------------------------
>
> Key: IOTDB-792
> URL: https://issues.apache.org/jira/browse/IOTDB-792
> Project: Apache IoTDB
> Issue Type: Bug
> Components: Core/Engine
> Affects Versions: 0.10.0
> Reporter: Jialin Qiao
> Priority: Major
> Attachments: jstack.txt
>
>
> The MManager's readLock can not be got and the StorageGroupProcessor's
> readLock can not be got.
>
> One insertion thread gets SGProcessor's read lock and then try to get the
> read lock of MManager.
> Another query thread holds the read lock of MManager while try to get the
> read lock of SGProcessor.
>
> This can not cause deadlock but this is what we could find finally.
> I attached the entire stack information of jstack and the stacks of these two
> threads are in the following:
>
> "pool-5-IoTDB-RPC-Client-thread-16" #117 prio=5 os_prio=0
> tid=0x00007f199c020000 nid=0x3d83c waiting on condition
> [0x00007f1aaf6f5000]"pool-5-IoTDB-RPC-Client-thread-16" #117 prio=5 os_prio=0
> tid=0x00007f199c020000 nid=0x3d83c waiting on condition [0x00007f1aaf6f5000]
> java.lang.Thread.State: WAITING (parking) at sun.misc.Unsafe.park(Native
> Method) - parking to wait for <0x00000002ca9055b8> (a
> java.util.concurrent.locks.ReentrantReadWriteLock$NonfairSync) at
> java.util.concurrent.locks.LockSupport.park(LockSupport.java:175) at
> java.util.concurrent.locks.AbstractQueuedSynchronizer.parkAndCheckInterrupt(AbstractQueuedSynchronizer.java:836)
> at
> java.util.concurrent.locks.AbstractQueuedSynchronizer.doAcquireShared(AbstractQueuedSynchronizer.java:967)
> at
> java.util.concurrent.locks.AbstractQueuedSynchronizer.acquireShared(AbstractQueuedSynchronizer.java:1283)
> at
> java.util.concurrent.locks.ReentrantReadWriteLock$ReadLock.lock(ReentrantReadWriteLock.java:727)
> at
> org.apache.iotdb.db.metadata.MManager.getDeviceNodeWithAutoCreateAndReadLock(MManager.java:1022)
> at
> org.apache.iotdb.db.metadata.MManager.getDeviceNodeWithAutoCreateAndReadLock(MManager.java:1070)
> at
> org.apache.iotdb.db.engine.storagegroup.StorageGroupProcessor.tryToUpdateInsertLastCache(StorageGroupProcessor.java:834)
> at
> org.apache.iotdb.db.engine.storagegroup.StorageGroupProcessor.insertToTsFileProcessor(StorageGroupProcessor.java:821)
> at
> org.apache.iotdb.db.engine.storagegroup.StorageGroupProcessor.insert(StorageGroupProcessor.java:618)
> at org.apache.iotdb.db.engine.StorageEngine.insert(StorageEngine.java:282)
> at org.apache.iotdb.db.qp.executor.PlanExecutor.insert(PlanExecutor.java:908)
> at
> org.apache.iotdb.db.qp.executor.PlanExecutor.processNonQuery(PlanExecutor.java:201)
> at
> org.apache.iotdb.db.service.TSServiceImpl.executeNonQuery(TSServiceImpl.java:970)
> at
> org.apache.iotdb.db.service.TSServiceImpl.executePlan(TSServiceImpl.java:1399)
> at
> org.apache.iotdb.db.service.TSServiceImpl.insertRecords(TSServiceImpl.java:1083)
> at
> org.apache.iotdb.service.rpc.thrift.TSIService$Processor$insertRecords.getResult(TSIService.java:2308)
> at
> org.apache.iotdb.service.rpc.thrift.TSIService$Processor$insertRecords.getResult(TSIService.java:2288)
> at org.apache.thrift.ProcessFunction.process(ProcessFunction.java:38) at
> org.apache.thrift.TBaseProcessor.process(TBaseProcessor.java:38) at
> org.apache.thrift.server.TThreadPoolServer$WorkerProcess.run(TThreadPoolServer.java:313)
> at
> java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
> at
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
> at java.lang.Thread.run(Thread.java:748)
>
> "pool-5-IoTDB-RPC-Client-thread-8" #109 prio=5 os_prio=0
> tid=0x00007f199c012000 nid=0x3d825 waiting on condition [0x00007f1aafefc000]
> java.lang.Thread.State: WAITING (parking) at sun.misc.Unsafe.park(Native
> Method) - parking to wait for <0x00000007b1b40ba0> (a
> java.util.concurrent.locks.ReentrantReadWriteLock$NonfairSync) at
> java.util.concurrent.locks.LockSupport.park(LockSupport.java:175) at
> java.util.concurrent.locks.AbstractQueuedSynchronizer.parkAndCheckInterrupt(AbstractQueuedSynchronizer.java:836)
> at
> java.util.concurrent.locks.AbstractQueuedSynchronizer.doAcquireShared(AbstractQueuedSynchronizer.java:967)
> at
> java.util.concurrent.locks.AbstractQueuedSynchronizer.acquireShared(AbstractQueuedSynchronizer.java:1283)
> at
> java.util.concurrent.locks.ReentrantReadWriteLock$ReadLock.lock(ReentrantReadWriteLock.java:727)
> at
> org.apache.iotdb.db.engine.storagegroup.StorageGroupProcessor.query(StorageGroupProcessor.java:1200)
> at org.apache.iotdb.db.engine.StorageEngine.query(StorageEngine.java:407) at
> org.apache.iotdb.db.query.control.QueryResourceManager.getQueryDataSource(QueryResourceManager.java:94)
> at
> org.apache.iotdb.db.query.executor.LastQueryExecutor.calculateLastPairForOneSeries(LastQueryExecutor.java:126)
> at org.apache.iotdb.db.metadata.MTree.getLastTimeStamp(MTree.java:756) at
> org.apache.iotdb.db.metadata.MTree.findPath(MTree.java:726) at
> org.apache.iotdb.db.metadata.MTree.findPath(MTree.java:744) at
> org.apache.iotdb.db.metadata.MTree.findPath(MTree.java:736) at
> org.apache.iotdb.db.metadata.MTree.findPath(MTree.java:736) at
> org.apache.iotdb.db.metadata.MTree.getAllMeasurementSchemaByHeatOrder(MTree.java:648)
> at org.apache.iotdb.db.metadata.MManager.showTimeseries(MManager.java:889)
> at
> org.apache.iotdb.db.qp.executor.PlanExecutor.showTimeseries(PlanExecutor.java:552)
> at
> org.apache.iotdb.db.qp.executor.PlanExecutor.processShowTimeseries(PlanExecutor.java:506)
> at
> org.apache.iotdb.db.qp.executor.PlanExecutor.processShowQuery(PlanExecutor.java:350)
> at
> org.apache.iotdb.db.qp.executor.PlanExecutor.processQuery(PlanExecutor.java:181)
> at
> org.apache.iotdb.db.service.TSServiceImpl.createQueryDataSet(TSServiceImpl.java:926)
> at
> org.apache.iotdb.db.service.TSServiceImpl.internalExecuteQueryStatement(TSServiceImpl.java:556)
> at
> org.apache.iotdb.db.service.TSServiceImpl.executeQueryStatement(TSServiceImpl.java:505)
> at
> org.apache.iotdb.service.rpc.thrift.TSIService$Processor$executeQueryStatement.getResult(TSIService.java:1883)
> at
> org.apache.iotdb.service.rpc.thrift.TSIService$Processor$executeQueryStatement.getResult(TSIService.java:1863)
> at org.apache.thrift.ProcessFunction.process(ProcessFunction.java:38) at
> org.apache.thrift.TBaseProcessor.process(TBaseProcessor.java:38) at
> org.apache.thrift.server.TThreadPoolServer$WorkerProcess.run(TThreadPoolServer.java:313)
> at
> java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
> at
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
> at java.lang.Thread.run(Thread.java:748)
--
This message was sent by Atlassian Jira
(v8.3.4#803005)