[
https://issues.apache.org/jira/browse/IGNITE-20988?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Valery Shorin updated IGNITE-20988:
-----------------------------------
Labels: ise (was: )
> Ignite can't execute tasks - "Topology projection is empty"
> -----------------------------------------------------------
>
> Key: IGNITE-20988
> URL: https://issues.apache.org/jira/browse/IGNITE-20988
> Project: Ignite
> Issue Type: Bug
> Affects Versions: 2.16
> Reporter: Valery Shorin
> Priority: Critical
> Labels: ise
> Attachments: image-2023-11-28-16-52-32-145.png
>
>
> On our Ignite cluster logs are flooded by the following exceptions:
> {code:java}
> 2023-11-28 16:39:54.253 [INFO
> ][db-checkpoint-thread-#92][org.apache.ignite.internal.processors.cache.persistence.checkpoint.Checkpointer]
> Skipping checkpoint (no pages were modified) [checkpointBeforeLockTime=6ms,
> checkpointLockWait=0ms, checkpointListenersExecuteTime=5ms,
> checkpointLockHoldTime=6ms, reason='timeout']
> 2023-11-28 16:40:18.905 [WARN
> ][client-connector-#83][org.apache.ignite.internal.processors.odbc.ClientListenerNioListener]
> Failed to process client request
> [req=o.a.i.i.processors.platform.client.compute.ClientExecuteTaskRequest@33b4781e,
> msg=Topology projection is empty.]
> org.apache.ignite.internal.processors.platform.client.IgniteClientException:
> Topology projection is empty.
> at
> org.apache.ignite.internal.processors.platform.client.compute.ClientComputeTask.execute(ClientComputeTask.java:117)
> ~[ignite-core-16.0.0-SNAPSHOT.jar:16.0.0-SNAPSHOT]
> at
> org.apache.ignite.internal.processors.platform.client.compute.ClientExecuteTaskRequest.process(ClientExecuteTaskRequest.java:89)
> ~[ignite-core-16.0.0-SNAPSHOT.jar:16.0.0-SNAPSHOT]
> at
> org.apache.ignite.internal.processors.platform.client.ClientRequestHandler.handle(ClientRequestHandler.java:101)
> ~[ignite-core-16.0.0-SNAPSHOT.jar:16.0.0-SNAPSHOT]
> at
> org.apache.ignite.internal.processors.odbc.ClientListenerNioListener.onMessage(ClientListenerNioListener.java:211)
> [ignite-core-16.0.0-SNAPSHOT.jar:16.0.0-SNAPSHOT]
> at
> org.apache.ignite.internal.processors.odbc.ClientListenerNioListener.onMessage(ClientListenerNioListener.java:57)
> [ignite-core-16.0.0-SNAPSHOT.jar:16.0.0-SNAPSHOT]
> at
> org.apache.ignite.internal.util.nio.GridNioFilterChain$TailFilter.onMessageReceived(GridNioFilterChain.java:279)
> [ignite-core-16.0.0-SNAPSHOT.jar:16.0.0-SNAPSHOT]
> at
> org.apache.ignite.internal.util.nio.GridNioFilterAdapter.proceedMessageReceived(GridNioFilterAdapter.java:109)
> [ignite-core-16.0.0-SNAPSHOT.jar:16.0.0-SNAPSHOT]
> at
> org.apache.ignite.internal.util.nio.GridNioAsyncNotifyFilter$3.body(GridNioAsyncNotifyFilter.java:97)
> [ignite-core-16.0.0-SNAPSHOT.jar:16.0.0-SNAPSHOT]
> at
> org.apache.ignite.internal.util.worker.GridWorker.run(GridWorker.java:125)
> [ignite-core-16.0.0-SNAPSHOT.jar:16.0.0-SNAPSHOT]
> at
> org.apache.ignite.internal.util.worker.GridWorkerPool$1.run(GridWorkerPool.java:70)
> [ignite-core-16.0.0-SNAPSHOT.jar:16.0.0-SNAPSHOT]
> at
> java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
> [?:?]
> at
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
> [?:?]
> at java.lang.Thread.run(Thread.java:834) [?:?]
> 2023-11-28 16:40:48.895 [WARN
> ][client-connector-#82][org.apache.ignite.internal.processors.odbc.ClientListenerNioListener]
> Failed to process client request
> [req=o.a.i.i.processors.platform.client.compute.ClientExecuteTaskRequest@aa13d84,
> msg=Topology projection is empty.]
> org.apache.ignite.internal.processors.platform.client.IgniteClientException:
> Topology projection is empty.
> at
> org.apache.ignite.internal.processors.platform.client.compute.ClientComputeTask.execute(ClientComputeTask.java:117)
> ~[ignite-core-16.0.0-SNAPSHOT.jar:16.0.0-SNAPSHOT]
> at
> org.apache.ignite.internal.processors.platform.client.compute.ClientExecuteTaskRequest.process(ClientExecuteTaskRequest.java:89)
> ~[ignite-core-16.0.0-SNAPSHOT.jar:16.0.0-SNAPSHOT]
> at
> org.apache.ignite.internal.processors.platform.client.ClientRequestHandler.handle(ClientRequestHandler.java:101)
> ~[ignite-core-16.0.0-SNAPSHOT.jar:16.0.0-SNAPSHOT]
> at
> org.apache.ignite.internal.processors.odbc.ClientListenerNioListener.onMessage(ClientListenerNioListener.java:211)
> [ignite-core-16.0.0-SNAPSHOT.jar:16.0.0-SNAPSHOT]
> at
> org.apache.ignite.internal.processors.odbc.ClientListenerNioListener.onMessage(ClientListenerNioListener.java:57)
> [ignite-core-16.0.0-SNAPSHOT.jar:16.0.0-SNAPSHOT]
> at
> org.apache.ignite.internal.util.nio.GridNioFilterChain$TailFilter.onMessageReceived(GridNioFilterChain.java:279)
> [ignite-core-16.0.0-SNAPSHOT.jar:16.0.0-SNAPSHOT]
> at
> org.apache.ignite.internal.util.nio.GridNioFilterAdapter.proceedMessageReceived(GridNioFilterAdapter.java:109)
> [ignite-core-16.0.0-SNAPSHOT.jar:16.0.0-SNAPSHOT]
> at
> org.apache.ignite.internal.util.nio.GridNioAsyncNotifyFilter$3.body(GridNioAsyncNotifyFilter.java:97)
> [ignite-core-16.0.0-SNAPSHOT.jar:16.0.0-SNAPSHOT]
> at
> org.apache.ignite.internal.util.worker.GridWorker.run(GridWorker.java:125)
> [ignite-core-16.0.0-SNAPSHOT.jar:16.0.0-SNAPSHOT]
> at
> org.apache.ignite.internal.util.worker.GridWorkerPool$1.run(GridWorkerPool.java:70)
> [ignite-core-16.0.0-SNAPSHOT.jar:16.0.0-SNAPSHOT]
> at
> java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
> [?:?]
> at
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
> [?:?]
> at java.lang.Thread.run(Thread.java:834) [?:?]
> 2023-11-28 16:41:00.885 [INFO
> ][client-connector-#82][org.apache.ignite.internal.managers.deployment.GridDeploymentLocalStore]
> Task locally deployed: class
> com.sbt.gridcenter.plugin.cluster.ClusterInfoSQLTask
> 2023-11-28 16:41:00.955 [WARN
> ][client-connector-#83][org.apache.ignite.internal.processors.odbc.ClientListenerNioListener]
> Failed to process client request
> [req=o.a.i.i.processors.platform.client.compute.ClientExecuteTaskRequest@3084b0a4,
> msg=Topology projection is empty.]
> org.apache.ignite.internal.processors.platform.client.IgniteClientException:
> Topology projection is empty.
> at
> org.apache.ignite.internal.processors.platform.client.compute.ClientComputeTask.execute(ClientComputeTask.java:117)
> ~[ignite-core-16.0.0-SNAPSHOT.jar:16.0.0-SNAPSHOT]
> at
> org.apache.ignite.internal.processors.platform.client.compute.ClientExecuteTaskRequest.process(ClientExecuteTaskRequest.java:89)
> ~[ignite-core-16.0.0-SNAPSHOT.jar:16.0.0-SNAPSHOT]
> at
> org.apache.ignite.internal.processors.platform.client.ClientRequestHandler.handle(ClientRequestHandler.java:101)
> ~[ignite-core-16.0.0-SNAPSHOT.jar:16.0.0-SNAPSHOT]
> at
> org.apache.ignite.internal.processors.odbc.ClientListenerNioListener.onMessage(ClientListenerNioListener.java:211)
> [ignite-core-16.0.0-SNAPSHOT.jar:16.0.0-SNAPSHOT]
> at
> org.apache.ignite.internal.processors.odbc.ClientListenerNioListener.onMessage(ClientListenerNioListener.java:57)
> [ignite-core-16.0.0-SNAPSHOT.jar:16.0.0-SNAPSHOT]
> at
> org.apache.ignite.internal.util.nio.GridNioFilterChain$TailFilter.onMessageReceived(GridNioFilterChain.java:279)
> [ignite-core-16.0.0-SNAPSHOT.jar:16.0.0-SNAPSHOT]
> at
> org.apache.ignite.internal.util.nio.GridNioFilterAdapter.proceedMessageReceived(GridNioFilterAdapter.java:109)
> [ignite-core-16.0.0-SNAPSHOT.jar:16.0.0-SNAPSHOT]
> at
> org.apache.ignite.internal.util.nio.GridNioAsyncNotifyFilter$3.body(GridNioAsyncNotifyFilter.java:97)
> [ignite-core-16.0.0-SNAPSHOT.jar:16.0.0-SNAPSHOT]
> at
> org.apache.ignite.internal.util.worker.GridWorker.run(GridWorker.java:125)
> [ignite-core-16.0.0-SNAPSHOT.jar:16.0.0-SNAPSHOT]
> at
> org.apache.ignite.internal.util.worker.GridWorkerPool$1.run(GridWorkerPool.java:70)
> [ignite-core-16.0.0-SNAPSHOT.jar:16.0.0-SNAPSHOT]
> at
> java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
> [?:?]
> at
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
> [?:?]
> at java.lang.Thread.run(Thread.java:834) [?:?]
> {code}
> From my understanding this issue might be caused by
> https://issues.apache.org/jira/browse/IGNITE-18545 fix where in
> {{GridTaskProcessor}} the following change was made:
> !image-2023-11-28-16-52-32-145.png!
> With this dirty fix "empty topology" exception is no longer reproducible:
> {code:java}
> Index:
> modules/core/src/main/java/org/apache/ignite/internal/processors/task/GridTaskProcessor.java
> IDEA additional info:
> Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
> <+>UTF-8
> ===================================================================
> diff --git
> a/modules/core/src/main/java/org/apache/ignite/internal/processors/task/GridTaskProcessor.java
>
> b/modules/core/src/main/java/org/apache/ignite/internal/processors/task/GridTaskProcessor.java
> ---
> a/modules/core/src/main/java/org/apache/ignite/internal/processors/task/GridTaskProcessor.java
> (revision d943c4cf1f8d00c0376af51945c2da453eeb745c)
> +++
> b/modules/core/src/main/java/org/apache/ignite/internal/processors/task/GridTaskProcessor.java
> (date 1701174982188)
> @@ -651,7 +651,7 @@
> if (topPred == null) {
> final Collection<ClusterNode> nodes = opts.projection();
>
> - top = nodes != null ? F.nodeIds(nodes) : null;
> + top = nodes == null || nodes.isEmpty() ? null : F.nodeIds(nodes);
> }
>
> boolean internal = false;
> Index:
> modules/core/src/main/java/org/apache/ignite/internal/processors/task/GridTaskWorker.java
> IDEA additional info:
> Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
> <+>UTF-8
> ===================================================================
> diff --git
> a/modules/core/src/main/java/org/apache/ignite/internal/processors/task/GridTaskWorker.java
>
> b/modules/core/src/main/java/org/apache/ignite/internal/processors/task/GridTaskWorker.java
> ---
> a/modules/core/src/main/java/org/apache/ignite/internal/processors/task/GridTaskWorker.java
> (revision d943c4cf1f8d00c0376af51945c2da453eeb745c)
> +++
> b/modules/core/src/main/java/org/apache/ignite/internal/processors/task/GridTaskWorker.java
> (date 1701174982174)
> @@ -686,7 +686,7 @@
> private List<ClusterNode> getTaskTopology() throws
> IgniteCheckedException {
> Collection<UUID> top = ses.getTopology();
>
> - Collection<? extends ClusterNode> subgrid = top != null ?
> ctx.discovery().nodes(top) : ctx.discovery().allNodes();
> + Collection<? extends ClusterNode> subgrid = top == null ||
> top.isEmpty() ? ctx.discovery().allNodes() : ctx.discovery().nodes(top);
>
> int size = subgrid.size();
>
> Index:
> modules/core/src/main/java/org/apache/ignite/internal/GridTaskSessionImpl.java
> IDEA additional info:
> Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
> <+>UTF-8
> ===================================================================
> diff --git
> a/modules/core/src/main/java/org/apache/ignite/internal/GridTaskSessionImpl.java
>
> b/modules/core/src/main/java/org/apache/ignite/internal/GridTaskSessionImpl.java
> ---
> a/modules/core/src/main/java/org/apache/ignite/internal/GridTaskSessionImpl.java
> (revision d943c4cf1f8d00c0376af51945c2da453eeb745c)
> +++
> b/modules/core/src/main/java/org/apache/ignite/internal/GridTaskSessionImpl.java
> (date 1701174982180)
> @@ -828,7 +828,7 @@
> if (topPred != null)
> return F.viewReadOnly(ctx.discovery().allNodes(), F.node2id(),
> topPred);
>
> - return top != null ? top : F.nodeIds(ctx.discovery().allNodes());
> + return top == null || top.isEmpty() ?
> F.nodeIds(ctx.discovery().allNodes()) : top;
> }
>
> /**
> {code}
--
This message was sent by Atlassian Jira
(v8.20.10#820010)