This is an automated email from the ASF dual-hosted git repository.

agoncharuk pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/ignite.git


The following commit(s) were added to refs/heads/master by this push:
     new d3fc970  IGNITE-13100 Fix exceptions raised when cache group metrics 
are read on client node - Fixes #7875.
d3fc970 is described below

commit d3fc970cc96b6665303433c2ff3eacb58fb0ed51
Author: Alexey Goncharuk <alexey.goncha...@gmail.com>
AuthorDate: Tue Jun 2 16:38:24 2020 +0300

    IGNITE-13100 Fix exceptions raised when cache group metrics are read on 
client node - Fixes #7875.
    
    Signed-off-by: Alexey Goncharuk <alexey.goncha...@gmail.com>
---
 .../processors/cache/CacheGroupMetricsImpl.java    | 10 +++-
 .../processors/cache/CacheGroupMetricsTest.java    | 68 +++++++++++++++++++++-
 2 files changed, 74 insertions(+), 4 deletions(-)

diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheGroupMetricsImpl.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheGroupMetricsImpl.java
index cde838b..15a989d 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheGroupMetricsImpl.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheGroupMetricsImpl.java
@@ -92,7 +92,7 @@ public class CacheGroupMetricsImpl {
 
         DataStorageConfiguration dsCfg = 
ctx.shared().kernalContext().config().getDataStorageConfiguration();
 
-        boolean persistentEnabled = CU.isPersistentCache(cacheCfg, dsCfg);
+        boolean persistentEnabled = !ctx.shared().kernalContext().clientNode() 
&& CU.isPersistentCache(cacheCfg, dsCfg);
 
         MetricRegistry mreg = 
ctx.shared().kernalContext().metric().registry(metricGroupName());
 
@@ -464,12 +464,16 @@ public class CacheGroupMetricsImpl {
 
     /** */
     public long getTotalAllocatedPages() {
-        return grpPageAllocationTracker.value();
+        return ctx.shared().kernalContext().clientNode() ?
+            0 :
+            grpPageAllocationTracker.value();
     }
 
     /** */
     public long getTotalAllocatedSize() {
-        return getTotalAllocatedPages() * 
ctx.dataRegion().pageMemory().pageSize();
+        return ctx.shared().kernalContext().clientNode() ?
+            0 :
+            getTotalAllocatedPages() * 
ctx.dataRegion().pageMemory().pageSize();
     }
 
     /** */
diff --git 
a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/CacheGroupMetricsTest.java
 
b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/CacheGroupMetricsTest.java
index e403843..8270d91 100644
--- 
a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/CacheGroupMetricsTest.java
+++ 
b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/CacheGroupMetricsTest.java
@@ -26,13 +26,17 @@ import java.util.Map;
 import java.util.Set;
 import java.util.UUID;
 import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.atomic.AtomicReference;
+import java.util.function.Consumer;
 import org.apache.ignite.IgniteCache;
 import org.apache.ignite.IgniteDataStreamer;
+import org.apache.ignite.IgniteException;
 import org.apache.ignite.cache.CacheAtomicityMode;
 import org.apache.ignite.cache.CacheMode;
 import org.apache.ignite.cache.affinity.AffinityFunction;
 import org.apache.ignite.cache.affinity.AffinityFunctionContext;
 import org.apache.ignite.cluster.ClusterNode;
+import org.apache.ignite.cluster.ClusterState;
 import org.apache.ignite.configuration.CacheConfiguration;
 import org.apache.ignite.configuration.DataRegionConfiguration;
 import org.apache.ignite.configuration.DataStorageConfiguration;
@@ -50,8 +54,10 @@ import org.apache.ignite.lang.IgnitePredicate;
 import org.apache.ignite.mxbean.CacheGroupMetricsMXBean;
 import org.apache.ignite.spi.metric.IntMetric;
 import org.apache.ignite.spi.metric.LongMetric;
+import org.apache.ignite.spi.metric.Metric;
 import org.apache.ignite.spi.metric.ObjectMetric;
 import org.apache.ignite.testframework.GridTestUtils;
+import org.apache.ignite.testframework.ListeningTestLogger;
 import org.apache.ignite.testframework.junits.common.GridCommonAbstractTest;
 import org.junit.Test;
 
@@ -64,7 +70,10 @@ import static 
org.apache.ignite.internal.processors.metric.impl.MetricUtils.metr
  */
 public class CacheGroupMetricsTest extends GridCommonAbstractTest implements 
Serializable {
     /** */
-    protected boolean pds = false;
+    protected boolean pds;
+
+    /** */
+    private final ListeningTestLogger testLog = new ListeningTestLogger(log);
 
     /** */
     private static class RoundRobinVariableSizeAffinityFunction implements 
AffinityFunction {
@@ -160,6 +169,8 @@ public class CacheGroupMetricsTest extends 
GridCommonAbstractTest implements Ser
 
         cfg.setCacheConfiguration(cCfg1, cCfg2, cCfg3, cCfg4);
 
+        cfg.setGridLogger(testLog);
+
         if (pds) {
             cfg.setDataStorageConfiguration(new DataStorageConfiguration()
                 .setDefaultDataRegionConfiguration(new 
DataRegionConfiguration()
@@ -404,6 +415,61 @@ public class CacheGroupMetricsTest extends 
GridCommonAbstractTest implements Ser
     }
 
     /**
+     * @throws Exception if failed.
+     */
+    @Test
+    public void testClientNodePds() throws Exception {
+        checkClientNode(true);
+    }
+
+    /**
+     * @throws Exception if failed.
+     */
+    @Test
+    public void testClientNodeNoPds() throws Exception {
+        checkClientNode(false);
+    }
+
+    /**
+     * @throws Exception if failed.
+     */
+    public void checkClientNode(boolean pds) throws Exception {
+        this.pds = pds;
+
+        startGrid(0);
+
+        IgniteEx client = startClientGrid(1);
+
+        if (pds)
+            client.cluster().state(ClusterState.ACTIVE);
+
+        AtomicReference<Exception> err = new AtomicReference<>();
+
+        Consumer<String> lsnr = new Consumer<String>() {
+            @Override public void accept(String s) {
+                if (s.contains("Exception"))
+                    err.set(new IgniteException("Error was logged: " + s));
+            }
+        };
+
+        testLog.registerListener(lsnr);
+
+        String[] names = new String[] {"group1", "group2", "cache4"};
+
+        for (String name : names) {
+            T2<CacheGroupMetricsMXBean, MetricRegistry> grp1 = 
cacheGroupMetrics(1, name);
+
+            for (Metric metric : grp1.get2())
+                metric.getAsString();
+        }
+
+        testLog.unregisterListener(lsnr);
+
+        if (err.get() != null)
+            throw err.get();
+    }
+
+    /**
      * Verifies metric for initialized local partitions.
      * It is incremented when partition is actually created on node and 
decremented when it is destroyed.
      *

Reply via email to