This is an automated email from the ASF dual-hosted git repository.
heybales pushed a commit to branch support/1.14
in repository https://gitbox.apache.org/repos/asf/geode.git
The following commit(s) were added to refs/heads/support/1.14 by this push:
new d715114 GEODE-9022: Support Info Command (#6121) (#6148)
d715114 is described below
commit d715114f33fd46417f0140629110f30ea49ecb07
Author: Hale Bales <[email protected]>
AuthorDate: Wed Mar 17 09:23:45 2021 -0700
GEODE-9022: Support Info Command (#6121) (#6148)
- add info command to supported list
- add unit/integration tests
- add dunit concurrency test
- remove redundant test
- declare configureMaxMemory() and getExposedPort() abstract
- remove unused boolean
Co-authored-by: Ray Ingles <[email protected]>
(cherry picked from commit 5fe934e464b3a41a3dd99b9d019cb4a0de61aae6)
---
.../tools_modules/redis_api_for_geode.html.md.erb | 3 +-
geode-redis/README.md | 70 +++++------
.../server/InfoNativeRedisAcceptanceTest.java | 5 -
.../server/InfoStatsNativeRedisAcceptanceTest.java | 11 ++
.../redis/internal/executor/InfoDUnitTest.java | 138 +++++++++++++++++++++
.../server/AbstractInfoIntegrationTest.java | 12 --
.../AbstractRedisInfoStatsIntegrationTest.java | 60 ++++++---
.../executor/server/InfoIntegrationTest.java | 5 -
.../executor/server/InfoStatsIntegrationTest.java | 11 ++
.../geode/redis/internal/RedisCommandType.java | 4 +-
.../redis/internal/SupportedCommandsJUnitTest.java | 2 +-
11 files changed, 244 insertions(+), 77 deletions(-)
diff --git a/geode-docs/tools_modules/redis_api_for_geode.html.md.erb
b/geode-docs/tools_modules/redis_api_for_geode.html.md.erb
index c358c2f..7c7aa01 100644
--- a/geode-docs/tools_modules/redis_api_for_geode.html.md.erb
+++ b/geode-docs/tools_modules/redis_api_for_geode.html.md.erb
@@ -72,6 +72,7 @@ The Redis API for <%=vars.product_name%> currently supports
the following comman
- **Keys**: DEL, EXISTS, EXPIRE, EXPIREAT, KEYS, PERSIST, PEXPIRE,
PEXPIREAT, PTTL, RENAME, TTL,
TYPE
- **Publish/Subscribe**: PUBLISH, PSUBSCRIBE, PUNSUBSCRIBE, SUBSCRIBE,
UNSUBSCRIBE
+- **Server**: INFO
- **Sets**: SADD, SMEMBERS, SREM
- **Strings**: APPEND, GET, SET
@@ -82,7 +83,7 @@ exactly as expected.
- **Connection**: ECHO, SELECT
- **Hashes**: HDEL, HEXISTS, HGET, HINCRBY, HINCRBYFLOAT, HKEYS, HSCAN
- **Keys**: SCAN, UNLINK
-- **Server**: DBSIZE, FLUSHALL (no async option), FLUSHDB (no async option),
INFO, SHUTDOWN,
+- **Server**: DBSIZE, FLUSHALL (no async option), FLUSHDB (no async option),
SHUTDOWN,
SLOWLOG, TIME
- **Sets**: SCARD, SDIFF, SDIFFSTORE, SINTER, SINTERSTORE, SISMEMBER, SMOVE,
SPOP, SRANDMEMBER,
SSCAN, SUNION, SUNIONSTORE
diff --git a/geode-redis/README.md b/geode-redis/README.md
index 69a7d9a..4e640c9 100644
--- a/geode-redis/README.md
+++ b/geode-redis/README.md
@@ -172,41 +172,41 @@ start server \
| HSTRLEN | HDEL
| BGREWRITEAOF |
| HLEN | HEXISTS
| BGSAVE |
| HVALS | HGET
| BITFIELD |
-| KEYS | HINCRBY
| BLPOP |
-| PERSIST | HINCRBYFLOAT
| BRPOP |
-| PEXPIRE | HKEYS
| BRPOPLPUSH |
-| PEXPIREAT | HSCAN
| BZPOPMAX |
-| PING | INCR
| BZPOPMIN |
-| PSUBSCRIBE | INCRBY
| CLIENT CACHING |
-| PTTL | INCRBYFLOAT
| CLIENT GETNAME |
-| PUBLISH | INFO
| CLIENT GETREDIR |
-| PUNSUBSCRIBE | MGET
| CLIENT ID |
-| QUIT | MSET
| CLIENT KILL |
-| RENAME | MSETNX
| CLIENT LIST |
-| SADD | PSETEX
| CLIENT PAUSE |
-| SET | SCAN
| CLIENT REPLY |
-| SMEMBERS | SCARD
| CLIENT SETNAME |
-| SREM | SDIFF
| CLIENT TRACKING |
-| SUBSCRIBE | SDIFFSTORE
| CLIENT UNBLOCK |
-| TTL | SELECT
| CLUSTER ADDSLOTS |
-| TYPE | SETBIT
| CLUSTER BUMPEPOCH |
-| UNSUBSCRIBE | SETEX
| CLUSTER COUNT-FAILURE-REPORTS |
-| | SETNX
| CLUSTER COUNTKEYSINSLOT |
-| | SETRANGE
| CLUSTER DELSLOTS |
-| | SHUTDOWN
| CLUSTER FAILOVER |
-| | SINTER
| CLUSTER FLUSHSLOTS |
-| | SINTERSTORE
| CLUSTER FORGET |
-| | SISMEMBER
| CLUSTER GETKEYSINSLOT |
-| | SLOWLOG
| CLUSTER INFO |
-| | SMOVE
| CLUSTER KEYSLOT |
-| | SPOP
| CLUSTER MEET |
-| | SRANDMEMBER
| CLUSTER MYID |
-| | SSCAN
| CLUSTER NODES |
-| | STRLEN
| CLUSTER REPLICAS |
-| | SUNION
| CLUSTER REPLICATE |
-| | SUNIONSTORE
| CLUSTER RESET |
-| | TIME
| CLUSTER SAVECONFIG |
-| | UNLINK [1]
| CLUSTER SET-CONFIG-EPOCH |
+| INFO | HINCRBY
| BLPOP |
+| KEYS | HINCRBYFLOAT
| BRPOP |
+| PERSIST | HKEYS
| BRPOPLPUSH |
+| PEXPIRE | HSCAN
| BZPOPMAX |
+| PEXPIREAT | INCR
| BZPOPMIN |
+| PING | INCRBY
| CLIENT CACHING |
+| PSUBSCRIBE | INCRBYFLOAT
| CLIENT GETNAME |
+| PTTL | MGET
| CLIENT GETREDIR |
+| PUBLISH | MSET
| CLIENT ID |
+| PUNSUBSCRIBE | MSETNX
| CLIENT KILL |
+| QUIT | PSETEX
| CLIENT LIST |
+| RENAME | SCAN
| CLIENT PAUSE |
+| SADD | SCARD
| CLIENT REPLY |
+| SET | SDIFF
| CLIENT SETNAME |
+| SMEMBERS | SDIFFSTORE
| CLIENT TRACKING |
+| SREM | SELECT
| CLIENT UNBLOCK |
+| SUBSCRIBE | SETBIT
| CLUSTER ADDSLOTS |
+| TTL | SETEX
| CLUSTER BUMPEPOCH |
+| TYPE | SETNX
| CLUSTER COUNT-FAILURE-REPORTS |
+| UNSUBSCRIBE | SETRANGE
| CLUSTER COUNTKEYSINSLOT |
+| | SHUTDOWN
| CLUSTER DELSLOTS |
+| | SINTER
| CLUSTER FAILOVER |
+| | SINTERSTORE
| CLUSTER FLUSHSLOTS |
+| | SISMEMBER
| CLUSTER FORGET |
+| | SLOWLOG
| CLUSTER GETKEYSINSLOT |
+| | SMOVE
| CLUSTER INFO |
+| | SPOP
| CLUSTER KEYSLOT |
+| | SRANDMEMBER
| CLUSTER MEET |
+| | SSCAN
| CLUSTER MYID |
+| | STRLEN
| CLUSTER NODES |
+| | SUNION
| CLUSTER REPLICAS |
+| | SUNIONSTORE
| CLUSTER REPLICATE |
+| | TIME
| CLUSTER RESET |
+| | UNLINK [1]
| CLUSTER SAVECONFIG |
+| |
| CLUSTER SET-CONFIG-EPOCH |
| |
| CLUSTER SETSLOT |
| |
| CLUSTER SLAVES |
| |
| CLUSTER SLOTS |
diff --git
a/geode-redis/src/acceptanceTest/java/org/apache/geode/redis/internal/executor/server/InfoNativeRedisAcceptanceTest.java
b/geode-redis/src/acceptanceTest/java/org/apache/geode/redis/internal/executor/server/InfoNativeRedisAcceptanceTest.java
index 3157e03..6e03f76 100644
---
a/geode-redis/src/acceptanceTest/java/org/apache/geode/redis/internal/executor/server/InfoNativeRedisAcceptanceTest.java
+++
b/geode-redis/src/acceptanceTest/java/org/apache/geode/redis/internal/executor/server/InfoNativeRedisAcceptanceTest.java
@@ -28,9 +28,4 @@ public class InfoNativeRedisAcceptanceTest extends
AbstractInfoIntegrationTest {
public int getPort() {
return redis.getPort();
}
-
- @Override
- public int getExposedPort() {
- return redis.getExposedPort();
- }
}
diff --git
a/geode-redis/src/acceptanceTest/java/org/apache/geode/redis/internal/executor/server/InfoStatsNativeRedisAcceptanceTest.java
b/geode-redis/src/acceptanceTest/java/org/apache/geode/redis/internal/executor/server/InfoStatsNativeRedisAcceptanceTest.java
index c4f56e0..3b62da6 100644
---
a/geode-redis/src/acceptanceTest/java/org/apache/geode/redis/internal/executor/server/InfoStatsNativeRedisAcceptanceTest.java
+++
b/geode-redis/src/acceptanceTest/java/org/apache/geode/redis/internal/executor/server/InfoStatsNativeRedisAcceptanceTest.java
@@ -16,6 +16,7 @@
package org.apache.geode.redis.internal.executor.server;
import org.junit.ClassRule;
+import redis.clients.jedis.Jedis;
import org.apache.geode.NativeRedisTestRule;
@@ -27,4 +28,14 @@ public class InfoStatsNativeRedisAcceptanceTest extends
AbstractRedisInfoStatsIn
public int getPort() {
return redis.getPort();
}
+
+ @Override
+ public int getExposedPort() {
+ return redis.getExposedPort();
+ }
+
+ @Override
+ public void configureMaxMemory(Jedis jedis) {
+ jedis.configSet("maxmemory", "10mb");
+ }
}
diff --git
a/geode-redis/src/distributedTest/java/org/apache/geode/redis/internal/executor/InfoDUnitTest.java
b/geode-redis/src/distributedTest/java/org/apache/geode/redis/internal/executor/InfoDUnitTest.java
new file mode 100644
index 0000000..29d746b
--- /dev/null
+++
b/geode-redis/src/distributedTest/java/org/apache/geode/redis/internal/executor/InfoDUnitTest.java
@@ -0,0 +1,138 @@
+/*
+ * 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.geode.redis.internal.executor;
+
+import static
org.apache.geode.distributed.ConfigurationProperties.MAX_WAIT_TIME_RECONNECT;
+import static org.assertj.core.api.Assertions.assertThat;
+
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Properties;
+import java.util.concurrent.atomic.AtomicInteger;
+
+import org.junit.AfterClass;
+import org.junit.Before;
+import org.junit.BeforeClass;
+import org.junit.ClassRule;
+import org.junit.Test;
+import redis.clients.jedis.Jedis;
+
+import org.apache.geode.redis.ConcurrentLoopingThreads;
+import org.apache.geode.test.awaitility.GeodeAwaitility;
+import org.apache.geode.test.dunit.rules.MemberVM;
+import org.apache.geode.test.dunit.rules.RedisClusterStartupRule;
+
+public class InfoDUnitTest {
+ @ClassRule
+ public static RedisClusterStartupRule clusterStartUp = new
RedisClusterStartupRule(4);
+
+ private static final String LOCAL_HOST = "127.0.0.1";
+ private static final int NUM_ITERATIONS = 1000;
+ private static final int JEDIS_TIMEOUT =
Math.toIntExact(GeodeAwaitility.getTimeout().toMillis());
+ private static final String COMMANDS_PROCESSED = "total_commands_processed";
+ private static final String REDIS_TCP_PORT = "tcp_port";
+
+ private static Jedis jedis1;
+ private static Jedis jedis2;
+
+ private static Properties locatorProperties;
+
+ private static MemberVM locator;
+ private static MemberVM server1;
+ private static MemberVM server2;
+
+ private static int redisServerPort1;
+ private static int redisServerPort2;
+
+ @BeforeClass
+ public static void classSetup() {
+ locatorProperties = new Properties();
+ locatorProperties.setProperty(MAX_WAIT_TIME_RECONNECT, "15000");
+
+ locator = clusterStartUp.startLocatorVM(0, locatorProperties);
+ server1 = clusterStartUp.startRedisVM(1, locator.getPort());
+ server2 = clusterStartUp.startRedisVM(2, locator.getPort());
+
+ redisServerPort1 = clusterStartUp.getRedisPort(1);
+ redisServerPort2 = clusterStartUp.getRedisPort(2);
+
+ jedis1 = new Jedis(LOCAL_HOST, redisServerPort1, JEDIS_TIMEOUT);
+ jedis2 = new Jedis(LOCAL_HOST, redisServerPort2, JEDIS_TIMEOUT);
+ }
+
+ @Before
+ public void testSetup() {
+ jedis1.flushAll();
+ }
+
+ @AfterClass
+ public static void tearDown() {
+ jedis1.disconnect();
+ jedis2.disconnect();
+
+ server1.stop();
+ server2.stop();
+ }
+
+ @Test
+ public void testConcurrentInfoFromDifferentServers_doNotStepOnEachOther() {
+ jedis1.set("key1", "value1");
+ jedis1.set("key2", "value2");
+ jedis1.set("key3", "value3");
+ jedis2.set("key3", "value3");
+
+ AtomicInteger previousCommandsProcessed1 = new AtomicInteger(4);
+ AtomicInteger previousCommandsProcessed2 = new AtomicInteger(1);
+
assertThat(Integer.valueOf(getInfo(jedis1).get(COMMANDS_PROCESSED))).isEqualTo(4);
+
+ new ConcurrentLoopingThreads(NUM_ITERATIONS,
+ i -> {
+ Map<String, String> info1 = getInfo(jedis1);
+
assertThat(Integer.valueOf(info1.get(REDIS_TCP_PORT))).isEqualTo(redisServerPort1);
+
+ int commandsProcessed1 =
Integer.valueOf(info1.get(COMMANDS_PROCESSED));
+
assertThat(commandsProcessed1).isGreaterThanOrEqualTo(previousCommandsProcessed1.get());
+ previousCommandsProcessed1.set(commandsProcessed1);
+ },
+ i -> {
+ Map<String, String> info2 = getInfo(jedis2);
+
assertThat(Integer.valueOf(info2.get(REDIS_TCP_PORT))).isEqualTo(redisServerPort2);
+
+ int commandsProcessed2 =
Integer.valueOf(info2.get(COMMANDS_PROCESSED));
+
assertThat(commandsProcessed2).isGreaterThanOrEqualTo(previousCommandsProcessed2.get());
+ previousCommandsProcessed2.set(commandsProcessed2);
+ }).run();
+ }
+
+ /**
+ * Convert the values returned by the INFO command into a basic param:value
map.
+ */
+ static synchronized Map<String, String> getInfo(Jedis jedis) {
+ Map<String, String> results = new HashMap<>();
+ String rawInfo = jedis.info();
+
+ for (String line : rawInfo.split("\r\n")) {
+ int colonIndex = line.indexOf(":");
+ if (colonIndex > 0) {
+ String key = line.substring(0, colonIndex);
+ String value = line.substring(colonIndex + 1);
+ results.put(key, value);
+ }
+ }
+
+ return results;
+ }
+}
diff --git
a/geode-redis/src/integrationTest/java/org/apache/geode/redis/internal/executor/server/AbstractInfoIntegrationTest.java
b/geode-redis/src/integrationTest/java/org/apache/geode/redis/internal/executor/server/AbstractInfoIntegrationTest.java
index 84b3043..3db51da 100644
---
a/geode-redis/src/integrationTest/java/org/apache/geode/redis/internal/executor/server/AbstractInfoIntegrationTest.java
+++
b/geode-redis/src/integrationTest/java/org/apache/geode/redis/internal/executor/server/AbstractInfoIntegrationTest.java
@@ -121,8 +121,6 @@ public abstract class AbstractInfoIntegrationTest
implements RedisPortSupplier {
jedis.close();
}
- abstract int getExposedPort();
-
@Test
public void shouldReturnRedisVersion() {
String expectedResult = "redis_version:5.0.6";
@@ -133,16 +131,6 @@ public abstract class AbstractInfoIntegrationTest
implements RedisPortSupplier {
}
@Test
- public void shouldReturnTCPPort() {
- int expectedPort = getExposedPort();
- String expectedResult = "tcp_port:" + expectedPort;
-
- String actualResult = jedis.info();
-
- assertThat(actualResult).contains(expectedResult);
- }
-
- @Test
public void shouldReturnRedisMode() {
String expectedResult = "redis_mode:standalone";
diff --git
a/geode-redis/src/integrationTest/java/org/apache/geode/redis/internal/executor/server/AbstractRedisInfoStatsIntegrationTest.java
b/geode-redis/src/integrationTest/java/org/apache/geode/redis/internal/executor/server/AbstractRedisInfoStatsIntegrationTest.java
index 4e72595..23ae1da 100644
---
a/geode-redis/src/integrationTest/java/org/apache/geode/redis/internal/executor/server/AbstractRedisInfoStatsIntegrationTest.java
+++
b/geode-redis/src/integrationTest/java/org/apache/geode/redis/internal/executor/server/AbstractRedisInfoStatsIntegrationTest.java
@@ -29,6 +29,7 @@ import org.assertj.core.data.Offset;
import org.junit.After;
import org.junit.Before;
import org.junit.BeforeClass;
+import org.junit.Ignore;
import org.junit.Test;
import redis.clients.jedis.Jedis;
@@ -60,9 +61,16 @@ public abstract class AbstractRedisInfoStatsIntegrationTest
implements RedisPort
private static final String NETWORK_KB_READ_OVER_LAST_SECOND =
"instantaneous_input_kbps";
private static final String UPTIME_IN_DAYS = "uptime_in_days";
private static final String UPTIME_IN_SECONDS = "uptime_in_seconds";
+ private static final String USED_MEMORY = "used_memory";
+ private static final String MEMORY_FRAGMENTATION = "mem_fragmentation_ratio";
+ private static final String TCP_PORT = "tcp_port";
+ private static final String MAX_MEMORY = "maxmemory";
private static final AtomicInteger numInfoCalled = new AtomicInteger(0);
+ abstract int getExposedPort();
+
+ abstract void configureMaxMemory(Jedis jedis);
// ------------------- Setup -------------------------- //
@BeforeClass
@@ -108,6 +116,41 @@ public abstract class
AbstractRedisInfoStatsIntegrationTest implements RedisPort
// ------------------- Stats Section -------------------------- //
// note: see AbstractHitsMissesIntegrationTest for testing of hits/misses
+ // note: we are not testing hardcoded values at this time
+
+ @Test
+ public void keysSection_containsNumberOfSetKeys() {
+ assertThat(jedis.info("keyspace")).contains("keys=4");
+ }
+
+ @Test
+ public void maxMemoryIsNonZero_whenMaxMemoryIsSet() {
+ configureMaxMemory(jedis);
+
+ assertThat(Long.valueOf(getInfo(jedis).get(MAX_MEMORY))).isGreaterThan(0L);
+ }
+
+ @Test
+ public void tcpPort_returnsExposedTCPPort() {
+
assertThat(Integer.valueOf(getInfo(jedis).get(TCP_PORT))).isEqualTo(this.getExposedPort());
+ }
+
+ @Test
+ public void usedMemory_shouldBeNonZeroWhenContainsData() {
+ jedis.set("key", "value");
+
+ assertThat(Long.valueOf(getInfo(jedis).get(USED_MEMORY))).isGreaterThan(0);
+ }
+
+ @Ignore // currently we return 1.0
+ @Test
+ public void memFragmentation_shouldBeGreaterThanOne() {
+ for (int i = 0; i < 10000; i++) {
+ jedis.set("key" + i, "value");
+ }
+
+
assertThat(Double.valueOf(getInfo(jedis).get(MEMORY_FRAGMENTATION))).isGreaterThan(1.0);
+ }
@Test
public void commandsProcessed_shouldIncrement_givenSuccessfulCommand() {
@@ -188,23 +231,6 @@ public abstract class
AbstractRedisInfoStatsIntegrationTest implements RedisPort
}
- // todo test rejected connections
- @Test
- public void should_UpdateRejectedConnections() {
- Jedis jedis2 = new Jedis("localhost", getPort(), TIMEOUT);
- Jedis jedis3 = new Jedis("localhost", getPort(), TIMEOUT);
-
- jedis2.ping();
- jedis3.ping();
-
- validateConnectedClients(jedis, preTestConnectedClients, 2);
-
- jedis2.close();
- jedis3.close();
-
- validateConnectedClients(jedis, preTestConnectedClients, 0);
- }
-
// ------------------- Clients Section -------------------------- //
@Test
diff --git
a/geode-redis/src/integrationTest/java/org/apache/geode/redis/internal/executor/server/InfoIntegrationTest.java
b/geode-redis/src/integrationTest/java/org/apache/geode/redis/internal/executor/server/InfoIntegrationTest.java
index 752ba58..cdcf76c 100644
---
a/geode-redis/src/integrationTest/java/org/apache/geode/redis/internal/executor/server/InfoIntegrationTest.java
+++
b/geode-redis/src/integrationTest/java/org/apache/geode/redis/internal/executor/server/InfoIntegrationTest.java
@@ -31,9 +31,4 @@ public class InfoIntegrationTest extends
AbstractInfoIntegrationTest {
public int getPort() {
return server.getPort();
}
-
- @Override
- public int getExposedPort() {
- return getPort();
- }
}
diff --git
a/geode-redis/src/integrationTest/java/org/apache/geode/redis/internal/executor/server/InfoStatsIntegrationTest.java
b/geode-redis/src/integrationTest/java/org/apache/geode/redis/internal/executor/server/InfoStatsIntegrationTest.java
index 979a129..7e50a7f 100644
---
a/geode-redis/src/integrationTest/java/org/apache/geode/redis/internal/executor/server/InfoStatsIntegrationTest.java
+++
b/geode-redis/src/integrationTest/java/org/apache/geode/redis/internal/executor/server/InfoStatsIntegrationTest.java
@@ -16,6 +16,7 @@
package org.apache.geode.redis.internal.executor.server;
import org.junit.ClassRule;
+import redis.clients.jedis.Jedis;
import org.apache.geode.redis.GeodeRedisServerRule;
@@ -27,4 +28,14 @@ public class InfoStatsIntegrationTest extends
AbstractRedisInfoStatsIntegrationT
public int getPort() {
return server.getPort();
}
+
+ @Override
+ public int getExposedPort() {
+ return server.getPort();
+ }
+
+ @Override
+ public void configureMaxMemory(Jedis jedis) {
+ return;
+ }
}
diff --git
a/geode-redis/src/main/java/org/apache/geode/redis/internal/RedisCommandType.java
b/geode-redis/src/main/java/org/apache/geode/redis/internal/RedisCommandType.java
index 5d847bd..8a11e36 100755
---
a/geode-redis/src/main/java/org/apache/geode/redis/internal/RedisCommandType.java
+++
b/geode-redis/src/main/java/org/apache/geode/redis/internal/RedisCommandType.java
@@ -192,6 +192,9 @@ public enum RedisCommandType {
PUNSUBSCRIBE(new PunsubscribeExecutor(), SUPPORTED, new
MinimumParameterRequirements(1)),
UNSUBSCRIBE(new UnsubscribeExecutor(), SUPPORTED, new
MinimumParameterRequirements(1)),
+ /********** Server **********/
+ INFO(new InfoExecutor(), SUPPORTED, new MaximumParameterRequirements(2,
ERROR_SYNTAX)),
+
/***************************************
********* Internal Commands ***********
***************************************/
@@ -266,7 +269,6 @@ public enum RedisCommandType {
DBSIZE(new DBSizeExecutor(), UNSUPPORTED, new ExactParameterRequirements(1)),
FLUSHALL(new FlushAllExecutor(), UNSUPPORTED, new
MaximumParameterRequirements(2, ERROR_SYNTAX)),
FLUSHDB(new FlushAllExecutor(), UNSUPPORTED, new
MaximumParameterRequirements(2, ERROR_SYNTAX)),
- INFO(new InfoExecutor(), UNSUPPORTED, new MaximumParameterRequirements(2,
ERROR_SYNTAX)),
SHUTDOWN(new ShutDownExecutor(), UNSUPPORTED, new
MaximumParameterRequirements(2, ERROR_SYNTAX)),
SLOWLOG(new SlowlogExecutor(), UNSUPPORTED, new
SlowlogParameterRequirements()),
TIME(new TimeExecutor(), UNSUPPORTED, new ExactParameterRequirements(1)),
diff --git
a/geode-redis/src/test/java/org/apache/geode/redis/internal/SupportedCommandsJUnitTest.java
b/geode-redis/src/test/java/org/apache/geode/redis/internal/SupportedCommandsJUnitTest.java
index f8bb15c..6fe8cc7 100644
---
a/geode-redis/src/test/java/org/apache/geode/redis/internal/SupportedCommandsJUnitTest.java
+++
b/geode-redis/src/test/java/org/apache/geode/redis/internal/SupportedCommandsJUnitTest.java
@@ -55,6 +55,7 @@ public class SupportedCommandsJUnitTest {
"HVALS",
"HKEYS",
"INCRBYFLOAT",
+ "INFO",
"KEYS",
"MGET",
"PERSIST",
@@ -91,7 +92,6 @@ public class SupportedCommandsJUnitTest {
"GETSET",
"INCR",
"INCRBY",
- "INFO",
"MSET",
"MSETNX",
"PSETEX",