You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by ni...@apache.org on 2020/09/11 13:05:56 UTC

[ignite] branch master updated: IGNITE-13427 Fix Metastore view iteration on unmarshalleable keys (#8240)

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

nizhikov 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 f60771d  IGNITE-13427 Fix Metastore view iteration on unmarshalleable keys (#8240)
f60771d is described below

commit f60771d7477cd4fcc8530ff24cf8f8d2561b981a
Author: Nikolay <ni...@apache.org>
AuthorDate: Fri Sep 11 16:05:28 2020 +0300

    IGNITE-13427 Fix Metastore view iteration on unmarshalleable keys (#8240)
---
 .../cache/persistence/GridCacheDatabaseSharedManager.java  | 13 +++++++++++--
 .../cache/persistence/metastorage/MetaStorage.java         |  5 +++++
 .../apache/ignite/internal/metric/JmxExporterSpiTest.java  | 14 +++++++++++---
 .../apache/ignite/internal/metric/SystemViewSelfTest.java  | 12 +++++++++---
 .../processors/cache/metric/SqlViewExporterSpiTest.java    |  6 ++++++
 5 files changed, 42 insertions(+), 8 deletions(-)

diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/GridCacheDatabaseSharedManager.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/GridCacheDatabaseSharedManager.java
index c07338b..fc1be3a 100755
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/GridCacheDatabaseSharedManager.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/GridCacheDatabaseSharedManager.java
@@ -20,6 +20,7 @@ package org.apache.ignite.internal.processors.cache.persistence;
 import java.io.File;
 import java.io.IOException;
 import java.io.RandomAccessFile;
+import java.io.Serializable;
 import java.nio.ByteBuffer;
 import java.nio.ByteOrder;
 import java.nio.channels.FileChannel;
@@ -412,8 +413,16 @@ public class GridCacheDatabaseSharedManager extends IgniteCacheDatabaseSharedMan
                 try {
                     List<MetastorageView> data = new ArrayList<>();
 
-                    metaStorage.iterate("", (key, val) ->
-                        data.add(new MetastorageView(key, IgniteUtils.toStringSafe(val))), true);
+                    metaStorage.iterate("", (key, valBytes) -> {
+                        try {
+                            Serializable val = metaStorage.marshaller().unmarshal((byte[])valBytes, U.gridClassLoader());
+
+                            data.add(new MetastorageView(key, IgniteUtils.toStringSafe(val)));
+                        }
+                        catch (IgniteCheckedException ignored) {
+                            data.add(new MetastorageView(key, "[Raw data. " + (((byte[])valBytes).length + " bytes]")));
+                        }
+                    }, false);
 
                     return data;
                 }
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/metastorage/MetaStorage.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/metastorage/MetaStorage.java
index ef7e522..c851292 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/metastorage/MetaStorage.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/metastorage/MetaStorage.java
@@ -697,6 +697,11 @@ public class MetaStorage implements DbCheckpointListener, ReadWriteMetastorage {
         }
     }
 
+    /** */
+    public Marshaller marshaller() {
+        return marshaller;
+    }
+
     /**
      * Temporary storage internal
      */
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/metric/JmxExporterSpiTest.java b/modules/core/src/test/java/org/apache/ignite/internal/metric/JmxExporterSpiTest.java
index 95c18a1..0885e1f 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/metric/JmxExporterSpiTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/metric/JmxExporterSpiTest.java
@@ -1074,25 +1074,33 @@ public class JmxExporterSpiTest extends AbstractExporterSpiTest {
 
         String name = "test-key";
         String val = "test-value";
+        String unmarshalledName = "unmarshalled-key";
+        String unmarshalledVal = "[Raw data. 0 bytes]";
 
         db.checkpointReadLock();
 
         try {
             db.metaStorage().write(name, val);
+            db.metaStorage().writeRaw(unmarshalledName, new byte[0]);
         } finally {
             db.checkpointReadUnlock();
         }
 
         TabularDataSupport view = systemView(METASTORE_VIEW);
 
+        boolean found = false;
+        boolean foundUnmarshalled = false;
+
         for (int i = 0; i < view.size(); i++) {
             CompositeData row = view.get(new Object[] {i});
 
-            if (row.get("name").equals(name) && row.get("value").equals(val))
-                return;
+            if (row.get("name").equals(name) && val.equals(row.get("value")))
+                found = true;
+            else if (row.get("name").equals(unmarshalledName) && row.get("value").equals(unmarshalledVal))
+                foundUnmarshalled = true;
         }
 
-        fail();
+        assertTrue(found && foundUnmarshalled);
     }
 
     /** */
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/metric/SystemViewSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/metric/SystemViewSelfTest.java
index c5ab26d..13c1c0b 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/metric/SystemViewSelfTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/metric/SystemViewSelfTest.java
@@ -1138,19 +1138,25 @@ public class SystemViewSelfTest extends GridCommonAbstractTest {
 
             String name = "test-key";
             String val = "test-value";
+            String unmarshalledName = "unmarshalled-key";
+            String unmarshalledVal = "[Raw data. 0 bytes]";
 
             db.checkpointReadLock();
 
             try {
                 db.metaStorage().write(name, val);
+                db.metaStorage().writeRaw(unmarshalledName, new byte[0]);
             } finally {
                 db.checkpointReadUnlock();
             }
 
-            MetastorageView testKey = F.find(metaStoreView, null,
-                (IgnitePredicate<? super MetastorageView>)view -> name.equals(view.name()) && val.equals(view.value()));
+            assertNotNull(F.find(metaStoreView, null,
+                (IgnitePredicate<? super MetastorageView>)view ->
+                    name.equals(view.name()) && val.equals(view.value())));
 
-            assertNotNull(testKey);
+            assertNotNull(F.find(metaStoreView, null,
+                (IgnitePredicate<? super MetastorageView>)view ->
+                    unmarshalledName.equals(view.name()) && unmarshalledVal.equals(view.value())));
         }
     }
 
diff --git a/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/metric/SqlViewExporterSpiTest.java b/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/metric/SqlViewExporterSpiTest.java
index 9f29a7c..17eecd3 100644
--- a/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/metric/SqlViewExporterSpiTest.java
+++ b/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/metric/SqlViewExporterSpiTest.java
@@ -1139,17 +1139,23 @@ public class SqlViewExporterSpiTest extends AbstractExporterSpiTest {
 
         String name = "test-key";
         String val = "test-value";
+        String unmarshalledName = "unmarshalled-key";
+        String unmarshalledVal = "[Raw data. 0 bytes]";
 
         db.checkpointReadLock();
 
         try {
             db.metaStorage().write(name, val);
+            db.metaStorage().writeRaw(unmarshalledName, new byte[0]);
         } finally {
             db.checkpointReadUnlock();
         }
 
         assertEquals(1, execute(ignite0, "SELECT * FROM SYS.METASTORAGE WHERE name = ? AND value = ?",
             name, val).size());
+
+        assertEquals(1, execute(ignite0, "SELECT * FROM SYS.METASTORAGE WHERE name = ? AND value = ?",
+            unmarshalledName, unmarshalledVal).size());
     }
 
     /** */