Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -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;

Expand All @@ -27,6 +30,19 @@
* @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);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -387,13 +387,18 @@ public FilePageStoreManager getFileStoreManager() {

/** 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)));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -324,14 +324,21 @@ public void inMemoryReadyForRead() {

/** */
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;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;

/**
Expand All @@ -40,6 +41,7 @@ public MetastorageView(String name, String value) {

/** @return Metastorage record name. */
@Order
@Filtrable
public String name() {
return name;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -85,6 +85,7 @@
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;
Expand Down Expand Up @@ -2179,6 +2180,19 @@ public void testMetastorage() throws Exception {
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());
}
}

Expand All @@ -2204,18 +2218,33 @@ public void testDistributedMetastorage() throws Exception {

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

Expand Down
Loading