This is an automated email from the ASF dual-hosted git repository.
rpuch pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/ignite-3.git
The following commit(s) were added to refs/heads/main by this push:
new a338a2ec31 IGNITE-22188 Add metrics for debugging ItSqlLogicTest
(#3720)
a338a2ec31 is described below
commit a338a2ec3196bbec6f67568502a7fd64db223a81
Author: Roman Puchkovskiy <[email protected]>
AuthorDate: Tue May 14 22:51:08 2024 +0400
IGNITE-22188 Add metrics for debugging ItSqlLogicTest (#3720)
---
modules/metastorage/build.gradle | 3 +
.../impl/ItIdempotentCommandCacheTest.java | 1 +
.../impl/ItMetaStorageManagerImplTest.java | 4 +-
.../ItMetaStorageMultipleNodesAbstractTest.java | 1 +
.../metastorage/impl/ItMetaStorageWatchTest.java | 1 +
.../metastorage/impl/MetaStorageManagerImpl.java | 18 ++++-
.../metrics/MetaStorageMetricSource.java | 77 ++++++++++++++++++
.../metastorage/metrics/MetaStorageMetrics.java | 29 +++++++
.../metastorage/server/time/ClusterTimeImpl.java | 8 +-
.../MetaStorageDeployWatchesCorrectnessTest.java | 2 +
.../impl/MetaStorageManagerRecoveryTest.java | 2 +
.../impl/StandaloneMetaStorageManager.java | 2 +
.../metrics/exporters/ItOsMetricSourceTest.java | 73 +++++++++++++++++
.../internal/metrics/sources/JvmMetricSource.java | 32 +++++++-
.../internal/metrics/sources/OsMetricSource.java | 92 ++++++++++++++++++++++
.../metrics/sources/JvmMetricSourceTest.java | 70 +++++++++++++++-
.../metrics/sources/OsMetricSourceTest.java | 79 +++++++++++++++++++
.../MultiActorPlacementDriverTest.java | 1 +
.../PlacementDriverManagerTest.java | 1 +
.../ItDistributedConfigurationPropertiesTest.java | 1 +
.../ItDistributedConfigurationStorageTest.java | 1 +
.../runner/app/ItIgniteNodeRestartTest.java | 5 +-
.../org/apache/ignite/internal/app/IgniteImpl.java | 5 +-
.../internal/sql/sqllogic/ItSqlLogicTest.java | 12 ++-
.../rebalance/ItRebalanceDistributedTest.java | 6 +-
25 files changed, 513 insertions(+), 13 deletions(-)
diff --git a/modules/metastorage/build.gradle b/modules/metastorage/build.gradle
index 6f3408384c..c6900a8721 100644
--- a/modules/metastorage/build.gradle
+++ b/modules/metastorage/build.gradle
@@ -34,6 +34,7 @@ dependencies {
implementation project(':ignite-core')
implementation project(':ignite-rocksdb-common')
implementation project(':ignite-failure-handler')
+ implementation project(':ignite-metrics')
implementation libs.jetbrains.annotations
implementation libs.fastutil.core
@@ -44,6 +45,7 @@ dependencies {
testImplementation testFixtures(project(':ignite-configuration'))
testImplementation testFixtures(project(':ignite-replicator'))
testImplementation testFixtures(project(':ignite-failure-handler'))
+ testImplementation testFixtures(project(':ignite-metrics'))
testImplementation libs.mockito.junit
testImplementation libs.hamcrest.core
@@ -78,6 +80,7 @@ dependencies {
testFixturesImplementation project(':ignite-failure-handler')
testFixturesImplementation testFixtures(project(':ignite-core'))
testFixturesImplementation testFixtures(project(':ignite-failure-handler'))
+ testFixturesImplementation testFixtures(project(':ignite-metrics'))
testFixturesImplementation libs.jetbrains.annotations
testFixturesImplementation libs.mockito.core
}
diff --git
a/modules/metastorage/src/integrationTest/java/org/apache/ignite/internal/metastorage/impl/ItIdempotentCommandCacheTest.java
b/modules/metastorage/src/integrationTest/java/org/apache/ignite/internal/metastorage/impl/ItIdempotentCommandCacheTest.java
index 9233dface9..ce87c643dc 100644
---
a/modules/metastorage/src/integrationTest/java/org/apache/ignite/internal/metastorage/impl/ItIdempotentCommandCacheTest.java
+++
b/modules/metastorage/src/integrationTest/java/org/apache/ignite/internal/metastorage/impl/ItIdempotentCommandCacheTest.java
@@ -158,6 +158,7 @@ public class ItIdempotentCommandCacheTest extends
IgniteAbstractTest {
storage,
clock,
topologyAwareRaftGroupServiceFactory,
+ new NoOpMetricManager(),
metaStorageConfiguration
);
}
diff --git
a/modules/metastorage/src/integrationTest/java/org/apache/ignite/internal/metastorage/impl/ItMetaStorageManagerImplTest.java
b/modules/metastorage/src/integrationTest/java/org/apache/ignite/internal/metastorage/impl/ItMetaStorageManagerImplTest.java
index 80838e5942..124ffacf79 100644
---
a/modules/metastorage/src/integrationTest/java/org/apache/ignite/internal/metastorage/impl/ItMetaStorageManagerImplTest.java
+++
b/modules/metastorage/src/integrationTest/java/org/apache/ignite/internal/metastorage/impl/ItMetaStorageManagerImplTest.java
@@ -140,6 +140,7 @@ public class ItMetaStorageManagerImplTest extends
IgniteAbstractTest {
storage,
clock,
topologyAwareRaftGroupServiceFactory,
+ new NoOpMetricManager(),
metaStorageConfiguration
);
@@ -225,7 +226,8 @@ public class ItMetaStorageManagerImplTest extends
IgniteAbstractTest {
raftManager,
storage,
new HybridClockImpl(),
- mock(TopologyAwareRaftGroupServiceFactory.class)
+ mock(TopologyAwareRaftGroupServiceFactory.class),
+ new NoOpMetricManager()
);
assertThat(metaStorageManager.stopAsync(), willCompleteSuccessfully());
diff --git
a/modules/metastorage/src/integrationTest/java/org/apache/ignite/internal/metastorage/impl/ItMetaStorageMultipleNodesAbstractTest.java
b/modules/metastorage/src/integrationTest/java/org/apache/ignite/internal/metastorage/impl/ItMetaStorageMultipleNodesAbstractTest.java
index cf84819fe8..8d7fa1b987 100644
---
a/modules/metastorage/src/integrationTest/java/org/apache/ignite/internal/metastorage/impl/ItMetaStorageMultipleNodesAbstractTest.java
+++
b/modules/metastorage/src/integrationTest/java/org/apache/ignite/internal/metastorage/impl/ItMetaStorageMultipleNodesAbstractTest.java
@@ -194,6 +194,7 @@ public abstract class
ItMetaStorageMultipleNodesAbstractTest extends IgniteAbstr
createStorage(name(), basePath),
clock,
topologyAwareRaftGroupServiceFactory,
+ new NoOpMetricManager(),
metaStorageConfiguration
);
diff --git
a/modules/metastorage/src/integrationTest/java/org/apache/ignite/internal/metastorage/impl/ItMetaStorageWatchTest.java
b/modules/metastorage/src/integrationTest/java/org/apache/ignite/internal/metastorage/impl/ItMetaStorageWatchTest.java
index dca14a1fd7..a87ebe6e13 100644
---
a/modules/metastorage/src/integrationTest/java/org/apache/ignite/internal/metastorage/impl/ItMetaStorageWatchTest.java
+++
b/modules/metastorage/src/integrationTest/java/org/apache/ignite/internal/metastorage/impl/ItMetaStorageWatchTest.java
@@ -186,6 +186,7 @@ public class ItMetaStorageWatchTest extends
IgniteAbstractTest {
new RocksDbKeyValueStorage(name(),
basePath.resolve("storage"), new NoOpFailureProcessor(name())),
clock,
topologyAwareRaftGroupServiceFactory,
+ new NoOpMetricManager(),
metaStorageConfiguration
);
diff --git
a/modules/metastorage/src/main/java/org/apache/ignite/internal/metastorage/impl/MetaStorageManagerImpl.java
b/modules/metastorage/src/main/java/org/apache/ignite/internal/metastorage/impl/MetaStorageManagerImpl.java
index a60f692e12..547be10afe 100644
---
a/modules/metastorage/src/main/java/org/apache/ignite/internal/metastorage/impl/MetaStorageManagerImpl.java
+++
b/modules/metastorage/src/main/java/org/apache/ignite/internal/metastorage/impl/MetaStorageManagerImpl.java
@@ -47,12 +47,14 @@ import org.apache.ignite.internal.metastorage.dsl.Condition;
import org.apache.ignite.internal.metastorage.dsl.Iif;
import org.apache.ignite.internal.metastorage.dsl.Operation;
import org.apache.ignite.internal.metastorage.dsl.StatementResult;
+import org.apache.ignite.internal.metastorage.metrics.MetaStorageMetricSource;
import org.apache.ignite.internal.metastorage.server.KeyValueStorage;
import org.apache.ignite.internal.metastorage.server.OnRevisionAppliedCallback;
import org.apache.ignite.internal.metastorage.server.raft.MetaStorageListener;
import org.apache.ignite.internal.metastorage.server.raft.MetastorageGroupId;
import org.apache.ignite.internal.metastorage.server.time.ClusterTime;
import org.apache.ignite.internal.metastorage.server.time.ClusterTimeImpl;
+import org.apache.ignite.internal.metrics.MetricManager;
import org.apache.ignite.internal.network.ClusterService;
import org.apache.ignite.internal.raft.Peer;
import org.apache.ignite.internal.raft.PeersAndLearners;
@@ -119,6 +121,10 @@ public class MetaStorageManagerImpl implements
MetaStorageManager {
private final TopologyAwareRaftGroupServiceFactory
topologyAwareRaftGroupServiceFactory;
+ private final MetricManager metricManager;
+
+ private final MetaStorageMetricSource metaStorageMetricSource;
+
private volatile long appliedRevision = 0;
private volatile MetaStorageConfiguration metaStorageConfiguration;
@@ -132,6 +138,7 @@ public class MetaStorageManagerImpl implements
MetaStorageManager {
* @param raftMgr Raft manager.
* @param storage Storage. This component owns this resource and will
manage its lifecycle.
* @param clock A hybrid logical clock.
+ * @param metricManager Metric manager.
*/
public MetaStorageManagerImpl(
ClusterService clusterService,
@@ -140,7 +147,8 @@ public class MetaStorageManagerImpl implements
MetaStorageManager {
RaftManager raftMgr,
KeyValueStorage storage,
HybridClock clock,
- TopologyAwareRaftGroupServiceFactory
topologyAwareRaftGroupServiceFactory
+ TopologyAwareRaftGroupServiceFactory
topologyAwareRaftGroupServiceFactory,
+ MetricManager metricManager
) {
this.clusterService = clusterService;
this.raftMgr = raftMgr;
@@ -148,7 +156,9 @@ public class MetaStorageManagerImpl implements
MetaStorageManager {
this.logicalTopologyService = logicalTopologyService;
this.storage = storage;
this.clusterTime = new ClusterTimeImpl(clusterService.nodeName(),
busyLock, clock);
+ metaStorageMetricSource = new MetaStorageMetricSource(clusterTime);
this.topologyAwareRaftGroupServiceFactory =
topologyAwareRaftGroupServiceFactory;
+ this.metricManager = metricManager;
}
/**
@@ -163,9 +173,10 @@ public class MetaStorageManagerImpl implements
MetaStorageManager {
KeyValueStorage storage,
HybridClock clock,
TopologyAwareRaftGroupServiceFactory
topologyAwareRaftGroupServiceFactory,
+ MetricManager metricManager,
MetaStorageConfiguration configuration
) {
- this(clusterService, cmgMgr, logicalTopologyService, raftMgr, storage,
clock, topologyAwareRaftGroupServiceFactory);
+ this(clusterService, cmgMgr, logicalTopologyService, raftMgr, storage,
clock, topologyAwareRaftGroupServiceFactory, metricManager);
configure(configuration);
}
@@ -371,6 +382,8 @@ public class MetaStorageManagerImpl implements
MetaStorageManager {
}
});
+ metricManager.registerSource(metaStorageMetricSource);
+
return nullCompletedFuture();
}
@@ -388,6 +401,7 @@ public class MetaStorageManagerImpl implements
MetaStorageManager {
try {
IgniteUtils.closeAllManually(
+ () ->
metricManager.unregisterSource(metaStorageMetricSource),
clusterTime,
() -> cancelOrConsume(metaStorageSvcFut,
MetaStorageServiceImpl::close),
() -> raftMgr.stopRaftNodes(MetastorageGroupId.INSTANCE),
diff --git
a/modules/metastorage/src/main/java/org/apache/ignite/internal/metastorage/metrics/MetaStorageMetricSource.java
b/modules/metastorage/src/main/java/org/apache/ignite/internal/metastorage/metrics/MetaStorageMetricSource.java
new file mode 100644
index 0000000000..bc12ba3eb2
--- /dev/null
+++
b/modules/metastorage/src/main/java/org/apache/ignite/internal/metastorage/metrics/MetaStorageMetricSource.java
@@ -0,0 +1,77 @@
+/*
+ * 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.metastorage.metrics;
+
+import java.util.HashMap;
+import org.apache.ignite.internal.metrics.LongGauge;
+import org.apache.ignite.internal.metrics.Metric;
+import org.apache.ignite.internal.metrics.MetricSet;
+import org.apache.ignite.internal.metrics.MetricSource;
+import org.jetbrains.annotations.Nullable;
+
+/**
+ * Metric source which provides MetaStorage-related metrics.
+ */
+public class MetaStorageMetricSource implements MetricSource {
+ private static final String SOURCE_NAME = "metastorage";
+
+ private final MetaStorageMetrics metaStorageMetrics;
+
+ /** Enablement status. Accessed from different threads under
synchronization on this object. */
+ private boolean enabled;
+
+ /**
+ * Constructor.
+ */
+ public MetaStorageMetricSource(MetaStorageMetrics metaStorageMetrics) {
+ this.metaStorageMetrics = metaStorageMetrics;
+ }
+
+ @Override
+ public String name() {
+ return SOURCE_NAME;
+ }
+
+ @Override
+ public synchronized @Nullable MetricSet enable() {
+ var metrics = new HashMap<String, Metric>();
+
+ metrics.put(
+ "SafeTimeLag",
+ new LongGauge(
+ "SafeTimeLag",
+ "Number of milliseconds the local MetaStorage SafeTime
lags behind the local logical clock.",
+ metaStorageMetrics::safeTimeLag
+ )
+ );
+
+ enabled = true;
+
+ return new MetricSet(SOURCE_NAME, metrics);
+ }
+
+ @Override
+ public synchronized void disable() {
+ enabled = false;
+ }
+
+ @Override
+ public synchronized boolean enabled() {
+ return enabled;
+ }
+}
diff --git
a/modules/metastorage/src/main/java/org/apache/ignite/internal/metastorage/metrics/MetaStorageMetrics.java
b/modules/metastorage/src/main/java/org/apache/ignite/internal/metastorage/metrics/MetaStorageMetrics.java
new file mode 100644
index 0000000000..ec7dc420c6
--- /dev/null
+++
b/modules/metastorage/src/main/java/org/apache/ignite/internal/metastorage/metrics/MetaStorageMetrics.java
@@ -0,0 +1,29 @@
+/*
+ * 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.metastorage.metrics;
+
+/**
+ * Metrics related to the MetaStorage.
+ */
+@SuppressWarnings("InterfaceMayBeAnnotatedFunctional")
+public interface MetaStorageMetrics {
+ /**
+ * Returns number of milliseconds between the current time on the local
logical clock and the local view of the MetaStorage SafeTime.
+ */
+ long safeTimeLag();
+}
diff --git
a/modules/metastorage/src/main/java/org/apache/ignite/internal/metastorage/server/time/ClusterTimeImpl.java
b/modules/metastorage/src/main/java/org/apache/ignite/internal/metastorage/server/time/ClusterTimeImpl.java
index 0ce542a2a0..af74dcde63 100644
---
a/modules/metastorage/src/main/java/org/apache/ignite/internal/metastorage/server/time/ClusterTimeImpl.java
+++
b/modules/metastorage/src/main/java/org/apache/ignite/internal/metastorage/server/time/ClusterTimeImpl.java
@@ -32,6 +32,7 @@ import org.apache.ignite.internal.lang.NodeStoppingException;
import org.apache.ignite.internal.logger.IgniteLogger;
import org.apache.ignite.internal.logger.Loggers;
import
org.apache.ignite.internal.metastorage.configuration.MetaStorageConfiguration;
+import org.apache.ignite.internal.metastorage.metrics.MetaStorageMetrics;
import org.apache.ignite.internal.thread.NamedThreadFactory;
import org.apache.ignite.internal.util.IgniteSpinBusyLock;
import org.apache.ignite.internal.util.IgniteUtils;
@@ -42,7 +43,7 @@ import org.jetbrains.annotations.TestOnly;
/**
* Cluster time implementation with additional methods to adjust time and
update safe time.
*/
-public class ClusterTimeImpl implements ClusterTime, ManuallyCloseable {
+public class ClusterTimeImpl implements ClusterTime, MetaStorageMetrics,
ManuallyCloseable {
private static final IgniteLogger LOG =
Loggers.forClass(ClusterTimeImpl.class);
private final String nodeName;
@@ -63,6 +64,11 @@ public class ClusterTimeImpl implements ClusterTime,
ManuallyCloseable {
*/
private @Nullable SafeTimeScheduler safeTimeScheduler;
+ @Override
+ public long safeTimeLag() {
+ return clock.now().getPhysical() - safeTime.current().getPhysical();
+ }
+
/** Action that issues a time sync command. */
@FunctionalInterface
public interface SyncTimeAction {
diff --git
a/modules/metastorage/src/test/java/org/apache/ignite/internal/metastorage/impl/MetaStorageDeployWatchesCorrectnessTest.java
b/modules/metastorage/src/test/java/org/apache/ignite/internal/metastorage/impl/MetaStorageDeployWatchesCorrectnessTest.java
index 2d18f0c816..31881ffa06 100644
---
a/modules/metastorage/src/test/java/org/apache/ignite/internal/metastorage/impl/MetaStorageDeployWatchesCorrectnessTest.java
+++
b/modules/metastorage/src/test/java/org/apache/ignite/internal/metastorage/impl/MetaStorageDeployWatchesCorrectnessTest.java
@@ -37,6 +37,7 @@ import
org.apache.ignite.internal.metastorage.MetaStorageManager;
import
org.apache.ignite.internal.metastorage.command.GetCurrentRevisionCommand;
import
org.apache.ignite.internal.metastorage.configuration.MetaStorageConfiguration;
import
org.apache.ignite.internal.metastorage.server.SimpleInMemoryKeyValueStorage;
+import org.apache.ignite.internal.metrics.NoOpMetricManager;
import org.apache.ignite.internal.network.ClusterService;
import org.apache.ignite.internal.raft.RaftManager;
import org.apache.ignite.internal.raft.client.TopologyAwareRaftGroupService;
@@ -84,6 +85,7 @@ public class MetaStorageDeployWatchesCorrectnessTest extends
IgniteAbstractTest
new SimpleInMemoryKeyValueStorage(mcNodeName),
clock,
mock(TopologyAwareRaftGroupServiceFactory.class),
+ new NoOpMetricManager(),
metaStorageConfiguration
),
StandaloneMetaStorageManager.create()
diff --git
a/modules/metastorage/src/test/java/org/apache/ignite/internal/metastorage/impl/MetaStorageManagerRecoveryTest.java
b/modules/metastorage/src/test/java/org/apache/ignite/internal/metastorage/impl/MetaStorageManagerRecoveryTest.java
index 3e71355315..f4b7c0c19a 100644
---
a/modules/metastorage/src/test/java/org/apache/ignite/internal/metastorage/impl/MetaStorageManagerRecoveryTest.java
+++
b/modules/metastorage/src/test/java/org/apache/ignite/internal/metastorage/impl/MetaStorageManagerRecoveryTest.java
@@ -41,6 +41,7 @@ import
org.apache.ignite.internal.metastorage.command.GetCurrentRevisionCommand;
import
org.apache.ignite.internal.metastorage.configuration.MetaStorageConfiguration;
import org.apache.ignite.internal.metastorage.server.KeyValueStorage;
import
org.apache.ignite.internal.metastorage.server.SimpleInMemoryKeyValueStorage;
+import org.apache.ignite.internal.metrics.NoOpMetricManager;
import org.apache.ignite.internal.network.ClusterService;
import org.apache.ignite.internal.network.MessagingService;
import
org.apache.ignite.internal.network.serialization.MessageSerializationRegistry;
@@ -86,6 +87,7 @@ public class MetaStorageManagerRecoveryTest extends
BaseIgniteAbstractTest {
kvs,
clock,
mock(TopologyAwareRaftGroupServiceFactory.class),
+ new NoOpMetricManager(),
metaStorageConfiguration
);
}
diff --git
a/modules/metastorage/src/testFixtures/java/org/apache/ignite/internal/metastorage/impl/StandaloneMetaStorageManager.java
b/modules/metastorage/src/testFixtures/java/org/apache/ignite/internal/metastorage/impl/StandaloneMetaStorageManager.java
index aaa3cf7099..c9b02c071a 100644
---
a/modules/metastorage/src/testFixtures/java/org/apache/ignite/internal/metastorage/impl/StandaloneMetaStorageManager.java
+++
b/modules/metastorage/src/testFixtures/java/org/apache/ignite/internal/metastorage/impl/StandaloneMetaStorageManager.java
@@ -37,6 +37,7 @@ import org.apache.ignite.internal.lang.NodeStoppingException;
import
org.apache.ignite.internal.metastorage.configuration.MetaStorageConfiguration;
import org.apache.ignite.internal.metastorage.server.KeyValueStorage;
import
org.apache.ignite.internal.metastorage.server.SimpleInMemoryKeyValueStorage;
+import org.apache.ignite.internal.metrics.NoOpMetricManager;
import org.apache.ignite.internal.network.ClusterNodeImpl;
import org.apache.ignite.internal.network.ClusterService;
import org.apache.ignite.internal.raft.Command;
@@ -135,6 +136,7 @@ public class StandaloneMetaStorageManager extends
MetaStorageManagerImpl {
storage,
clock,
raftServiceFactory,
+ new NoOpMetricManager(),
configuration
);
}
diff --git
a/modules/metrics/src/integrationTest/java/org/apache/ignite/internal/metrics/exporters/ItOsMetricSourceTest.java
b/modules/metrics/src/integrationTest/java/org/apache/ignite/internal/metrics/exporters/ItOsMetricSourceTest.java
new file mode 100644
index 0000000000..c3627cd94d
--- /dev/null
+++
b/modules/metrics/src/integrationTest/java/org/apache/ignite/internal/metrics/exporters/ItOsMetricSourceTest.java
@@ -0,0 +1,73 @@
+/*
+ * 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.metrics.exporters;
+
+import static
org.apache.ignite.internal.testframework.matchers.CompletableFutureMatcher.willCompleteSuccessfully;
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.Matchers.greaterThan;
+
+import java.util.HashMap;
+import java.util.Map;
+import
org.apache.ignite.internal.configuration.testframework.ConfigurationExtension;
+import
org.apache.ignite.internal.configuration.testframework.InjectConfiguration;
+import org.apache.ignite.internal.metrics.MetricManager;
+import org.apache.ignite.internal.metrics.MetricManagerImpl;
+import org.apache.ignite.internal.metrics.configuration.MetricConfiguration;
+import org.apache.ignite.internal.metrics.sources.OsMetricSource;
+import org.apache.ignite.internal.testframework.BaseIgniteAbstractTest;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.ExtendWith;
+
+@ExtendWith(ConfigurationExtension.class)
+class ItOsMetricSourceTest extends BaseIgniteAbstractTest {
+ @InjectConfiguration(
+ value = "mock.exporters = {"
+ + "simple = {exporterName = simple}"
+ + "}",
+ polymorphicExtensions = {
+ TestSimpleExporterConfigurationSchema.class
+ }
+ )
+ private MetricConfiguration simpleConfiguration;
+
+ @Test
+ void testOsMetrics() {
+ MetricManager metricManager = new MetricManagerImpl();
+ metricManager.configure(simpleConfiguration);
+
+ Map<String, MetricExporter> exporters = new HashMap<>();
+ TestSimpleExporter simpleExporter = new TestSimpleExporter();
+ exporters.put(simpleExporter.name(), simpleExporter);
+
+ metricManager.registerSource(new OsMetricSource());
+
+ metricManager.start(exporters);
+
+ metricManager.enable("os");
+
+ Map<String, String> osMetrics = simpleExporter.pull().get("os");
+
+ assertPositiveDoubleValue(osMetrics.get("LoadAverage"));
+
+ assertThat(metricManager.stopAsync(), willCompleteSuccessfully());
+ }
+
+ private static void assertPositiveDoubleValue(String metric) {
+ assertThat(Double.parseDouble(metric), greaterThan(0.0));
+ }
+}
diff --git
a/modules/metrics/src/main/java/org/apache/ignite/internal/metrics/sources/JvmMetricSource.java
b/modules/metrics/src/main/java/org/apache/ignite/internal/metrics/sources/JvmMetricSource.java
index 0ffb02aa47..01e7abf8b9 100644
---
a/modules/metrics/src/main/java/org/apache/ignite/internal/metrics/sources/JvmMetricSource.java
+++
b/modules/metrics/src/main/java/org/apache/ignite/internal/metrics/sources/JvmMetricSource.java
@@ -17,10 +17,12 @@
package org.apache.ignite.internal.metrics.sources;
+import java.lang.management.GarbageCollectorMXBean;
import java.lang.management.ManagementFactory;
import java.lang.management.MemoryMXBean;
import java.lang.management.MemoryUsage;
import java.util.HashMap;
+import java.util.List;
import java.util.function.Supplier;
import org.apache.ignite.internal.metrics.LongGauge;
import org.apache.ignite.internal.metrics.Metric;
@@ -42,6 +44,8 @@ public class JvmMetricSource implements MetricSource {
/** JVM standard MXBean to provide information about memory usage. */
private final MemoryMXBean memoryMxBean;
+ private final List<GarbageCollectorMXBean> gcMxBeans;
+
/** True, if source is enabled, false otherwise. */
private boolean enabled;
@@ -49,9 +53,11 @@ public class JvmMetricSource implements MetricSource {
* Constructor.
*
* @param memoryMxBean MXBean implementation to receive memory info.
+ * @param gcMxBeans MXBean implementation to receive GC info.
*/
- JvmMetricSource(MemoryMXBean memoryMxBean) {
+ JvmMetricSource(MemoryMXBean memoryMxBean, List<GarbageCollectorMXBean>
gcMxBeans) {
this.memoryMxBean = memoryMxBean;
+ this.gcMxBeans = List.copyOf(gcMxBeans);
}
/**
@@ -59,6 +65,7 @@ public class JvmMetricSource implements MetricSource {
*/
public JvmMetricSource() {
memoryMxBean = ManagementFactory.getMemoryMXBean();
+ gcMxBeans = ManagementFactory.getGarbageCollectorMXBeans();
}
/** {@inheritDoc} */
@@ -117,11 +124,34 @@ public class JvmMetricSource implements MetricSource {
() -> nonHeapMemoryUsage.get().getMax()
));
+ metrics.put(
+ "gc.CollectionTime",
+ new LongGauge(
+ "gc.CollectionTime",
+ "Approximate total time spent on garbage collection in
milliseconds, summed across all collectors.",
+ () -> totalCollectionTime()
+ )
+ );
+
enabled = true;
return new MetricSet(SOURCE_NAME, metrics);
}
+ private long totalCollectionTime() {
+ long total = 0;
+
+ for (GarbageCollectorMXBean gcMxBean : gcMxBeans) {
+ long time = gcMxBean.getCollectionTime();
+
+ if (time > 0) {
+ total += time;
+ }
+ }
+
+ return total;
+ }
+
/** {@inheritDoc} */
@Override
public synchronized void disable() {
diff --git
a/modules/metrics/src/main/java/org/apache/ignite/internal/metrics/sources/OsMetricSource.java
b/modules/metrics/src/main/java/org/apache/ignite/internal/metrics/sources/OsMetricSource.java
new file mode 100644
index 0000000000..d8cd252141
--- /dev/null
+++
b/modules/metrics/src/main/java/org/apache/ignite/internal/metrics/sources/OsMetricSource.java
@@ -0,0 +1,92 @@
+/*
+ * 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.metrics.sources;
+
+import java.lang.management.ManagementFactory;
+import java.lang.management.OperatingSystemMXBean;
+import java.util.HashMap;
+import org.apache.ignite.internal.metrics.DoubleGauge;
+import org.apache.ignite.internal.metrics.Metric;
+import org.apache.ignite.internal.metrics.MetricSet;
+import org.apache.ignite.internal.metrics.MetricSource;
+import org.jetbrains.annotations.Nullable;
+
+/**
+ * Metric source which provides OS metrics like Load Average.
+ */
+public class OsMetricSource implements MetricSource {
+ private static final String SOURCE_NAME = "os";
+
+ private final OperatingSystemMXBean operatingSystemMxBean;
+
+ /** Enablement status. Accessed from different threads under
synchronization on this object. */
+ private boolean enabled;
+
+ /**
+ * Constructor.
+ *
+ * @param operatingSystemMxBean MXBean implementation to receive OS info.
+ */
+ OsMetricSource(OperatingSystemMXBean operatingSystemMxBean) {
+ this.operatingSystemMxBean = operatingSystemMxBean;
+ }
+
+ /**
+ * Constructs new metric source with standard MemoryMXBean as metric
provider.
+ */
+ public OsMetricSource() {
+ operatingSystemMxBean = ManagementFactory.getOperatingSystemMXBean();
+ }
+
+ @Override
+ public String name() {
+ return SOURCE_NAME;
+ }
+
+ @Override
+ public synchronized @Nullable MetricSet enable() {
+ var metrics = new HashMap<String, Metric>();
+
+ metrics.put(
+ "LoadAverage",
+ new DoubleGauge(
+ "LoadAverage",
+ "System load average for the last minute. System load
average is the sum of the number of runnable entities "
+ + "queued to the available processors and the
number of runnable entities running on the available "
+ + "processors averaged over a period of time.
The way in which the load average is calculated depends on "
+ + "the operating system. "
+ + "If the load average is not available, a
negative value is returned.",
+ operatingSystemMxBean::getSystemLoadAverage
+ )
+ );
+
+ enabled = true;
+
+ return new MetricSet(SOURCE_NAME, metrics);
+ }
+
+ @Override
+ public synchronized void disable() {
+ enabled = false;
+ }
+
+ @Override
+ public synchronized boolean enabled() {
+ return enabled;
+ }
+}
diff --git
a/modules/metrics/src/test/java/org/apache/ignite/internal/metrics/sources/JvmMetricSourceTest.java
b/modules/metrics/src/test/java/org/apache/ignite/internal/metrics/sources/JvmMetricSourceTest.java
index 814bcd3964..071c7fc703 100644
---
a/modules/metrics/src/test/java/org/apache/ignite/internal/metrics/sources/JvmMetricSourceTest.java
+++
b/modules/metrics/src/test/java/org/apache/ignite/internal/metrics/sources/JvmMetricSourceTest.java
@@ -21,8 +21,10 @@ import static java.util.concurrent.TimeUnit.SECONDS;
import static org.awaitility.Awaitility.await;
import static org.junit.jupiter.api.Assertions.assertEquals;
+import java.lang.management.GarbageCollectorMXBean;
import java.lang.management.MemoryMXBean;
import java.lang.management.MemoryUsage;
+import java.util.List;
import javax.management.ObjectName;
import org.apache.ignite.internal.metrics.LongMetric;
import org.junit.jupiter.api.Test;
@@ -30,10 +32,11 @@ import org.junit.jupiter.api.Test;
/** Tests for jvm system metrics. */
public class JvmMetricSourceTest {
@Test
- void testMemoryMetric() {
+ void testMemoryMetrics() {
var memoryBean = new MemoryBean(5, 15, 20, 90,
100, 115, 120, 200);
- var metricSource = new JvmMetricSource(memoryBean);
+ var gcBean = new GarbageCollectorBean(10, 100);
+ var metricSource = new JvmMetricSource(memoryBean, List.of(gcBean));
var metricSet = metricSource.enable();
@@ -72,6 +75,24 @@ public class JvmMetricSourceTest {
assertEquals(memoryBean.nonHeapMax,
metricSet.<LongMetric>get("memory.non-heap.Max").value());
}
+ @Test
+ void testGcMetrics() {
+ var memoryBean = new MemoryBean(5, 15, 20, 90,
+ 100, 115, 120, 200);
+ var gcBean1 = new GarbageCollectorBean(10, 100);
+ var gcBean2 = new GarbageCollectorBean(20, 200);
+ var metricSource = new JvmMetricSource(memoryBean, List.of(gcBean1,
gcBean2));
+
+ var metricSet = metricSource.enable();
+
+ assertEquals(300,
metricSet.<LongMetric>get("gc.CollectionTime").value());
+
+ gcBean1.changeCollectionMetrics(1, 10);
+ gcBean2.changeCollectionMetrics(1, 15);
+
+ assertEquals(325,
metricSet.<LongMetric>get("gc.CollectionTime").value());
+ }
+
/**
* Test implementation of {@link java.lang.management.MemoryMXBean},
* which open for mutations in scope of the current test.
@@ -136,4 +157,49 @@ public class JvmMetricSourceTest {
throw new UnsupportedOperationException("Not supported in test
implementation");
}
}
+
+ private static class GarbageCollectorBean implements
GarbageCollectorMXBean {
+ private long collectionCount;
+ private long collectionTime;
+
+ private GarbageCollectorBean(long collectionCount, long
collectionTime) {
+ this.collectionCount = collectionCount;
+ this.collectionTime = collectionTime;
+ }
+
+ @Override
+ public long getCollectionCount() {
+ return collectionCount;
+ }
+
+ @Override
+ public long getCollectionTime() {
+ return collectionTime;
+ }
+
+ @Override
+ public String getName() {
+ return "Fictional Collector";
+ }
+
+ @Override
+ public boolean isValid() {
+ return true;
+ }
+
+ @Override
+ public String[] getMemoryPoolNames() {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public ObjectName getObjectName() {
+ throw new UnsupportedOperationException();
+ }
+
+ private void changeCollectionMetrics(int countDelta, int timeDelta) {
+ collectionCount += countDelta;
+ collectionTime += timeDelta;
+ }
+ }
}
diff --git
a/modules/metrics/src/test/java/org/apache/ignite/internal/metrics/sources/OsMetricSourceTest.java
b/modules/metrics/src/test/java/org/apache/ignite/internal/metrics/sources/OsMetricSourceTest.java
new file mode 100644
index 0000000000..167812d1ff
--- /dev/null
+++
b/modules/metrics/src/test/java/org/apache/ignite/internal/metrics/sources/OsMetricSourceTest.java
@@ -0,0 +1,79 @@
+/*
+ * 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.metrics.sources;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+
+import java.lang.management.OperatingSystemMXBean;
+import javax.management.ObjectName;
+import org.apache.ignite.internal.metrics.DoubleMetric;
+import org.junit.jupiter.api.Test;
+
+class OsMetricSourceTest {
+ @Test
+ void testOsMetrics() {
+ var osBean = new OperatingSystemBean(1.23);
+ var metricSource = new OsMetricSource(osBean);
+
+ var metricSet = metricSource.enable();
+
+ assertEquals(1.23, metricSet.<DoubleMetric>get("LoadAverage").value());
+
+ osBean.loadAverage = 2.34;
+
+ assertEquals(2.34, metricSet.<DoubleMetric>get("LoadAverage").value());
+ }
+
+ private static class OperatingSystemBean implements OperatingSystemMXBean {
+ private double loadAverage;
+
+ private OperatingSystemBean(double loadAverage) {
+ this.loadAverage = loadAverage;
+ }
+
+ @Override
+ public String getName() {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public String getArch() {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public String getVersion() {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public int getAvailableProcessors() {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public double getSystemLoadAverage() {
+ return loadAverage;
+ }
+
+ @Override
+ public ObjectName getObjectName() {
+ throw new UnsupportedOperationException();
+ }
+ }
+}
diff --git
a/modules/placement-driver/src/integrationTest/java/org/apache/ignite/internal/placementdriver/MultiActorPlacementDriverTest.java
b/modules/placement-driver/src/integrationTest/java/org/apache/ignite/internal/placementdriver/MultiActorPlacementDriverTest.java
index fe784efb88..77a4e4b006 100644
---
a/modules/placement-driver/src/integrationTest/java/org/apache/ignite/internal/placementdriver/MultiActorPlacementDriverTest.java
+++
b/modules/placement-driver/src/integrationTest/java/org/apache/ignite/internal/placementdriver/MultiActorPlacementDriverTest.java
@@ -261,6 +261,7 @@ public class MultiActorPlacementDriverTest extends
BasePlacementDriverTest {
storage,
nodeClock,
topologyAwareRaftGroupServiceFactory,
+ new NoOpMetricManager(),
metaStorageConfiguration
);
diff --git
a/modules/placement-driver/src/integrationTest/java/org/apache/ignite/internal/placementdriver/PlacementDriverManagerTest.java
b/modules/placement-driver/src/integrationTest/java/org/apache/ignite/internal/placementdriver/PlacementDriverManagerTest.java
index 4171b9f9ac..f3b4b904a2 100644
---
a/modules/placement-driver/src/integrationTest/java/org/apache/ignite/internal/placementdriver/PlacementDriverManagerTest.java
+++
b/modules/placement-driver/src/integrationTest/java/org/apache/ignite/internal/placementdriver/PlacementDriverManagerTest.java
@@ -198,6 +198,7 @@ public class PlacementDriverManagerTest extends
BasePlacementDriverTest {
storage,
nodeClock,
topologyAwareRaftGroupServiceFactory,
+ new NoOpMetricManager(),
metaStorageConfiguration
);
diff --git
a/modules/runner/src/integrationTest/java/org/apache/ignite/internal/configuration/ItDistributedConfigurationPropertiesTest.java
b/modules/runner/src/integrationTest/java/org/apache/ignite/internal/configuration/ItDistributedConfigurationPropertiesTest.java
index a8c311b84e..4ef7ae492c 100644
---
a/modules/runner/src/integrationTest/java/org/apache/ignite/internal/configuration/ItDistributedConfigurationPropertiesTest.java
+++
b/modules/runner/src/integrationTest/java/org/apache/ignite/internal/configuration/ItDistributedConfigurationPropertiesTest.java
@@ -201,6 +201,7 @@ public class ItDistributedConfigurationPropertiesTest
extends BaseIgniteAbstract
new SimpleInMemoryKeyValueStorage(name()),
clock,
topologyAwareRaftGroupServiceFactory,
+ new NoOpMetricManager(),
metaStorageConfiguration
);
diff --git
a/modules/runner/src/integrationTest/java/org/apache/ignite/internal/configuration/storage/ItDistributedConfigurationStorageTest.java
b/modules/runner/src/integrationTest/java/org/apache/ignite/internal/configuration/storage/ItDistributedConfigurationStorageTest.java
index ce8d0f5dd8..17cf8b3f03 100644
---
a/modules/runner/src/integrationTest/java/org/apache/ignite/internal/configuration/storage/ItDistributedConfigurationStorageTest.java
+++
b/modules/runner/src/integrationTest/java/org/apache/ignite/internal/configuration/storage/ItDistributedConfigurationStorageTest.java
@@ -173,6 +173,7 @@ public class ItDistributedConfigurationStorageTest extends
BaseIgniteAbstractTes
new SimpleInMemoryKeyValueStorage(name()),
clock,
topologyAwareRaftGroupServiceFactory,
+ new NoOpMetricManager(),
metaStorageConfiguration
);
diff --git
a/modules/runner/src/integrationTest/java/org/apache/ignite/internal/runner/app/ItIgniteNodeRestartTest.java
b/modules/runner/src/integrationTest/java/org/apache/ignite/internal/runner/app/ItIgniteNodeRestartTest.java
index 0c0ead5bf1..27ee1b97d5 100644
---
a/modules/runner/src/integrationTest/java/org/apache/ignite/internal/runner/app/ItIgniteNodeRestartTest.java
+++
b/modules/runner/src/integrationTest/java/org/apache/ignite/internal/runner/app/ItIgniteNodeRestartTest.java
@@ -394,6 +394,8 @@ public class ItIgniteNodeRestartTest extends
BaseIgniteRestartTest {
var logicalTopologyService = new
LogicalTopologyServiceImpl(logicalTopology, cmgManager);
+ var metricManager = new MetricManagerImpl();
+
var topologyAwareRaftGroupServiceFactory = new
TopologyAwareRaftGroupServiceFactory(
clusterSvc,
logicalTopologyService,
@@ -413,6 +415,7 @@ public class ItIgniteNodeRestartTest extends
BaseIgniteRestartTest {
metaStorage,
hybridClock,
topologyAwareRaftGroupServiceFactory,
+ metricManager,
metaStorageConfiguration
) {
@Override
@@ -629,8 +632,6 @@ public class ItIgniteNodeRestartTest extends
BaseIgniteRestartTest {
lowWatermark
);
- var metricManager = new MetricManagerImpl();
-
SqlQueryProcessor qryEngine = new SqlQueryProcessor(
registry,
clusterSvc,
diff --git
a/modules/runner/src/main/java/org/apache/ignite/internal/app/IgniteImpl.java
b/modules/runner/src/main/java/org/apache/ignite/internal/app/IgniteImpl.java
index 76db87e606..ea4ecdea58 100644
---
a/modules/runner/src/main/java/org/apache/ignite/internal/app/IgniteImpl.java
+++
b/modules/runner/src/main/java/org/apache/ignite/internal/app/IgniteImpl.java
@@ -136,6 +136,7 @@ import org.apache.ignite.internal.metrics.MetricManager;
import org.apache.ignite.internal.metrics.MetricManagerImpl;
import org.apache.ignite.internal.metrics.configuration.MetricConfiguration;
import org.apache.ignite.internal.metrics.sources.JvmMetricSource;
+import org.apache.ignite.internal.metrics.sources.OsMetricSource;
import org.apache.ignite.internal.network.ChannelType;
import org.apache.ignite.internal.network.ClusterService;
import org.apache.ignite.internal.network.DefaultMessagingService;
@@ -568,7 +569,8 @@ public class IgniteImpl implements Ignite {
raftMgr,
new RocksDbKeyValueStorage(name,
workDir.resolve(METASTORAGE_DB_PATH), failureProcessor),
clock,
- topologyAwareRaftGroupServiceFactory
+ topologyAwareRaftGroupServiceFactory,
+ metricManager
);
this.cfgStorage = new DistributedConfigurationStorage(name,
metaStorageMgr);
@@ -1019,6 +1021,7 @@ public class IgniteImpl implements Ignite {
try {
metricManager.registerSource(new JvmMetricSource());
+ metricManager.registerSource(new OsMetricSource());
lifecycleManager.startComponent(longJvmPauseDetector);
diff --git
a/modules/sql-engine/src/integrationTest/java/org/apache/ignite/internal/sql/sqllogic/ItSqlLogicTest.java
b/modules/sql-engine/src/integrationTest/java/org/apache/ignite/internal/sql/sqllogic/ItSqlLogicTest.java
index a110a4a82d..a1eb99444a 100644
---
a/modules/sql-engine/src/integrationTest/java/org/apache/ignite/internal/sql/sqllogic/ItSqlLogicTest.java
+++
b/modules/sql-engine/src/integrationTest/java/org/apache/ignite/internal/sql/sqllogic/ItSqlLogicTest.java
@@ -42,6 +42,7 @@ import org.apache.ignite.Ignite;
import org.apache.ignite.IgnitionManager;
import org.apache.ignite.InitParameters;
import org.apache.ignite.internal.IgniteIntegrationTest;
+import org.apache.ignite.internal.app.IgniteImpl;
import org.apache.ignite.internal.lang.IgniteStringFormatter;
import org.apache.ignite.internal.lang.IgniteSystemProperties;
import org.apache.ignite.internal.logger.IgniteLogger;
@@ -338,7 +339,9 @@ public class ItSqlLogicTest extends IgniteIntegrationTest {
.clusterName("cluster")
.clusterConfiguration("{"
+ "gc.lowWatermark.dataAvailabilityTime: 1010,\n"
- + "gc.lowWatermark.updateFrequency: 3000\n"
+ + "gc.lowWatermark.updateFrequency: 3000,\n"
+ + "metrics.exporters.logPush.exporterName: logPush,\n"
+ + "metrics.exporters.logPush.period: 5000\n"
+ "}")
.build();
TestIgnitionManager.init(initParameters);
@@ -346,7 +349,12 @@ public class ItSqlLogicTest extends IgniteIntegrationTest {
for (CompletableFuture<Ignite> future : futures) {
assertThat(future, willCompleteSuccessfully());
- CLUSTER_NODES.add(await(future));
+ IgniteImpl ignite = (IgniteImpl) await(future);
+ CLUSTER_NODES.add(ignite);
+
+ ignite.metricManager().enable("jvm");
+ ignite.metricManager().enable("os");
+ ignite.metricManager().enable("metastorage");
}
}
diff --git
a/modules/table/src/integrationTest/java/org/apache/ignite/internal/rebalance/ItRebalanceDistributedTest.java
b/modules/table/src/integrationTest/java/org/apache/ignite/internal/rebalance/ItRebalanceDistributedTest.java
index e08d866cd0..0633e3f5be 100644
---
a/modules/table/src/integrationTest/java/org/apache/ignite/internal/rebalance/ItRebalanceDistributedTest.java
+++
b/modules/table/src/integrationTest/java/org/apache/ignite/internal/rebalance/ItRebalanceDistributedTest.java
@@ -139,6 +139,7 @@ import
org.apache.ignite.internal.metastorage.impl.MetaStorageManagerImpl;
import org.apache.ignite.internal.metastorage.server.KeyValueStorage;
import
org.apache.ignite.internal.metastorage.server.SimpleInMemoryKeyValueStorage;
import
org.apache.ignite.internal.metastorage.server.persistence.RocksDbKeyValueStorage;
+import org.apache.ignite.internal.metrics.MetricManager;
import org.apache.ignite.internal.metrics.NoOpMetricManager;
import org.apache.ignite.internal.network.ClusterService;
import org.apache.ignite.internal.network.DefaultMessagingService;
@@ -1033,11 +1034,13 @@ public class ItRebalanceDistributedTest extends
BaseIgniteAbstractTest {
lockManager = new HeapLockManager();
+ MetricManager metricManager = new NoOpMetricManager();
+
var raftGroupEventsClientListener = new
RaftGroupEventsClientListener();
raftManager = spy(new Loza(
clusterService,
- new NoOpMetricManager(),
+ metricManager,
raftConfiguration,
dir,
hybridClock,
@@ -1085,6 +1088,7 @@ public class ItRebalanceDistributedTest extends
BaseIgniteAbstractTest {
keyValueStorage,
hybridClock,
topologyAwareRaftGroupServiceFactory,
+ metricManager,
metaStorageConfiguration
);