[
https://issues.apache.org/jira/browse/IGNITE-19655?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17729675#comment-17729675
]
Konstantin Orlov commented on IGNITE-19655:
-------------------------------------------
{quote}
the SQL engine does not seem to care about the fact that the node has already
left.
{quote}
It's true. But SQL doesn't have to.
SQL engine uses TopologyService (TS) to get all live members of a cluster. So
it's responsibility of TS to keep track of members of the cluster and provide
valid state for those who asking for it.
I run mentioned test locally and found rather peculiar log sequence:
{noformat}
2023-06-06 12:25:50:581 +0300
[INFO][sc-cluster-3344-1][ScaleCubeTopologyService] Node joined
[node=ClusterNode [id=6f399661-6f3f-4d8a-ae79-ec2ad758c80a,
name=itrst_sitdnbsiwsaiitf_1, address=192.168.8.104:3345, nodeMetadata=null]]
2023-06-06 12:25:50:582 +0300
[INFO][sc-cluster-3344-1][ScaleCubeTopologyService] Topology snapshot
[nodes=[itrst_sitdnbsiwsaiitf_1, itrst_sitdnbsiwsaiitf_0]]
2023-06-06 12:25:51:558 +0300
[INFO][sc-cluster-3344-1][ScaleCubeTopologyService] Topology snapshot
[nodes=[itrst_sitdnbsiwsaiitf_1, itrst_sitdnbsiwsaiitf_0]]
2023-06-06 12:25:51:904 +0300
[INFO][sc-cluster-3344-1][ScaleCubeTopologyService] Node joined
[node=ClusterNode [id=c015b0a9-aa4b-4a27-b42b-ba611b46978b,
name=itrst_sitdnbsiwsaiitf_2, address=192.168.8.104:3346, nodeMetadata=null]]
2023-06-06 12:25:51:904 +0300
[INFO][sc-cluster-3344-1][ScaleCubeTopologyService] Topology snapshot
[nodes=[itrst_sitdnbsiwsaiitf_2, itrst_sitdnbsiwsaiitf_1,
itrst_sitdnbsiwsaiitf_0]]
2023-06-06 12:25:52:870 +0300
[INFO][sc-cluster-3344-1][ScaleCubeTopologyService] Topology snapshot
[nodes=[itrst_sitdnbsiwsaiitf_2, itrst_sitdnbsiwsaiitf_1,
itrst_sitdnbsiwsaiitf_0]]
2023-06-06 12:25:58:668 +0300
[INFO][sc-cluster-3344-1][ScaleCubeTopologyService] Topology snapshot
[nodes=[itrst_sitdnbsiwsaiitf_2, itrst_sitdnbsiwsaiitf_1,
itrst_sitdnbsiwsaiitf_0]]
2023-06-06 12:26:06:408 +0300
[INFO][sc-cluster-3344-1][ScaleCubeTopologyService] Node joined
[node=ClusterNode [id=21182b57-f6fa-4129-94fe-c2f78a06296c,
name=itrst_sitdnbsiwsaiitf_2, address=192.168.8.104:3346, nodeMetadata=null]]
2023-06-06 12:26:06:408 +0300
[INFO][sc-cluster-3344-1][ScaleCubeTopologyService] Topology snapshot
[nodes=[itrst_sitdnbsiwsaiitf_2, itrst_sitdnbsiwsaiitf_1,
itrst_sitdnbsiwsaiitf_0]]
2023-06-06 12:26:07:204 +0300
[INFO][sc-cluster-3344-1][ScaleCubeTopologyService] Topology snapshot
[nodes=[itrst_sitdnbsiwsaiitf_2, itrst_sitdnbsiwsaiitf_1,
itrst_sitdnbsiwsaiitf_0]]
2023-06-06 12:26:07:261 +0300
[INFO][sc-cluster-3344-1][ScaleCubeTopologyService] Node left
[member=ClusterNode [id=c015b0a9-aa4b-4a27-b42b-ba611b46978b,
name=itrst_sitdnbsiwsaiitf_2, address=192.168.8.104:3346, nodeMetadata=null]]
2023-06-06 12:26:07:303 +0300
[INFO][sc-cluster-3344-1][ScaleCubeTopologyService] Topology snapshot
[nodes=[itrst_sitdnbsiwsaiitf_2, itrst_sitdnbsiwsaiitf_1,
itrst_sitdnbsiwsaiitf_0]]
2023-06-06 12:26:29:460 +0300 [INFO][sc-cluster-3344-1][Transport] Stopping
[address=192.168.8.104:3344]
2023-06-06 12:26:29:461 +0300 [INFO][sc-cluster-3344-1][Transport] Stopped
[address=192.168.8.104:3344]
{noformat}
In the log, the node {{itrst_sitdnbsiwsaiitf_2}} is joined twice: first time
with ID={{c015...}}, and then with ID={{2118...}}. Then Node left was fired for
this node with ID={{c015...}}. Since this node had been re-registered with new
ID, this event just ignored leaving topology snapshot without change:
{{Topology snapshot [nodes=[itrst_sitdnbsiwsaiitf_2, itrst_sitdnbsiwsaiitf_1,
itrst_sitdnbsiwsaiitf_0]]}}.
I believe this is root cause of tests flakiness.
> Distributed Sql keeps mapping query fragments to a node that has already left
> -----------------------------------------------------------------------------
>
> Key: IGNITE-19655
> URL: https://issues.apache.org/jira/browse/IGNITE-19655
> Project: Ignite
> Issue Type: Bug
> Reporter: Roman Puchkovskiy
> Assignee: Maksim Zhuravkov
> Priority: Major
> Labels: ignite-3
> Fix For: 3.0.0-beta2
>
>
> There are two test failures:
> [https://ci.ignite.apache.org/buildConfiguration/ApacheIgnite3xGradle_Test_RunAllTests/7271211?expandCode+Inspection=true&expandBuildProblemsSection=true&hideProblemsFromDependencies=false&expandBuildTestsSection=true&hideTestsFromDependencies=false]
> and
> [https://ci.ignite.apache.org/buildConfiguration/ApacheIgnite3xGradle_Test_RunAllTests/7272905?hideProblemsFromDependencies=false&hideTestsFromDependencies=false&expandCode+Inspection=true&expandBuildProblemsSection=true&expandBuildChangesSection=true&expandBuildTestsSection=true]
>
> (org.apache.ignite.internal.raftsnapshot.ItTableRaftSnapshotsTest.entriesKeepAppendedAfterSnapshotInstallation
> and
> org.apache.ignite.internal.raftsnapshot.ItTableRaftSnapshotsTest.snapshotInstallTimeoutDoesNotBreakSubsequentInstallsWhenSecondAttemptIsIdenticalToFirst,
> correspondingly).
> In both cases, the test code creates a table with 3 replicas on a cluster of
> 3 nodes, then it stops the last node and tries to make an insert using one of
> the 2 remaining nodes. The RAFT majority (2 of 3) is still preserved, so the
> insert should succeed. It's understood that the insert might be issued before
> the remaining nodes understand that the third node has left, so we have a
> retry mechanism in place, it makes up to 5 attempts for almost 8 seconds (in
> total).
> But in both the failed runs, each of 5 attempts failed because a fragment of
> the INSERT query was mapped to the missing node. This seems to be a bad luck
> (as the tests pass most of the time, fail rate is about 2.5%), but anyway:
> the SQL engine does not seem to care about the fact that the node has already
> left.
> Probably, the SQL engine should track the Logical Topology events and avoid
> mapping query fragments to the missing nodes.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)