Valery Shorin created IGNITE-20988:
--------------------------------------

             Summary: 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
         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)

Reply via email to