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)