You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@iotdb.apache.org by "Jialin Qiao (Jira)" <ji...@apache.org> on 2020/07/10 11:32:00 UTC
[jira] [Commented] (IOTDB-792) A potential deadlock when insert
while show latest timeseries
[ 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)