[
https://issues.apache.org/jira/browse/IGNITE-23939?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Pavel Pereslegin updated IGNITE-23939:
--------------------------------------
Fix Version/s: 3.0
> Sql. Script cancellation doesn't 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
> Assignee: Pavel Pereslegin
> Priority: Major
> Labels: ignite-3
> Fix For: 3.0
>
> Time Spent: 20m
> Remaining Estimate: 0h
>
> 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.
> h3. UPDATE
> Looks like current script behavior is ok.
> As part of the ticket, we need to:
> 1. simplify the code - we should not wait for the query to be removed from
> the registry - we only wait for the transition to the TERMINATED phase (see
> Query#terminationDoneFuture - this future must be removed)
> 2. rework tests that check that {{runningQueries}} counter is zero (add busy
> wait),
> 3. remove TODO in {{cancelMustRollbackScriptTransaction}} code.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)