Jialin Qiao created IOTDB-792:
---------------------------------

             Summary: 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
         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