[
https://issues.apache.org/jira/browse/IGNITE-6825?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16237175#comment-16237175
]
ASF GitHub Bot commented on IGNITE-6825:
----------------------------------------
GitHub user devozerov opened a pull request:
https://github.com/apache/ignite/pull/2976
IGNITE-6825
You can merge this pull request into a Git repository by running:
$ git pull https://github.com/gridgain/apache-ignite ignite-6825
Alternatively you can review and apply these changes as the patch at:
https://github.com/apache/ignite/pull/2976.patch
To close this pull request, make a commit to your master/trunk branch
with (at least) the following in the commit message:
This closes #2976
----
commit f6399b46770a11beb0fb131bf0ce87162f052f1e
Author: devozerov <[email protected]>
Date: 2017-11-03T06:45:44Z
IGNITE-6825: SQL: Fixed GridH2Table unlock in case of interrupt.
----
> Unhandled interruption in GridH2Table
> -------------------------------------
>
> Key: IGNITE-6825
> URL: https://issues.apache.org/jira/browse/IGNITE-6825
> Project: Ignite
> Issue Type: Bug
> Security Level: Public(Viewable by anyone)
> Affects Versions: 2.1
> Reporter: Alexander Belyak
> Priority: Blocker
>
> In GridH2Table.lock(Ses, excl, force) method we:
> 1) put session in sessions table;
> 2) add lock in H2 session locks
> 3) try to Lock(excl), but if in GridH2Table.lock(excl):277 while thread in
> lock.lockInterruptiblu() it got interruption - session with lock still alive
> in GridH2Table sessions map but no really lock acquired and when session will
> trying to unlock all acquired locks it will try to unlock it too and we get
> exception:
> {noformat}
> [ERROR][pub-#3855%DPL_GRID%DplGridNodeName%][o.a.i.i.p.q.h.t.GridMapQueryExecutor]
> Failed to run map query on local node.
>
> org.apache.ignite.IgniteCheckedException: Failed to execute SQL query.
> at
> org.apache.ignite.internal.processors.query.h2.IgniteH2Indexing.executeSqlQuery(IgniteH2Indexing.java:970)
> at
> org.apache.ignite.internal.processors.query.h2.IgniteH2Indexing.executeSqlQueryWithTimer(IgniteH2Indexing.java:1029)
> at
> org.apache.ignite.internal.processors.query.h2.IgniteH2Indexing.executeSqlQueryWithTimer(IgniteH2Indexing.java:1008)
> at
> org.apache.ignite.internal.processors.query.h2.twostep.GridMapQueryExecutor.onQueryRequest0(GridMapQueryExecutor.java:660)
> at
> org.apache.ignite.internal.processors.query.h2.twostep.GridMapQueryExecutor.onQueryRequest(GridMapQueryExecutor.java:506)
> at
> org.apache.ignite.internal.processors.query.h2.twostep.GridMapQueryExecutor.onMessage(GridMapQueryExecutor.java:206)
> at
> org.apache.ignite.internal.processors.query.h2.twostep.GridReduceQueryExecutor$1.applyx(GridReduceQueryExecutor.java:145)
> at
> org.apache.ignite.internal.processors.query.h2.twostep.GridReduceQueryExecutor$1.applyx(GridReduceQueryExecutor.java:143)
> at
> org.apache.ignite.internal.util.lang.IgniteInClosure2X.apply(IgniteInClosure2X.java:38)
> at
> org.apache.ignite.internal.processors.query.h2.IgniteH2Indexing.send(IgniteH2Indexing.java:2066)
> at
> org.apache.ignite.internal.processors.query.h2.twostep.GridReduceQueryExecutor.send(GridReduceQueryExecutor.java:1273)
> at
> org.apache.ignite.internal.processors.query.h2.twostep.GridReduceQueryExecutor.query(GridReduceQueryExecutor.java:733)
> at
> org.apache.ignite.internal.processors.query.h2.IgniteH2Indexing$8.iterator(IgniteH2Indexing.java:1214)
> at
> org.apache.ignite.internal.processors.cache.QueryCursorImpl.iterator(QueryCursorImpl.java:95)
> at
> org.apache.ignite.internal.processors.query.h2.IgniteH2Indexing$9.iterator(IgniteH2Indexing.java:1256)
> at
> org.apache.ignite.internal.processors.cache.QueryCursorImpl.iterator(QueryCursorImpl.java:95)
> at
> com.sbt.dpl.gridgain.collection.dataselectors.executor.cachequery.IgniteCacheQueryExecutor.iterator(IgniteCacheQueryExecutor.java:131)
> at
> com.sbt.dpl.gridgain.collection.dataselectors.executor.cachequery.impl.SqlQueryExecutor.iterator(SqlQueryExecutor.java:58)
> at
> com.sbt.dpl.gridgain.collection.dataselectors.executor.cachequery.impl.SqlQueryExecutor.iterator(SqlQueryExecutor.java:23)
> at
> com.sbt.dpl.gridgain.collection.dataselectors.impl.H2IndexesDataSelector.binaryIterator(H2IndexesDataSelector.java:142)
> at
> com.sbt.dpl.gridgain.collection.dataselectors.AbstractDataSelector.getIterator(AbstractDataSelector.java:110)
> at
> com.sbt.dpl.gridgain.collection.dataselectors.IndexesSwitchSelectDataSelector.getIterator(IndexesSwitchSelectDataSelector.java:106)
> at
> com.sbt.dpl.gridgain.collection.base.GGAbstractCollectionWithDataSelector.iterator(GGAbstractCollectionWithDataSelector.java:390)
> at
> ru.sbt.deposit_pf_api.comparators.EntityService.findDepositByProduct(EntityService.java:846)
> at
> ru.sbt.deposit_pf_api.comparators.EntityService.findDepositByProduct(EntityService.java:807)
> at
> ru.sbt.deposit_pf_api.comparators.EntityService.getDepositByObjectInner(EntityService.java:1350)
> at
> ru.sbt.deposit_pf_api.comparators.EntityService.getDepositByObject(EntityService.java:1169)
> at
> ru.sbt.deposit_pf_api.comparators.EntityService.getGroupingObject(EntityService.java:1098)
> at
> ru.sbt.deposit_pf_api.comparators.UnknownClassMapFunction$FindUnknownMapFunctionPredicate.apply(UnknownClassMapFunction.java:183)
> at
> ru.sbt.deposit_pf_api.comparators.UnknownClassMapFunction$FindUnknownMapFunctionPredicate.apply(UnknownClassMapFunction.java:1)
> at
> ru.sbt.deposit_pf_api.CollectionUtils.filter(CollectionUtils.java:55)
> at
> ru.sbt.deposit_pf_api.comparators.UnknownClassMapFunction.map(UnknownClassMapFunction.java:91)
> at
> ru.sbt.deposit_pf_api.comparators.UnknownClassMapFunction.map(UnknownClassMapFunction.java:1)
> at com.sbt.dpl.gridgain.Job.executeUserMap(Job.java:110)
> at com.sbt.dpl.gridgain.Job.execute(Job.java:68)
> at
> com.sbt.dpl.gridgain.compute.ComputeJobAdapterWrapper.execute(ComputeJobAdapterWrapper.java:68)
> at
> org.apache.ignite.internal.processors.job.GridJobWorker$2.call(GridJobWorker.java:566)
> at
> org.apache.ignite.internal.util.IgniteUtils.wrapThreadLoader(IgniteUtils.java:6629)
> at
> org.apache.ignite.internal.processors.job.GridJobWorker.execute0(GridJobWorker.java:560)
> at
> org.apache.ignite.internal.processors.job.GridJobWorker.body(GridJobWorker.java:489)
> at
> org.apache.ignite.internal.util.worker.GridWorker.run(GridWorker.java:110)
> at
> org.apache.ignite.internal.processors.job.GridJobProcessor.processJobExecuteRequest(GridJobProcessor.java:1181)
> at
> org.apache.ignite.internal.processors.job.GridJobProcessor$JobExecutionListener.onMessage(GridJobProcessor.java:1908)
> at
> org.apache.ignite.internal.managers.communication.GridIoManager.invokeListener(GridIoManager.java:1562)
> at
> org.apache.ignite.internal.managers.communication.GridIoManager.processRegularMessage0(GridIoManager.java:1190)
> at
> org.apache.ignite.internal.managers.communication.GridIoManager.access$4200(GridIoManager.java:126)
> at
> org.apache.ignite.internal.managers.communication.GridIoManager$9.run(GridIoManager.java:1097)
> 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)
> Caused by: org.h2.jdbc.JdbcSQLException: General error:
> "java.lang.IllegalMonitorStateException: attempt to unlock read lock, not
> locked by current thread" [50000-195]
> at
> org.h2.message.DbException.getJdbcSQLException(DbException.java:345)
> at org.h2.message.DbException.get(DbException.java:168)
> at org.h2.message.DbException.convert(DbException.java:295)
> at org.h2.message.DbException.toSQLException(DbException.java:268)
> at org.h2.message.TraceObject.logAndConvert(TraceObject.java:352)
> at
> org.h2.jdbc.JdbcPreparedStatement.executeQuery(JdbcPreparedStatement.java:123)
> at
> org.apache.ignite.internal.processors.query.h2.IgniteH2Indexing.executeSqlQuery(IgniteH2Indexing.java:963)
> ... 49 common frames omitted
> Caused by: java.lang.IllegalMonitorStateException: attempt to unlock read
> lock, not locked by current thread
> at
> java.util.concurrent.locks.ReentrantReadWriteLock$Sync.unmatchedUnlockException(ReentrantReadWriteLock.java:444)
> at
> java.util.concurrent.locks.ReentrantReadWriteLock$Sync.tryReleaseShared(ReentrantReadWriteLock.java:428)
> at
> java.util.concurrent.locks.AbstractQueuedSynchronizer.releaseShared(AbstractQueuedSynchronizer.java:1341)
> at
> java.util.concurrent.locks.ReentrantReadWriteLock$ReadLock.unlock(ReentrantReadWriteLock.java:881)
> at
> org.apache.ignite.internal.processors.query.h2.opt.GridH2Table.unlock(GridH2Table.java:296)
> at
> org.apache.ignite.internal.processors.query.h2.opt.GridH2Table.unlock(GridH2Table.java:389)
> at org.h2.engine.Session.unlockAll(Session.java:942)
> at org.h2.engine.Session.endTransaction(Session.java:713)
> at org.h2.engine.Session.commit(Session.java:661)
> at org.h2.command.Command.stop(Command.java:156)
> at org.h2.command.Command.executeQuery(Command.java:231)
> at
> org.h2.jdbc.JdbcPreparedStatement.executeQuery(JdbcPreparedStatement.java:111)
> ... 50 common frames omitted
> {noformat}
--
This message was sent by Atlassian JIRA
(v6.4.14#64029)