This is an automated email from the ASF dual-hosted git repository.
amashenkov 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 263167a IGNITE-10561: REST: Memory policy metrics should be available
via REST. This closes #5778.
263167a is described below
commit 263167a6073ae9024b860c28201915ca0c7e181b
Author: Roman Shtykh <[email protected]>
AuthorDate: Thu Feb 14 19:39:34 2019 +0300
IGNITE-10561: REST: Memory policy metrics should be available via REST.
This closes #5778.
Signed-off-by: Andrey V. Mashenkov <[email protected]>
---
.../rest/JettyRestProcessorAbstractSelfTest.java | 79 +++++++++++++++++++++
...stProcessorAuthenticationWithTokenSelfTest.java | 34 ++++++---
.../internal/processors/rest/GridRestCommand.java | 8 ++-
.../processors/rest/GridRestProcessor.java | 2 +
.../memory/MemoryMetricsCommandHandler.java | 80 ++++++++++++++++++++++
.../protocols/http/jetty/GridJettyRestHandler.java | 2 +
6 files changed, 195 insertions(+), 10 deletions(-)
diff --git
a/modules/clients/src/test/java/org/apache/ignite/internal/processors/rest/JettyRestProcessorAbstractSelfTest.java
b/modules/clients/src/test/java/org/apache/ignite/internal/processors/rest/JettyRestProcessorAbstractSelfTest.java
index 245cb3b..784cebc 100644
---
a/modules/clients/src/test/java/org/apache/ignite/internal/processors/rest/JettyRestProcessorAbstractSelfTest.java
+++
b/modules/clients/src/test/java/org/apache/ignite/internal/processors/rest/JettyRestProcessorAbstractSelfTest.java
@@ -143,6 +143,7 @@ import static org.apache.ignite.cache.CacheMode.PARTITIONED;
import static org.apache.ignite.cache.CacheMode.REPLICATED;
import static org.apache.ignite.cache.CacheWriteSynchronizationMode.FULL_ASYNC;
import static org.apache.ignite.cache.CacheWriteSynchronizationMode.FULL_SYNC;
+import static org.apache.ignite.configuration.WALMode.NONE;
import static org.apache.ignite.internal.IgniteVersionUtils.VER_STR;
import static
org.apache.ignite.internal.processors.query.QueryUtils.TEMPLATE_PARTITIONED;
import static
org.apache.ignite.internal.processors.query.QueryUtils.TEMPLATE_REPLICATED;
@@ -157,6 +158,9 @@ public abstract class JettyRestProcessorAbstractSelfTest
extends JettyRestProces
/** Used to sent request charset. */
private static final String CHARSET = StandardCharsets.UTF_8.name();
+ /** */
+ private static boolean memoryMetricsEnabled;
+
/** {@inheritDoc} */
@Override protected void beforeTestsStarted() throws Exception {
super.beforeTestsStarted();
@@ -167,6 +171,12 @@ public abstract class JettyRestProcessorAbstractSelfTest
extends JettyRestProces
/** {@inheritDoc} */
@Override protected void beforeTest() throws Exception {
grid(0).cache(DEFAULT_CACHE_NAME).removeAll();
+
+ if (memoryMetricsEnabled) {
+ memoryMetricsEnabled = false;
+
+ restartGrid();
+ }
}
/**
@@ -1976,6 +1986,69 @@ public abstract class JettyRestProcessorAbstractSelfTest
extends JettyRestProces
* @throws Exception If failed.
*/
@Test
+ public void testDataRegionMetrics() throws Exception {
+ String ret = content(F.asMap("cmd",
GridRestCommand.DATA_REGION_METRICS.key()));
+
+ JsonNode res = validateJsonResponse(ret);
+
+ assertTrue(res.size() > 0);
+
+ info(GridRestCommand.DATA_REGION_METRICS.key().toUpperCase() + "
command result: " + ret);
+ }
+
+ /**
+ * @throws Exception If failed.
+ */
+ @Test
+ public void testDataStorageMetricsDisabled() throws Exception {
+ String ret = content(F.asMap("cmd",
GridRestCommand.DATA_STORAGE_METRICS.key()));
+
+ JsonNode res = validateJsonResponse(ret);
+
+ assertTrue(res.asText().equalsIgnoreCase("Storage metrics are not
enabled"));
+
+ info(GridRestCommand.DATA_STORAGE_METRICS.key().toUpperCase() + "
command result: " + ret);
+ }
+
+ /**
+ * @throws Exception If failed.
+ */
+ @Test
+ public void testDataStorageMetricsEnabled() throws Exception {
+ if (!memoryMetricsEnabled) {
+ restartGrid();
+
+ memoryMetricsEnabled = true;
+ }
+
+ String ret = content(F.asMap("cmd",
GridRestCommand.DATA_STORAGE_METRICS.key()));
+
+ assertNotNull(validateJsonResponse(ret));
+
+ info(GridRestCommand.DATA_STORAGE_METRICS.key().toUpperCase() + "
command result: " + ret);
+ }
+
+ /**
+ * Restart grid.
+ *
+ * @throws Exception If failed.
+ */
+ protected void restartGrid() throws Exception {
+ stopAllGrids();
+
+ cleanPersistenceDir();
+
+ startGrids(gridCount());
+
+ grid(0).cluster().active(true);
+
+ initCache();
+ }
+
+ /**
+ * @throws Exception If failed.
+ */
+ @Test
public void testVersion() throws Exception {
String ret = content(null, GridRestCommand.VERSION);
@@ -3075,8 +3148,14 @@ public abstract class JettyRestProcessorAbstractSelfTest
extends JettyRestProces
drCfg.setName("testDataRegion");
drCfg.setMaxSize(100L * 1024 * 1024);
+ if (memoryMetricsEnabled)
+ drCfg.setPersistenceEnabled(true);
+
dsCfg.setDefaultDataRegionConfiguration(drCfg);
+ if (memoryMetricsEnabled)
+ dsCfg.setMetricsEnabled(true).setWalMode(NONE);
+
cfg.setDataStorageConfiguration(dsCfg);
return cfg;
diff --git
a/modules/clients/src/test/java/org/apache/ignite/internal/processors/rest/JettyRestProcessorAuthenticationWithTokenSelfTest.java
b/modules/clients/src/test/java/org/apache/ignite/internal/processors/rest/JettyRestProcessorAuthenticationWithTokenSelfTest.java
index 6a35a43..90461da 100644
---
a/modules/clients/src/test/java/org/apache/ignite/internal/processors/rest/JettyRestProcessorAuthenticationWithTokenSelfTest.java
+++
b/modules/clients/src/test/java/org/apache/ignite/internal/processors/rest/JettyRestProcessorAuthenticationWithTokenSelfTest.java
@@ -31,17 +31,33 @@ public class
JettyRestProcessorAuthenticationWithTokenSelfTest extends JettyRest
@Override protected void beforeTest() throws Exception {
super.beforeTest();
- // Authenticate and extract token.
- if (F.isEmpty(tok)) {
- String ret = content(null, GridRestCommand.AUTHENTICATE,
- "user", DFLT_USER,
- "password", DFLT_PWD);
+ if (F.isEmpty(tok))
+ refreshToken();
+ }
+
+ /** {@inheritDoc} */
+ @Override protected void restartGrid() throws Exception {
+ tok = null;
+
+ super.restartGrid();
+
+ refreshToken();
+ }
+
+ /**
+ * Authenticate and extract token.
+ *
+ * @throws Exception If failed.
+ */
+ private void refreshToken() throws Exception {
+ String ret = content(DEFAULT_CACHE_NAME, GridRestCommand.AUTHENTICATE,
+ "user", DFLT_USER,
+ "password", DFLT_PWD);
- int p1 = ret.indexOf("sessionToken");
- int p2 = ret.indexOf('"', p1 + 16);
+ int p1 = ret.indexOf("sessionToken");
+ int p2 = ret.indexOf('"', p1 + 16);
- tok = ret.substring(p1 + 15, p2);
- }
+ tok = ret.substring(p1 + 15, p2);
}
/** {@inheritDoc} */
diff --git
a/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/GridRestCommand.java
b/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/GridRestCommand.java
index 4046b15..6864cad 100644
---
a/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/GridRestCommand.java
+++
b/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/GridRestCommand.java
@@ -198,7 +198,13 @@ public enum GridRestCommand {
REMOVE_USER("removeuser"),
/** */
- UPDATE_USER("updateuser");
+ UPDATE_USER("updateuser"),
+
+ /** Data region metrics. */
+ DATA_REGION_METRICS("dataregion"),
+
+ /** Data storage metrics. */
+ DATA_STORAGE_METRICS("datastorage");
/** Enum values. */
private static final GridRestCommand[] VALS = values();
diff --git
a/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/GridRestProcessor.java
b/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/GridRestProcessor.java
index f24c4d3..e16980c 100644
---
a/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/GridRestProcessor.java
+++
b/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/GridRestProcessor.java
@@ -51,6 +51,7 @@ import
org.apache.ignite.internal.processors.rest.handlers.auth.AuthenticationCo
import
org.apache.ignite.internal.processors.rest.handlers.cache.GridCacheCommandHandler;
import
org.apache.ignite.internal.processors.rest.handlers.cluster.GridBaselineCommandHandler;
import
org.apache.ignite.internal.processors.rest.handlers.cluster.GridChangeStateCommandHandler;
+import
org.apache.ignite.internal.processors.rest.handlers.memory.MemoryMetricsCommandHandler;
import
org.apache.ignite.internal.processors.rest.handlers.datastructures.DataStructuresCommandHandler;
import
org.apache.ignite.internal.processors.rest.handlers.log.GridLogCommandHandler;
import
org.apache.ignite.internal.processors.rest.handlers.query.QueryCommandHandler;
@@ -533,6 +534,7 @@ public class GridRestProcessor extends GridProcessorAdapter
{
addHandler(new AuthenticationCommandHandler(ctx));
addHandler(new UserActionCommandHandler(ctx));
addHandler(new GridBaselineCommandHandler(ctx));
+ addHandler(new MemoryMetricsCommandHandler(ctx));
// Start protocols.
startTcpProtocol();
diff --git
a/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/memory/MemoryMetricsCommandHandler.java
b/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/memory/MemoryMetricsCommandHandler.java
new file mode 100644
index 0000000..83ae052
--- /dev/null
+++
b/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/memory/MemoryMetricsCommandHandler.java
@@ -0,0 +1,80 @@
+/*
+ * 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.processors.rest.handlers.memory;
+
+import java.util.Collection;
+import org.apache.ignite.DataRegionMetrics;
+import org.apache.ignite.DataStorageMetrics;
+import org.apache.ignite.internal.GridKernalContext;
+import org.apache.ignite.internal.IgniteInternalFuture;
+import org.apache.ignite.internal.processors.rest.GridRestCommand;
+import org.apache.ignite.internal.processors.rest.GridRestResponse;
+import
org.apache.ignite.internal.processors.rest.handlers.GridRestCommandHandlerAdapter;
+import org.apache.ignite.internal.processors.rest.request.GridRestRequest;
+import org.apache.ignite.internal.util.future.GridFinishedFuture;
+import org.apache.ignite.internal.util.typedef.internal.U;
+
+import static
org.apache.ignite.internal.processors.rest.GridRestCommand.DATA_REGION_METRICS;
+import static
org.apache.ignite.internal.processors.rest.GridRestCommand.DATA_STORAGE_METRICS;
+
+/**
+ * Command handler for {@link DataStorageMetrics} or a collection of {@link
DataRegionMetrics}
+ */
+public class MemoryMetricsCommandHandler extends GridRestCommandHandlerAdapter
{
+ /**
+ * Supported commands.
+ */
+ private static final Collection<GridRestCommand> SUPPORTED_COMMANDS =
U.sealList(
+ DATA_STORAGE_METRICS, DATA_REGION_METRICS);
+
+ /**
+ * @param ctx Context.
+ */
+ public MemoryMetricsCommandHandler(GridKernalContext ctx) {
+ super(ctx);
+ }
+
+ /** {@inheritDoc} */
+ @Override public Collection<GridRestCommand> supportedCommands() {
+ return SUPPORTED_COMMANDS;
+ }
+
+ /** {@inheritDoc} */
+ @Override public IgniteInternalFuture<GridRestResponse>
handleAsync(GridRestRequest req) {
+ assert req != null;
+
+ if (log.isDebugEnabled())
+ log.debug("Handling " + req.command().key() + " REST request: " +
req);
+
+ GridRestCommand cmd = req.command();
+
+ switch (cmd) {
+ case DATA_REGION_METRICS:
+ return new GridFinishedFuture<>(new
GridRestResponse(ctx.grid().dataRegionMetrics()));
+
+ case DATA_STORAGE_METRICS:
+ if
(ctx.config().getDataStorageConfiguration().isMetricsEnabled())
+ return new GridFinishedFuture<>(new
GridRestResponse(ctx.grid().dataStorageMetrics()));
+ else
+ return new GridFinishedFuture<>(new
GridRestResponse("Storage metrics are not enabled"));
+
+ default:
+ return new GridFinishedFuture<>(new
GridRestResponse(GridRestResponse.STATUS_FAILED, "Unknown command"));
+ }
+ }
+}
diff --git
a/modules/rest-http/src/main/java/org/apache/ignite/internal/processors/rest/protocols/http/jetty/GridJettyRestHandler.java
b/modules/rest-http/src/main/java/org/apache/ignite/internal/processors/rest/protocols/http/jetty/GridJettyRestHandler.java
index 41642c3..f36bdb6 100644
---
a/modules/rest-http/src/main/java/org/apache/ignite/internal/processors/rest/protocols/http/jetty/GridJettyRestHandler.java
+++
b/modules/rest-http/src/main/java/org/apache/ignite/internal/processors/rest/protocols/http/jetty/GridJettyRestHandler.java
@@ -735,6 +735,8 @@ public class GridJettyRestHandler extends AbstractHandler {
break;
}
+ case DATA_REGION_METRICS:
+ case DATA_STORAGE_METRICS:
case NAME:
case VERSION: {
restReq = new GridRestRequest();