[
https://issues.apache.org/jira/browse/IGNITE-23939?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Pavel Pereslegin updated IGNITE-23939:
--------------------------------------
Description:
The test {{ItCancelScriptTest.cancelMustRollbackScriptTransaction}} reproduced
this problem several times
https://ci.ignite.apache.org/project.html?projectId=ApacheIgnite3xGradle_Test_IntegrationTests&buildTypeId=&tab=testDetails&testNameId=7736497393505676669&order=TEST_STATUS_DESC&branch_ApacheIgnite3xGradle_Test_IntegrationTests=__all_branches__&itemsCount=50
(see TODO related to this issue in this test).
Issue can be reproduced by adding an extra sleep() just before deleting the
query from the registry.
{code:java}
onPhaseStarted(ExecutionPhase.TERMINATED).whenComplete((ignored, ex) ->
{
Thread.sleep(500); // extra sleep here
runningQueries.remove(id);
terminationDoneFuture.complete(null);
});
{code}
And run the following test (add it to ItCancelScriptTest)
{code:java}
@Test
void cancelScriptX() {
CancelHandle cancelHandle = CancelHandle.create();
CancellationToken token = cancelHandle.token();
AsyncSqlCursor<InternalSqlRow> cur = runScript(token,
"SELECT 1; SELECT 2; SELECT 3;"
);
Awaitility.await().untilAsserted(() ->
assertThat(queryProcessor().runningQueriesCount(), is(3 + /* SCRIPT */ 1)));
cancelHandle.cancel();
assertThat(queryProcessor().runningQueriesCount(), is(0));
}
{code}
we expecting that script cancellation will wait until all child queries will be
removed from the registry, but this test fails
{noformat}
java.lang.AssertionError:
Expected: is <0>
but: was <1>
Expected :is <0>
Actual :<1>
{noformat}
NOTE: the last query in the registry of running queries is usually "SELECT 1".
It is necessary to investigate the problem and fix it so that the parent query
is removed from the registry of running queries only after all child queries
are removed.
was:
The test {{ItCancelScriptTest.cancelMustRollbackScriptTransaction}} sometime
reproduces this issue
https://ci.ignite.apache.org/project.html?projectId=ApacheIgnite3xGradle_Test_IntegrationTests&buildTypeId=&tab=testDetails&testNameId=7736497393505676669&order=TEST_STATUS_DESC&branch_ApacheIgnite3xGradle_Test_IntegrationTests=__all_branches__&itemsCount=50
(see TODO related to this issue).
Issue can be reproduced by adding an extra sleep() just before deleting the
query from the registry.
{code:java}
onPhaseStarted(ExecutionPhase.TERMINATED).whenComplete((ignored, ex) ->
{
Thread.sleep(500); // extra sleep here
runningQueries.remove(id);
terminationDoneFuture.complete(null);
});
{code}
And run the following test (add it to ItCancelScriptTest)
{code:java}
@Test
void cancelScriptX() {
CancelHandle cancelHandle = CancelHandle.create();
CancellationToken token = cancelHandle.token();
AsyncSqlCursor<InternalSqlRow> cur = runScript(token,
"SELECT 1; SELECT 2; SELECT 3;"
);
Awaitility.await().untilAsserted(() ->
assertThat(queryProcessor().runningQueriesCount(), is(3 + /* SCRIPT */ 1)));
cancelHandle.cancel();
assertThat(queryProcessor().runningQueriesCount(), is(0));
}
{code}
we expecting that script cancellation will wait until all child queries will be
removed from the registry, but this test fails
{noformat}
java.lang.AssertionError:
Expected: is <0>
but: was <1>
Expected :is <0>
Actual :<1>
{noformat}
NOTE: the last query in the registry of running queries is usually "SELECT 1".
It is necessary to investigate the problem and fix it so that the parent query
is removed from the registry of running queries only after all child queries
are removed.
> Sql. Script cancellation does not wait until all child queries are removed
> from the registry
> --------------------------------------------------------------------------------------------
>
> Key: IGNITE-23939
> URL: https://issues.apache.org/jira/browse/IGNITE-23939
> Project: Ignite
> Issue Type: Bug
> Components: sql
> Reporter: Pavel Pereslegin
> Priority: Major
> Labels: ignite-3
>
> The test {{ItCancelScriptTest.cancelMustRollbackScriptTransaction}}
> reproduced this problem several times
> https://ci.ignite.apache.org/project.html?projectId=ApacheIgnite3xGradle_Test_IntegrationTests&buildTypeId=&tab=testDetails&testNameId=7736497393505676669&order=TEST_STATUS_DESC&branch_ApacheIgnite3xGradle_Test_IntegrationTests=__all_branches__&itemsCount=50
> (see TODO related to this issue in this test).
> Issue can be reproduced by adding an extra sleep() just before deleting the
> query from the registry.
> {code:java}
> onPhaseStarted(ExecutionPhase.TERMINATED).whenComplete((ignored, ex)
> -> {
> Thread.sleep(500); // extra sleep here
> runningQueries.remove(id);
> terminationDoneFuture.complete(null);
> });
> {code}
> And run the following test (add it to ItCancelScriptTest)
> {code:java}
> @Test
> void cancelScriptX() {
> CancelHandle cancelHandle = CancelHandle.create();
> CancellationToken token = cancelHandle.token();
> AsyncSqlCursor<InternalSqlRow> cur = runScript(token,
> "SELECT 1; SELECT 2; SELECT 3;"
> );
> Awaitility.await().untilAsserted(() ->
> assertThat(queryProcessor().runningQueriesCount(), is(3 + /* SCRIPT */ 1)));
> cancelHandle.cancel();
> assertThat(queryProcessor().runningQueriesCount(), is(0));
> }
> {code}
> we expecting that script cancellation will wait until all child queries will
> be removed from the registry, but this test fails
> {noformat}
> java.lang.AssertionError:
> Expected: is <0>
> but: was <1>
> Expected :is <0>
> Actual :<1>
> {noformat}
> NOTE: the last query in the registry of running queries is usually "SELECT 1".
> It is necessary to investigate the problem and fix it so that the parent
> query is removed from the registry of running queries only after all child
> queries are removed.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)