[ 
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)

Reply via email to