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

alexpl 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 8975f4d2d43 IGNITE-27699 Make "metastorage" and 
"distributedMetastorage" system views filtrable - Fixes #12674.
8975f4d2d43 is described below

commit 8975f4d2d43eaa82803448299bc531d7084d69ae
Author: Aleksey Plekhanov <[email protected]>
AuthorDate: Fri Jan 30 12:20:25 2026 +0300

    IGNITE-27699 Make "metastorage" and "distributedMetastorage" system views 
filtrable - Fixes #12674.
    
    Signed-off-by: Aleksey Plekhanov <[email protected]>
---
 .../systemview/walker/MetastorageViewWalker.java   | 16 +++++++++++
 .../GridCacheDatabaseSharedManager.java            | 11 ++++++--
 .../persistence/DistributedMetaStorageImpl.java    | 17 +++++++----
 .../spi/systemview/view/MetastorageView.java       |  2 ++
 .../ignite/internal/metric/SystemViewSelfTest.java | 33 ++++++++++++++++++++--
 5 files changed, 69 insertions(+), 10 deletions(-)

diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/managers/systemview/walker/MetastorageViewWalker.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/managers/systemview/walker/MetastorageViewWalker.java
index d6a6563d78f..a1c4b8c97a9 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/managers/systemview/walker/MetastorageViewWalker.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/managers/systemview/walker/MetastorageViewWalker.java
@@ -17,6 +17,9 @@
 
 package org.apache.ignite.internal.managers.systemview.walker;
 
+import java.util.Collections;
+import java.util.List;
+import org.apache.ignite.internal.util.typedef.F;
 import org.apache.ignite.spi.systemview.view.MetastorageView;
 import org.apache.ignite.spi.systemview.view.SystemViewRowAttributeWalker;
 
@@ -27,6 +30,19 @@ import 
org.apache.ignite.spi.systemview.view.SystemViewRowAttributeWalker;
  * @see MetastorageView
  */
 public class MetastorageViewWalker implements 
SystemViewRowAttributeWalker<MetastorageView> {
+    /** Filter key for attribute "name" */
+    public static final String NAME_FILTER = "name";
+
+    /** List of filtrable attributes. */
+    private static final List<String> FILTRABLE_ATTRS = 
Collections.unmodifiableList(F.asList(
+        "name"
+    ));
+
+    /** {@inheritDoc} */
+    @Override public List<String> filtrableAttributes() {
+        return FILTRABLE_ATTRS;
+    }
+
     /** {@inheritDoc} */
     @Override public void visitAll(AttributeVisitor v) {
         v.accept(0, "name", String.class);
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 23fcaddfb60..4ff6befc5d4 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
@@ -387,13 +387,18 @@ public class GridCacheDatabaseSharedManager extends 
IgniteCacheDatabaseSharedMan
 
     /** Registers system view. */
     private void registerSystemView() {
-        cctx.kernalContext().systemView().registerView(METASTORE_VIEW, 
METASTORE_VIEW_DESC,
-            new MetastorageViewWalker(), () -> {
+        
cctx.kernalContext().systemView().registerFiltrableView(METASTORE_VIEW, 
METASTORE_VIEW_DESC,
+            new MetastorageViewWalker(), filter -> {
                 try {
+                    String name = 
(String)filter.get(MetastorageViewWalker.NAME_FILTER);
+
                     List<MetastorageView> data = new ArrayList<>();
 
-                    metaStorage.iterate("", (key, valBytes) -> {
+                    metaStorage.iterate(name == null ? "" : name, (key, 
valBytes) -> {
                         try {
+                            if (name != null && !name.equals(key))
+                                return;
+
                             Serializable val = 
metaStorage.marshaller().unmarshal((byte[])valBytes, U.gridClassLoader());
 
                             data.add(new MetastorageView(key, 
IgniteUtils.toStringSafe(val)));
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/metastorage/persistence/DistributedMetaStorageImpl.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/metastorage/persistence/DistributedMetaStorageImpl.java
index 65952d22e40..c70956f694c 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/metastorage/persistence/DistributedMetaStorageImpl.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/metastorage/persistence/DistributedMetaStorageImpl.java
@@ -324,14 +324,21 @@ public class DistributedMetaStorageImpl extends 
GridProcessorAdapter
 
     /** */
     private void registerSystemView() {
-        ctx.systemView().registerView(DISTRIBUTED_METASTORE_VIEW, 
DISTRIBUTED_METASTORE_VIEW_DESC,
-            new MetastorageViewWalker(), () -> {
+        ctx.systemView().registerFiltrableView(DISTRIBUTED_METASTORE_VIEW, 
DISTRIBUTED_METASTORE_VIEW_DESC,
+            new MetastorageViewWalker(), filter -> {
+                String name = 
(String)filter.get(MetastorageViewWalker.NAME_FILTER);
+
                 try {
                     List<MetastorageView> data = new ArrayList<>();
 
-                    iterate("", (key, val) -> data.add(new 
MetastorageView(key, val == null || !val.getClass().isArray()
-                        ? IgniteUtils.toStringSafe(val)
-                        : S.arrayToString(val))));
+                    iterate(name == null ? "" : name, (key, val) -> {
+                        if (name != null && !name.equals(key))
+                            return;
+
+                        data.add(new MetastorageView(key, val == null || 
!val.getClass().isArray()
+                            ? IgniteUtils.toStringSafe(val)
+                            : S.arrayToString(val)));
+                    });
 
                     return data;
                 }
diff --git 
a/modules/core/src/main/java/org/apache/ignite/spi/systemview/view/MetastorageView.java
 
b/modules/core/src/main/java/org/apache/ignite/spi/systemview/view/MetastorageView.java
index 1d8d89c7a91..c7db44df203 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/spi/systemview/view/MetastorageView.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/spi/systemview/view/MetastorageView.java
@@ -17,6 +17,7 @@
 
 package org.apache.ignite.spi.systemview.view;
 
+import org.apache.ignite.internal.managers.systemview.walker.Filtrable;
 import org.apache.ignite.internal.managers.systemview.walker.Order;
 
 /**
@@ -40,6 +41,7 @@ public class MetastorageView {
 
     /** @return Metastorage record name. */
     @Order
+    @Filtrable
     public String name() {
         return name;
     }
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 84b68d8eb7c..b27fdbd938c 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
@@ -85,6 +85,7 @@ import org.apache.ignite.internal.client.thin.ProtocolVersion;
 import 
org.apache.ignite.internal.managers.systemview.walker.BaselineNodeAttributeViewWalker;
 import 
org.apache.ignite.internal.managers.systemview.walker.CachePagesListViewWalker;
 import 
org.apache.ignite.internal.managers.systemview.walker.ClientConnectionAttributeViewWalker;
+import 
org.apache.ignite.internal.managers.systemview.walker.MetastorageViewWalker;
 import 
org.apache.ignite.internal.managers.systemview.walker.NodeAttributeViewWalker;
 import 
org.apache.ignite.internal.processors.cache.persistence.GridCacheDatabaseSharedManager;
 import 
org.apache.ignite.internal.processors.cache.persistence.IgniteCacheDatabaseSharedManager;
@@ -2179,6 +2180,19 @@ public class SystemViewSelfTest extends 
GridCommonAbstractTest {
             assertNotNull(F.find(metaStoreView, null,
                 (IgnitePredicate<? super MetastorageView>)view ->
                     unmarshalledName.equals(view.name()) && 
unmarshalledVal.equals(view.value())));
+
+            // Test filtering.
+            assertTrue(metaStoreView instanceof FiltrableSystemView);
+
+            Iterator<MetastorageView> iter = 
((FiltrableSystemView<MetastorageView>)metaStoreView)
+                .iterator(F.asMap(MetastorageViewWalker.NAME_FILTER, name));
+
+            assertTrue(iter.hasNext());
+
+            MetastorageView row = iter.next();
+
+            assertTrue(name.equals(row.name()) && val.equals(row.value()));
+            assertFalse(iter.hasNext());
         }
     }
 
@@ -2204,18 +2218,33 @@ public class SystemViewSelfTest extends 
GridCommonAbstractTest {
 
             dms.write(name, val);
 
+            SystemView<MetastorageView> dmsView = 
ignite.context().systemView().view(DISTRIBUTED_METASTORE_VIEW);
+
             assertNotNull(F.find(
-                ignite.context().systemView().view(DISTRIBUTED_METASTORE_VIEW),
+                dmsView,
                 null,
                 (IgnitePredicate<? super MetastorageView>)view -> 
name.equals(view.name()) && val.equals(view.value()))
             );
 
             assertNotNull(F.find(
-                ignite.context().systemView().view(DISTRIBUTED_METASTORE_VIEW),
+                dmsView,
                 null,
                 (IgnitePredicate<? super MetastorageView>)
                     view -> view.name().endsWith(histogramName) && "[1, 2, 
3]".equals(view.value()))
             );
+
+            // Test filtering.
+            assertTrue(dmsView instanceof FiltrableSystemView);
+
+            Iterator<MetastorageView> iter = 
((FiltrableSystemView<MetastorageView>)dmsView)
+                .iterator(F.asMap(MetastorageViewWalker.NAME_FILTER, name));
+
+            assertTrue(iter.hasNext());
+
+            MetastorageView row = iter.next();
+
+            assertTrue(name.equals(row.name()) && val.equals(row.value()));
+            assertFalse(iter.hasNext());
         }
     }
 

Reply via email to