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());
}
}