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/09 15:39:41 UTC
[ignite] branch master updated: IGNITE-13409 MetastorageView and
DistributedMetastorageView introduced. (#8225)
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 ca01605 IGNITE-13409 MetastorageView and DistributedMetastorageView introduced. (#8225)
ca01605 is described below
commit ca016055ebb7f3fe2fbae76075688cb9eec3f791
Author: Nikolay <ni...@apache.org>
AuthorDate: Wed Sep 9 18:39:28 2020 +0300
IGNITE-13409 MetastorageView and DistributedMetastorageView introduced. (#8225)
---
.../internal/jdbc2/JdbcMetadataSelfTest.java | 3 +-
.../ignite/jdbc/thin/JdbcThinMetadataSelfTest.java | 7 ++-
.../SystemViewRowAttributeWalkerGenerator.java | 2 +
.../systemview/walker/MetastorageViewWalker.java | 46 ++++++++++++++
.../GridCacheDatabaseSharedManager.java | 31 +++++++++
.../persistence/DistributedMetaStorageImpl.java | 40 +++++++++++-
.../spi/systemview/view/MetastorageView.java | 52 +++++++++++++++
.../ignite/internal/metric/JmxExporterSpiTest.java | 73 ++++++++++++++++++++++
.../ignite/internal/metric/SystemViewSelfTest.java | 70 +++++++++++++++++++++
.../cache/metric/SqlViewExporterSpiTest.java | 55 +++++++++++++++-
10 files changed, 374 insertions(+), 5 deletions(-)
diff --git a/modules/clients/src/test/java/org/apache/ignite/internal/jdbc2/JdbcMetadataSelfTest.java b/modules/clients/src/test/java/org/apache/ignite/internal/jdbc2/JdbcMetadataSelfTest.java
index 604ba15..9c21309 100755
--- a/modules/clients/src/test/java/org/apache/ignite/internal/jdbc2/JdbcMetadataSelfTest.java
+++ b/modules/clients/src/test/java/org/apache/ignite/internal/jdbc2/JdbcMetadataSelfTest.java
@@ -346,7 +346,8 @@ public class JdbcMetadataSelfTest extends GridCommonAbstractTest {
"DATASTREAM_THREADPOOL_QUEUE",
"CACHE_GROUP_PAGE_LISTS",
"PARTITION_STATES",
- "BINARY_METADATA"
+ "BINARY_METADATA",
+ "DISTRIBUTED_METASTORAGE"
));
Set<String> actViews = new HashSet<>();
diff --git a/modules/clients/src/test/java/org/apache/ignite/jdbc/thin/JdbcThinMetadataSelfTest.java b/modules/clients/src/test/java/org/apache/ignite/jdbc/thin/JdbcThinMetadataSelfTest.java
index 4abe84f..a911a1c 100644
--- a/modules/clients/src/test/java/org/apache/ignite/jdbc/thin/JdbcThinMetadataSelfTest.java
+++ b/modules/clients/src/test/java/org/apache/ignite/jdbc/thin/JdbcThinMetadataSelfTest.java
@@ -444,7 +444,8 @@ public class JdbcThinMetadataSelfTest extends JdbcThinAbstractSelfTest {
"SYS.CACHE_GROUP_PAGE_LISTS",
"SYS.DATA_REGION_PAGE_LISTS",
"SYS.PARTITION_STATES",
- "SYS.BINARY_METADATA"
+ "SYS.BINARY_METADATA",
+ "SYS.DISTRIBUTED_METASTORAGE"
))
);
}
@@ -996,7 +997,9 @@ public class JdbcThinMetadataSelfTest extends JdbcThinAbstractSelfTest {
"SYS.BINARY_METADATA.TYPE_ID.null.10",
"SYS.BINARY_METADATA.IS_ENUM.null.1",
"SYS.BINARY_METADATA.FIELDS_COUNT.null.10",
- "SYS.BINARY_METADATA.TYPE_NAME.null.2147483647"
+ "SYS.BINARY_METADATA.TYPE_NAME.null.2147483647",
+ "SYS.DISTRIBUTED_METASTORAGE.NAME.null.2147483647",
+ "SYS.DISTRIBUTED_METASTORAGE.VALUE.null.2147483647"
));
Assert.assertEquals(expectedCols, actualSystemCols);
diff --git a/modules/codegen/src/main/java/org/apache/ignite/codegen/SystemViewRowAttributeWalkerGenerator.java b/modules/codegen/src/main/java/org/apache/ignite/codegen/SystemViewRowAttributeWalkerGenerator.java
index 3752dff..a56ab3d 100644
--- a/modules/codegen/src/main/java/org/apache/ignite/codegen/SystemViewRowAttributeWalkerGenerator.java
+++ b/modules/codegen/src/main/java/org/apache/ignite/codegen/SystemViewRowAttributeWalkerGenerator.java
@@ -46,6 +46,7 @@ import org.apache.ignite.spi.systemview.view.ClusterNodeView;
import org.apache.ignite.spi.systemview.view.ComputeJobView;
import org.apache.ignite.spi.systemview.view.ComputeTaskView;
import org.apache.ignite.spi.systemview.view.ContinuousQueryView;
+import org.apache.ignite.spi.systemview.view.MetastorageView;
import org.apache.ignite.spi.systemview.view.PagesListView;
import org.apache.ignite.spi.systemview.view.PartitionStateView;
import org.apache.ignite.spi.systemview.view.ScanQueryView;
@@ -108,6 +109,7 @@ public class SystemViewRowAttributeWalkerGenerator {
gen.generateAndWrite(CachePagesListView.class, DFLT_SRC_DIR);
gen.generateAndWrite(PartitionStateView.class, DFLT_SRC_DIR);
gen.generateAndWrite(BinaryMetadataView.class, DFLT_SRC_DIR);
+ gen.generateAndWrite(MetastorageView.class, DFLT_SRC_DIR);
gen.generateAndWrite(SqlSchemaView.class, INDEXING_SRC_DIR);
gen.generateAndWrite(SqlTableView.class, INDEXING_SRC_DIR);
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
new file mode 100644
index 0000000..d6a6563
--- /dev/null
+++ b/modules/core/src/main/java/org/apache/ignite/internal/managers/systemview/walker/MetastorageViewWalker.java
@@ -0,0 +1,46 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.ignite.internal.managers.systemview.walker;
+
+import org.apache.ignite.spi.systemview.view.MetastorageView;
+import org.apache.ignite.spi.systemview.view.SystemViewRowAttributeWalker;
+
+/**
+ * Generated by {@code org.apache.ignite.codegen.SystemViewRowAttributeWalkerGenerator}.
+ * {@link MetastorageView} attributes walker.
+ *
+ * @see MetastorageView
+ */
+public class MetastorageViewWalker implements SystemViewRowAttributeWalker<MetastorageView> {
+ /** {@inheritDoc} */
+ @Override public void visitAll(AttributeVisitor v) {
+ v.accept(0, "name", String.class);
+ v.accept(1, "value", String.class);
+ }
+
+ /** {@inheritDoc} */
+ @Override public void visitAll(MetastorageView row, AttributeWithValueVisitor v) {
+ v.accept(0, "name", String.class, row.name());
+ v.accept(1, "value", String.class, row.value());
+ }
+
+ /** {@inheritDoc} */
+ @Override public int count() {
+ return 2;
+ }
+}
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 3dc121a..cde7232 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
@@ -75,6 +75,7 @@ import org.apache.ignite.internal.IgniteFutureTimeoutCheckedException;
import org.apache.ignite.internal.IgniteInternalFuture;
import org.apache.ignite.internal.NodeStoppingException;
import org.apache.ignite.internal.managers.discovery.GridDiscoveryManager;
+import org.apache.ignite.internal.managers.systemview.walker.MetastorageViewWalker;
import org.apache.ignite.internal.mem.DirectMemoryProvider;
import org.apache.ignite.internal.mem.DirectMemoryRegion;
import org.apache.ignite.internal.metric.IoStatisticsHolderNoOp;
@@ -155,6 +156,7 @@ import org.apache.ignite.lang.IgniteInClosure;
import org.apache.ignite.lang.IgniteOutClosure;
import org.apache.ignite.lang.IgnitePredicate;
import org.apache.ignite.mxbean.DataStorageMetricsMXBean;
+import org.apache.ignite.spi.systemview.view.MetastorageView;
import org.apache.ignite.thread.IgniteThread;
import org.apache.ignite.thread.IgniteThreadPoolExecutor;
import org.apache.ignite.transactions.TransactionState;
@@ -163,6 +165,7 @@ import org.jetbrains.annotations.Nullable;
import static java.nio.file.StandardOpenOption.READ;
import static java.util.Objects.nonNull;
+import static java.util.function.Function.identity;
import static org.apache.ignite.IgniteSystemProperties.IGNITE_CHECKPOINT_READ_LOCK_TIMEOUT;
import static org.apache.ignite.IgniteSystemProperties.IGNITE_PDS_WAL_REBALANCE_THRESHOLD;
import static org.apache.ignite.IgniteSystemProperties.IGNITE_PREFER_WAL_REBALANCE;
@@ -201,6 +204,12 @@ public class GridCacheDatabaseSharedManager extends IgniteCacheDatabaseSharedMan
/** MemoryPolicyConfiguration name reserved for meta store. */
public static final String METASTORE_DATA_REGION_NAME = "metastoreMemPlc";
+ /** Name of the system view for a system {@link MetaStorage}. */
+ public static final String METASTORE_VIEW = "metastorage";
+
+ /** Description of the system view for a {@link MetaStorage}. */
+ public static final String METASTORE_VIEW_DESC = "Local metastorage data";
+
/**
* Threshold to calculate limit for pages list on-heap caches.
* <p>
@@ -388,6 +397,26 @@ public class GridCacheDatabaseSharedManager extends IgniteCacheDatabaseSharedMan
return storeMgr;
}
+ /** Registers system view. */
+ private void registerSystemView() {
+ cctx.kernalContext().systemView().registerView(METASTORE_VIEW, METASTORE_VIEW_DESC,
+ new MetastorageViewWalker(), () -> {
+ try {
+ List<MetastorageView> data = new ArrayList<>();
+
+ metaStorage.iterate("", (key, val) ->
+ data.add(new MetastorageView(key, IgniteUtils.toStringSafe(val))), true);
+
+ return data;
+ }
+ catch (IgniteCheckedException e) {
+ log.warning("Metastore iteration error", e);
+
+ return Collections.emptyList();
+ }
+ }, identity());
+ }
+
/** */
private void notifyMetastorageReadyForRead() throws IgniteCheckedException {
for (MetastorageLifecycleListener lsnr : metastorageLifecycleLsnrs)
@@ -757,6 +786,8 @@ public class GridCacheDatabaseSharedManager extends IgniteCacheDatabaseSharedMan
cpHist.initialize(retreiveHistory());
+ registerSystemView();
+
notifyMetastorageReadyForRead();
}
finally {
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 82f6d68..1b4d657 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
@@ -18,8 +18,10 @@
package org.apache.ignite.internal.processors.metastorage.persistence;
import java.io.Serializable;
+import java.util.ArrayList;
import java.util.Arrays;
import java.util.BitSet;
+import java.util.Collections;
import java.util.List;
import java.util.Objects;
import java.util.UUID;
@@ -42,6 +44,7 @@ import org.apache.ignite.internal.IgniteInterruptedCheckedException;
import org.apache.ignite.internal.managers.discovery.DiscoveryCustomMessage;
import org.apache.ignite.internal.managers.discovery.DiscoveryLocalJoinData;
import org.apache.ignite.internal.managers.discovery.GridDiscoveryManager;
+import org.apache.ignite.internal.managers.systemview.walker.MetastorageViewWalker;
import org.apache.ignite.internal.processors.GridProcessorAdapter;
import org.apache.ignite.internal.processors.affinity.AffinityTopologyVersion;
import org.apache.ignite.internal.processors.cache.persistence.metastorage.MetaStorage;
@@ -54,6 +57,7 @@ import org.apache.ignite.internal.processors.metastorage.DistributedMetaStorage;
import org.apache.ignite.internal.processors.metastorage.DistributedMetaStorageListener;
import org.apache.ignite.internal.processors.metastorage.DistributedMetastorageLifecycleListener;
import org.apache.ignite.internal.processors.subscription.GridInternalSubscriptionProcessor;
+import org.apache.ignite.internal.util.IgniteUtils;
import org.apache.ignite.internal.util.future.GridFutureAdapter;
import org.apache.ignite.internal.util.typedef.internal.S;
import org.apache.ignite.internal.util.typedef.internal.U;
@@ -64,11 +68,13 @@ import org.apache.ignite.spi.IgniteNodeValidationResult;
import org.apache.ignite.spi.discovery.DiscoveryDataBag;
import org.apache.ignite.spi.discovery.DiscoveryDataBag.GridDiscoveryData;
import org.apache.ignite.spi.discovery.DiscoveryDataBag.JoiningNodeDiscoveryData;
+import org.apache.ignite.spi.systemview.view.MetastorageView;
import org.apache.ignite.thread.IgniteThread;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.annotations.TestOnly;
+import static java.util.function.Function.identity;
import static org.apache.ignite.IgniteSystemProperties.IGNITE_GLOBAL_METASTORAGE_HISTORY_MAX_BYTES;
import static org.apache.ignite.internal.GridComponent.DiscoveryDataExchangeType.META_STORAGE;
import static org.apache.ignite.internal.processors.cache.GridCacheUtils.isPersistenceEnabled;
@@ -79,6 +85,7 @@ import static org.apache.ignite.internal.processors.metastorage.persistence.Dist
import static org.apache.ignite.internal.processors.metastorage.persistence.DistributedMetaStorageUtil.marshal;
import static org.apache.ignite.internal.processors.metastorage.persistence.DistributedMetaStorageUtil.unmarshal;
import static org.apache.ignite.internal.processors.metastorage.persistence.DistributedMetaStorageVersion.INITIAL_VERSION;
+import static org.apache.ignite.internal.processors.metric.impl.MetricUtils.metricName;
/**
* <p>Implementation of {@link DistributedMetaStorage} based on {@link MetaStorage} for persistence and discovery SPI
@@ -113,6 +120,12 @@ public class DistributedMetaStorageImpl extends GridProcessorAdapter
public static final String NOT_SUPPORTED_MSG = "Ignite cluster has nodes that don't support" +
" distributed metastorage feature. Writing cannot be completed.";
+ /** Name of the system view for a system {@link MetaStorage}. */
+ public static final String DISTRIBUTED_METASTORE_VIEW = metricName("distributed", "metastorage");
+
+ /** Description of the system view for a {@link MetaStorage}. */
+ public static final String DISTRIBUTED_METASTORE_VIEW_DESC = "Distributed metastorage data";
+
/**
* {@code true} if local node is client.
*/
@@ -296,8 +309,31 @@ public class DistributedMetaStorageImpl extends GridProcessorAdapter
* Executed roughly at the same time as {@link #onMetaStorageReadyForRead(ReadOnlyMetastorage)}.
*/
public void inMemoryReadyForRead() {
- if (!isPersistenceEnabled)
+ if (!isPersistenceEnabled) {
+ registerSystemView();
+
notifyReadyForRead();
+ }
+ }
+
+ /** */
+ private void registerSystemView() {
+ ctx.systemView().registerView(DISTRIBUTED_METASTORE_VIEW, DISTRIBUTED_METASTORE_VIEW_DESC,
+ new MetastorageViewWalker(), () -> {
+ try {
+ List<MetastorageView> data = new ArrayList<>();
+
+ iterate("", (key, val) -> data.add(new MetastorageView(key, IgniteUtils.toStringSafe(val))));
+
+ return data;
+ }
+ catch (IgniteCheckedException e) {
+ log.warning("Metastore iteration error", e);
+
+ return Collections.emptyList();
+ }
+ }, identity());
+
}
/** Notify components listeners. */
@@ -380,6 +416,8 @@ public class DistributedMetaStorageImpl extends GridProcessorAdapter
localMetastorageUnlock();
}
+ registerSystemView();
+
notifyReadyForRead();
}
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
new file mode 100644
index 0000000..2f6a3a9
--- /dev/null
+++ b/modules/core/src/main/java/org/apache/ignite/spi/systemview/view/MetastorageView.java
@@ -0,0 +1,52 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.ignite.spi.systemview.view;
+
+import org.apache.ignite.internal.managers.systemview.walker.Order;
+
+/**
+ * Metastorage key representation for a {@link SystemView}.
+ */
+public class MetastorageView {
+ /** */
+ private final String name;
+
+ /** */
+ private final String value;
+
+ /**
+ * @param name Name.
+ * @param value Value
+ */
+ public MetastorageView(String name, String value) {
+ this.name = name;
+ this.value = value;
+ }
+
+ /** */
+ @Order
+ public String name() {
+ return name;
+ }
+
+ /** */
+ @Order(1)
+ public String value() {
+ return value;
+ }
+}
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 b393338..95c18a1 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
@@ -68,6 +68,8 @@ import org.apache.ignite.internal.managers.systemview.walker.CachePagesListViewW
import org.apache.ignite.internal.metric.SystemViewSelfTest.TestPredicate;
import org.apache.ignite.internal.metric.SystemViewSelfTest.TestRunnable;
import org.apache.ignite.internal.metric.SystemViewSelfTest.TestTransformer;
+import org.apache.ignite.internal.processors.cache.persistence.IgniteCacheDatabaseSharedManager;
+import org.apache.ignite.internal.processors.metastorage.DistributedMetaStorage;
import org.apache.ignite.internal.processors.metric.MetricRegistry;
import org.apache.ignite.internal.processors.metric.impl.HistogramMetricImpl;
import org.apache.ignite.internal.processors.odbc.jdbc.JdbcConnectionContext;
@@ -96,8 +98,10 @@ import static org.apache.ignite.internal.processors.cache.GridCacheProcessor.CAC
import static org.apache.ignite.internal.processors.cache.GridCacheUtils.cacheGroupId;
import static org.apache.ignite.internal.processors.cache.GridCacheUtils.cacheId;
import static org.apache.ignite.internal.processors.cache.binary.CacheObjectBinaryProcessorImpl.BINARY_METADATA_VIEW;
+import static org.apache.ignite.internal.processors.cache.persistence.GridCacheDatabaseSharedManager.METASTORE_VIEW;
import static org.apache.ignite.internal.processors.cache.transactions.IgniteTxManager.TXS_MON_LIST;
import static org.apache.ignite.internal.processors.continuous.GridContinuousProcessor.CQ_SYS_VIEW;
+import static org.apache.ignite.internal.processors.metastorage.persistence.DistributedMetaStorageImpl.DISTRIBUTED_METASTORE_VIEW;
import static org.apache.ignite.internal.processors.metric.GridMetricManager.CPU_LOAD;
import static org.apache.ignite.internal.processors.metric.GridMetricManager.CPU_LOAD_DESCRIPTION;
import static org.apache.ignite.internal.processors.metric.GridMetricManager.GC_CPU_LOAD;
@@ -1064,6 +1068,75 @@ public class JmxExporterSpiTest extends AbstractExporterSpiTest {
}
/** */
+ @Test
+ public void testMetastorage() throws Exception {
+ IgniteCacheDatabaseSharedManager db = ignite.context().cache().context().database();
+
+ String name = "test-key";
+ String val = "test-value";
+
+ db.checkpointReadLock();
+
+ try {
+ db.metaStorage().write(name, val);
+ } finally {
+ db.checkpointReadUnlock();
+ }
+
+ TabularDataSupport view = systemView(METASTORE_VIEW);
+
+ 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;
+ }
+
+ fail();
+ }
+
+ /** */
+ @Test
+ public void testDistributedMetastorage() throws Exception {
+ try (IgniteEx ignite1 = startGrid(1)) {
+ DistributedMetaStorage dms = ignite.context().distributedMetastorage();
+
+ String name = "test-distributed-key";
+ String val = "test-distributed-value";
+
+ dms.write(name, val);
+
+ TabularDataSupport view = systemView(DISTRIBUTED_METASTORE_VIEW);
+
+ boolean found = 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)) {
+ found = true;
+ break;
+ }
+ }
+
+ assertTrue(found);
+
+ assertTrue(waitForCondition(() -> {
+ TabularDataSupport view1 = systemView(ignite1, DISTRIBUTED_METASTORE_VIEW);
+
+ for (int i = 0; i < view1.size(); i++) {
+ CompositeData row = view1.get(new Object[] {i});
+
+ if (row.get("name").equals(name) && row.get("value").equals(val))
+ return true;
+ }
+
+ return false;
+ }, getTestTimeout()));
+ }
+ }
+
+ /** */
private void createTestHistogram(MetricRegistry mreg) {
long[] bounds = new long[] {50, 500};
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 5e904c6..c5ab26d 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
@@ -48,6 +48,7 @@ import org.apache.ignite.cache.query.QueryCursor;
import org.apache.ignite.cache.query.ScanQuery;
import org.apache.ignite.client.IgniteClient;
import org.apache.ignite.cluster.ClusterNode;
+import org.apache.ignite.cluster.ClusterState;
import org.apache.ignite.compute.ComputeJob;
import org.apache.ignite.compute.ComputeJobResult;
import org.apache.ignite.compute.ComputeJobResultPolicy;
@@ -62,6 +63,8 @@ import org.apache.ignite.internal.binary.mutabletest.GridBinaryTestClasses.TestO
import org.apache.ignite.internal.client.thin.ProtocolVersion;
import org.apache.ignite.internal.managers.systemview.walker.CachePagesListViewWalker;
import org.apache.ignite.internal.processors.cache.persistence.GridCacheDatabaseSharedManager;
+import org.apache.ignite.internal.processors.cache.persistence.IgniteCacheDatabaseSharedManager;
+import org.apache.ignite.internal.processors.metastorage.DistributedMetaStorage;
import org.apache.ignite.internal.processors.odbc.jdbc.JdbcConnectionContext;
import org.apache.ignite.internal.processors.service.DummyService;
import org.apache.ignite.internal.util.StripedExecutor;
@@ -82,6 +85,7 @@ import org.apache.ignite.spi.systemview.view.ClusterNodeView;
import org.apache.ignite.spi.systemview.view.ComputeTaskView;
import org.apache.ignite.spi.systemview.view.ContinuousQueryView;
import org.apache.ignite.spi.systemview.view.FiltrableSystemView;
+import org.apache.ignite.spi.systemview.view.MetastorageView;
import org.apache.ignite.spi.systemview.view.PagesListView;
import org.apache.ignite.spi.systemview.view.ScanQueryView;
import org.apache.ignite.spi.systemview.view.ServiceView;
@@ -105,9 +109,11 @@ import static org.apache.ignite.internal.processors.cache.GridCacheProcessor.CAC
import static org.apache.ignite.internal.processors.cache.GridCacheUtils.cacheGroupId;
import static org.apache.ignite.internal.processors.cache.GridCacheUtils.cacheId;
import static org.apache.ignite.internal.processors.cache.binary.CacheObjectBinaryProcessorImpl.BINARY_METADATA_VIEW;
+import static org.apache.ignite.internal.processors.cache.persistence.GridCacheDatabaseSharedManager.METASTORE_VIEW;
import static org.apache.ignite.internal.processors.cache.persistence.IgniteCacheDatabaseSharedManager.DATA_REGION_PAGE_LIST_VIEW;
import static org.apache.ignite.internal.processors.cache.transactions.IgniteTxManager.TXS_MON_LIST;
import static org.apache.ignite.internal.processors.continuous.GridContinuousProcessor.CQ_SYS_VIEW;
+import static org.apache.ignite.internal.processors.metastorage.persistence.DistributedMetaStorageImpl.DISTRIBUTED_METASTORE_VIEW;
import static org.apache.ignite.internal.processors.odbc.ClientListenerProcessor.CLI_CONN_VIEW;
import static org.apache.ignite.internal.processors.service.IgniteServiceProcessor.SVCS_VIEW;
import static org.apache.ignite.internal.processors.task.GridTaskProcessor.TASKS_VIEW;
@@ -1113,6 +1119,70 @@ public class SystemViewSelfTest extends GridCommonAbstractTest {
}
}
+ /** */
+ @Test
+ public void testMetastorage() throws Exception {
+ cleanPersistenceDir();
+
+ try (IgniteEx ignite = startGrid(getConfiguration().setDataStorageConfiguration(
+ new DataStorageConfiguration().setDefaultDataRegionConfiguration(
+ new DataRegionConfiguration().setPersistenceEnabled(true)
+ )))) {
+ ignite.cluster().state(ClusterState.ACTIVE);
+
+ IgniteCacheDatabaseSharedManager db = ignite.context().cache().context().database();
+
+ SystemView<MetastorageView> metaStoreView = ignite.context().systemView().view(METASTORE_VIEW);
+
+ assertNotNull(metaStoreView);
+
+ String name = "test-key";
+ String val = "test-value";
+
+ db.checkpointReadLock();
+
+ try {
+ db.metaStorage().write(name, val);
+ } finally {
+ db.checkpointReadUnlock();
+ }
+
+ MetastorageView testKey = F.find(metaStoreView, null,
+ (IgnitePredicate<? super MetastorageView>)view -> name.equals(view.name()) && val.equals(view.value()));
+
+ assertNotNull(testKey);
+ }
+ }
+
+ /** */
+ @Test
+ public void testDistributedMetastorage() throws Exception {
+ cleanPersistenceDir();
+
+ try (IgniteEx ignite = startGrid(getConfiguration().setDataStorageConfiguration(
+ new DataStorageConfiguration().setDefaultDataRegionConfiguration(
+ new DataRegionConfiguration().setPersistenceEnabled(true)
+ )))) {
+ ignite.cluster().state(ClusterState.ACTIVE);
+
+ DistributedMetaStorage dms = ignite.context().distributedMetastorage();
+
+ SystemView<MetastorageView> metaStoreView = ignite.context().systemView().view(DISTRIBUTED_METASTORE_VIEW);
+
+ assertNotNull(metaStoreView);
+
+ String name = "test-distributed-key";
+ String val = "test-distributed-value";
+
+ dms.write(name, val);
+
+ MetastorageView testKey = F.find(metaStoreView, null,
+ (IgnitePredicate<? super MetastorageView>)view -> name.equals(view.name()) && val.equals(view.value()));
+
+ assertNotNull(testKey);
+ }
+ }
+
/** Test node filter. */
public static class TestNodeFilter implements IgnitePredicate<ClusterNode> {
/** {@inheritDoc} */
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 6104e6b..9f29a7c 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
@@ -66,6 +66,8 @@ import org.apache.ignite.internal.metric.SystemViewSelfTest.TestTransformer;
import org.apache.ignite.internal.processors.affinity.AffinityTopologyVersion;
import org.apache.ignite.internal.processors.cache.distributed.dht.topology.GridDhtPartitionState;
import org.apache.ignite.internal.processors.cache.persistence.GridCacheDatabaseSharedManager;
+import org.apache.ignite.internal.processors.cache.persistence.IgniteCacheDatabaseSharedManager;
+import org.apache.ignite.internal.processors.metastorage.DistributedMetaStorage;
import org.apache.ignite.internal.processors.service.DummyService;
import org.apache.ignite.internal.util.StripedExecutor;
import org.apache.ignite.internal.util.typedef.F;
@@ -73,6 +75,7 @@ import org.apache.ignite.lang.IgniteBiTuple;
import org.apache.ignite.lang.IgnitePredicate;
import org.apache.ignite.services.ServiceConfiguration;
import org.apache.ignite.spi.metric.sql.SqlViewMetricExporterSpi;
+import org.apache.ignite.spi.systemview.view.MetastorageView;
import org.apache.ignite.spi.systemview.view.SqlSchemaView;
import org.apache.ignite.spi.systemview.view.SystemView;
import org.apache.ignite.testframework.GridTestUtils;
@@ -85,6 +88,8 @@ import static org.apache.ignite.internal.metric.SystemViewSelfTest.TEST_TRANSFOR
import static org.apache.ignite.internal.processors.cache.GridCacheUtils.cacheGroupId;
import static org.apache.ignite.internal.processors.cache.GridCacheUtils.cacheId;
import static org.apache.ignite.internal.processors.cache.index.AbstractSchemaSelfTest.queryProcessor;
+import static org.apache.ignite.internal.processors.cache.persistence.GridCacheDatabaseSharedManager.METASTORE_VIEW;
+import static org.apache.ignite.internal.processors.metastorage.persistence.DistributedMetaStorageImpl.DISTRIBUTED_METASTORE_VIEW;
import static org.apache.ignite.internal.processors.query.QueryUtils.DFLT_SCHEMA;
import static org.apache.ignite.internal.processors.query.QueryUtils.SCHEMA_SYS;
import static org.apache.ignite.internal.processors.query.h2.SchemaManager.SQL_SCHEMA_VIEW;
@@ -456,7 +461,9 @@ public class SqlViewExporterSpiTest extends AbstractExporterSpiTest {
"DATA_REGION_PAGE_LISTS",
"CACHE_GROUP_PAGE_LISTS",
"PARTITION_STATES",
- "BINARY_METADATA"
+ "BINARY_METADATA",
+ "METASTORAGE",
+ "DISTRIBUTED_METASTORAGE"
));
Set<String> actViews = new HashSet<>();
@@ -1121,6 +1128,52 @@ public class SqlViewExporterSpiTest extends AbstractExporterSpiTest {
}
}
+ /** */
+ @Test
+ public void testMetastorage() throws Exception {
+ IgniteCacheDatabaseSharedManager db = ignite0.context().cache().context().database();
+
+ SystemView<MetastorageView> metaStoreView = ignite0.context().systemView().view(METASTORE_VIEW);
+
+ assertNotNull(metaStoreView);
+
+ String name = "test-key";
+ String val = "test-value";
+
+ db.checkpointReadLock();
+
+ try {
+ db.metaStorage().write(name, val);
+ } finally {
+ db.checkpointReadUnlock();
+ }
+
+ assertEquals(1, execute(ignite0, "SELECT * FROM SYS.METASTORAGE WHERE name = ? AND value = ?",
+ name, val).size());
+ }
+
+ /** */
+ @Test
+ public void testDistributedMetastorage() throws Exception {
+ DistributedMetaStorage dms = ignite0.context().distributedMetastorage();
+
+ SystemView<MetastorageView> distributedMetaStoreView = ignite0.context().systemView().view(DISTRIBUTED_METASTORE_VIEW);
+
+ assertNotNull(distributedMetaStoreView);
+
+ String name = "test-distributed-key";
+ String val = "test-distributed-value";
+
+ dms.write(name, val);
+
+ assertEquals(1, execute(ignite0, "SELECT * FROM SYS.DISTRIBUTED_METASTORAGE WHERE name = ? AND value = ?",
+ name, val).size());
+
+ assertTrue(waitForCondition(() -> execute(ignite1,
+ "SELECT * FROM SYS.DISTRIBUTED_METASTORAGE WHERE name = ? AND value = ?", name, val).size() == 1,
+ getTestTimeout()));
+ }
+
/**
* Execute query on given node.
*