GEODE-8769: Help ensure redis stats are settled before testing (#5849)
- add await to be sure connections are closed in after
Co-authored-by: John Hutchison <hutchisonjo@vmware.com>
Co-authored-by: Helena A. Bales <hbales@pivotal.io>
diff --git a/geode-redis/src/integrationTest/java/org/apache/geode/redis/internal/RedisStatsIntegrationTest.java b/geode-redis/src/integrationTest/java/org/apache/geode/redis/internal/RedisStatsIntegrationTest.java
index ae90cd9..b49863f 100644
--- a/geode-redis/src/integrationTest/java/org/apache/geode/redis/internal/RedisStatsIntegrationTest.java
+++ b/geode-redis/src/integrationTest/java/org/apache/geode/redis/internal/RedisStatsIntegrationTest.java
@@ -49,6 +49,10 @@
private static long START_TIME;
private static StatisticsClock statisticsClock;
+ private Long preTestKeySpaceHits = 0l;
+ private Long preTestKeySpaceMisses = 0l;
+ private Long preTestConnectionsReceived = 0l;
+ private Long preTestConnectedClients = 0l;
@ClassRule
@@ -64,19 +68,32 @@
public void before() {
jedis = new Jedis("localhost", server.getPort(), TIMEOUT);
+ redisStats = server.getServer().getStats();
+
+ long preSetupCommandsProcessed = redisStats.getCommandsProcessed();
+
jedis.set(EXISTING_STRING_KEY, "A_Value");
jedis.hset(EXISTING_HASH_KEY, "Field1", "Value1");
jedis.sadd(EXISTING_SET_KEY_1, "m1", "m2", "m3");
jedis.sadd(EXISTING_SET_KEY_2, "m4", "m5", "m6");
- redisStats = server.getServer().getStats();
- redisStats.clearAllStats();
+ GeodeAwaitility.await().atMost(Duration.ofSeconds(2))
+ .untilAsserted(() -> assertThat(redisStats.getCommandsProcessed())
+ .isEqualTo(preSetupCommandsProcessed + 4));
+
+ preTestKeySpaceHits = redisStats.getKeyspaceHits();
+ preTestKeySpaceMisses = redisStats.getKeyspaceMisses();
+ preTestConnectionsReceived = redisStats.getTotalConnectionsReceived();
+ preTestConnectedClients = redisStats.getConnectedClients();
}
@After
public void after() {
jedis.flushAll();
jedis.close();
+ GeodeAwaitility.await().atMost(Duration.ofSeconds(2))
+ .untilAsserted(() -> assertThat(redisStats.getConnectedClients())
+ .isEqualTo(0));
}
// #############Stats Section###################################
@@ -86,10 +103,10 @@
jedis.get(EXISTING_STRING_KEY);
assertThat(redisStats.getKeyspaceHits())
- .isEqualTo(1);
+ .isEqualTo(preTestKeySpaceHits + 1);
assertThat(redisStats.getKeyspaceMisses())
- .isEqualTo(0);
+ .isEqualTo(preTestKeySpaceMisses);
}
@Test
@@ -98,9 +115,9 @@
jedis.get("Nonexistent_Key");
assertThat(redisStats.getKeyspaceHits())
- .isEqualTo(0);
+ .isEqualTo(preTestKeySpaceHits);
assertThat(redisStats.getKeyspaceMisses())
- .isEqualTo(1);
+ .isEqualTo(preTestKeySpaceMisses + 1);
}
// TODO: Set doesn't work like native Redis!
@@ -109,9 +126,9 @@
jedis.set(EXISTING_STRING_KEY, "New_Value");
assertThat(redisStats.getKeyspaceHits())
- .isEqualTo(1);
+ .isEqualTo(preTestKeySpaceHits + 1);
assertThat(redisStats.getKeyspaceMisses())
- .isEqualTo(0);
+ .isEqualTo(preTestKeySpaceMisses);
}
// TODO: Set doesn't work like native Redis!
@@ -120,9 +137,9 @@
jedis.set("Another_Key", "Another_Value");
assertThat(redisStats.getKeyspaceHits())
- .isEqualTo(0);
+ .isEqualTo(preTestKeySpaceHits);
assertThat(redisStats.getKeyspaceMisses())
- .isEqualTo(1);
+ .isEqualTo(preTestKeySpaceMisses + 1);
}
@Test
@@ -130,9 +147,9 @@
jedis.getbit(EXISTING_STRING_KEY, 0);
assertThat(redisStats.getKeyspaceHits())
- .isEqualTo(1);
+ .isEqualTo(preTestKeySpaceHits + 1);
assertThat(redisStats.getKeyspaceMisses())
- .isEqualTo(0);
+ .isEqualTo(preTestKeySpaceMisses);
}
@Test
@@ -140,9 +157,9 @@
jedis.getbit("Nonexistent_Key", 0);
assertThat(redisStats.getKeyspaceHits())
- .isEqualTo(0);
+ .isEqualTo(preTestKeySpaceHits);
assertThat(redisStats.getKeyspaceMisses())
- .isEqualTo(1);
+ .isEqualTo(preTestKeySpaceMisses + 1);
}
@Test
@@ -150,9 +167,9 @@
jedis.getrange(EXISTING_STRING_KEY, 0, 1);
assertThat(redisStats.getKeyspaceHits())
- .isEqualTo(1);
+ .isEqualTo(preTestKeySpaceHits + 1);
assertThat(redisStats.getKeyspaceMisses())
- .isEqualTo(0);
+ .isEqualTo(preTestKeySpaceMisses);
}
@Test
@@ -160,9 +177,9 @@
jedis.getrange("Nonexistent_Key", 0, 1);
assertThat(redisStats.getKeyspaceHits())
- .isEqualTo(0);
+ .isEqualTo(preTestKeySpaceHits);
assertThat(redisStats.getKeyspaceMisses())
- .isEqualTo(1);
+ .isEqualTo(preTestKeySpaceMisses + 1);
}
@Test
@@ -170,9 +187,9 @@
jedis.getSet(EXISTING_STRING_KEY, "New_Value");
assertThat(redisStats.getKeyspaceHits())
- .isEqualTo(1);
+ .isEqualTo(preTestKeySpaceHits + 1);
assertThat(redisStats.getKeyspaceMisses())
- .isEqualTo(0);
+ .isEqualTo(preTestKeySpaceMisses);
}
@Test
@@ -180,9 +197,9 @@
jedis.getSet("Nonexistent_Key", "FakeValue");
assertThat(redisStats.getKeyspaceHits())
- .isEqualTo(0);
+ .isEqualTo(preTestKeySpaceHits);
assertThat(redisStats.getKeyspaceMisses())
- .isEqualTo(1);
+ .isEqualTo(preTestKeySpaceMisses + 1);
}
@Test
@@ -190,9 +207,9 @@
jedis.strlen(EXISTING_STRING_KEY);
assertThat(redisStats.getKeyspaceHits())
- .isEqualTo(1);
+ .isEqualTo(preTestKeySpaceHits + 1);
assertThat(redisStats.getKeyspaceMisses())
- .isEqualTo(0);
+ .isEqualTo(preTestKeySpaceMisses);
}
@Test
@@ -200,9 +217,9 @@
jedis.strlen(NONEXISTENT_KEY);
assertThat(redisStats.getKeyspaceHits())
- .isEqualTo(0);
+ .isEqualTo(preTestKeySpaceHits);
assertThat(redisStats.getKeyspaceMisses())
- .isEqualTo(1);
+ .isEqualTo(preTestKeySpaceMisses + 1);
}
@Test
@@ -210,9 +227,9 @@
jedis.mget(EXISTING_STRING_KEY, "Nonexistent_Key");
assertThat(redisStats.getKeyspaceHits())
- .isEqualTo(1);
+ .isEqualTo(preTestKeySpaceHits + 1);
assertThat(redisStats.getKeyspaceMisses())
- .isEqualTo(1);
+ .isEqualTo(preTestKeySpaceMisses + 1);
}
@Test
@@ -220,9 +237,9 @@
jedis.bitop(BitOP.AND, EXISTING_STRING_KEY, EXISTING_STRING_KEY, "Nonexistent_Key");
assertThat(redisStats.getKeyspaceHits())
- .isEqualTo(0 + 2);
+ .isEqualTo(preTestKeySpaceHits + 2);
assertThat(redisStats.getKeyspaceMisses())
- .isEqualTo(1);
+ .isEqualTo(preTestKeySpaceMisses + 1);
}
@Test
@@ -230,9 +247,9 @@
jedis.bitcount(EXISTING_STRING_KEY);
assertThat(redisStats.getKeyspaceHits())
- .isEqualTo(1);
+ .isEqualTo(preTestKeySpaceHits + 1);
assertThat(redisStats.getKeyspaceMisses())
- .isEqualTo(0);
+ .isEqualTo(preTestKeySpaceMisses);
}
@Test
@@ -240,9 +257,9 @@
jedis.bitcount("Nonexistent_Key");
assertThat(redisStats.getKeyspaceHits())
- .isEqualTo(0);
+ .isEqualTo(preTestKeySpaceHits);
assertThat(redisStats.getKeyspaceMisses())
- .isEqualTo(1);
+ .isEqualTo(preTestKeySpaceMisses + 1);
}
@Test
@@ -250,9 +267,9 @@
jedis.bitpos(EXISTING_STRING_KEY, true);
assertThat(redisStats.getKeyspaceHits())
- .isEqualTo(1);
+ .isEqualTo(preTestKeySpaceHits + 1);
assertThat(redisStats.getKeyspaceMisses())
- .isEqualTo(0);
+ .isEqualTo(preTestKeySpaceMisses);
}
@Test
@@ -260,9 +277,9 @@
jedis.bitpos("Nonexistent_Key", true);
assertThat(redisStats.getKeyspaceHits())
- .isEqualTo(0);
+ .isEqualTo(preTestKeySpaceHits);
assertThat(redisStats.getKeyspaceMisses())
- .isEqualTo(1);
+ .isEqualTo(preTestKeySpaceMisses + 1);
}
@Test
@@ -270,9 +287,9 @@
jedis.hget(EXISTING_HASH_KEY, "Field1");
assertThat(redisStats.getKeyspaceHits())
- .isEqualTo(1);
+ .isEqualTo(preTestKeySpaceHits + 1);
assertThat(redisStats.getKeyspaceMisses())
- .isEqualTo(0);
+ .isEqualTo(preTestKeySpaceMisses);
}
@Test
@@ -280,9 +297,9 @@
jedis.hget("Nonexistent_Hash", "Field1");
assertThat(redisStats.getKeyspaceHits())
- .isEqualTo(0);
+ .isEqualTo(preTestKeySpaceHits);
assertThat(redisStats.getKeyspaceMisses())
- .isEqualTo(1);
+ .isEqualTo(preTestKeySpaceMisses + 1);
}
@Test
@@ -290,9 +307,9 @@
jedis.smembers(EXISTING_SET_KEY_1);
assertThat(redisStats.getKeyspaceHits())
- .isEqualTo(1);
+ .isEqualTo(preTestKeySpaceHits + 1);
assertThat(redisStats.getKeyspaceMisses())
- .isEqualTo(0);
+ .isEqualTo(preTestKeySpaceMisses);
}
@Test
@@ -300,9 +317,9 @@
jedis.smembers("Nonexistent_Set");
assertThat(redisStats.getKeyspaceHits())
- .isEqualTo(0);
+ .isEqualTo(preTestKeySpaceHits);
assertThat(redisStats.getKeyspaceMisses())
- .isEqualTo(1);
+ .isEqualTo(preTestKeySpaceMisses + 1);
}
@Test
@@ -314,9 +331,9 @@
"Nonexistent_Set");
assertThat(redisStats.getKeyspaceHits())
- .isEqualTo(0 + 2);
+ .isEqualTo(preTestKeySpaceHits + 2);
assertThat(redisStats.getKeyspaceMisses())
- .isEqualTo(1);
+ .isEqualTo(preTestKeySpaceMisses + 1);
}
@Test
@@ -324,9 +341,9 @@
jedis.exists(EXISTING_STRING_KEY);
assertThat(redisStats.getKeyspaceHits())
- .isEqualTo(1);
+ .isEqualTo(preTestKeySpaceHits + 1);
assertThat(redisStats.getKeyspaceMisses())
- .isEqualTo(0);
+ .isEqualTo(preTestKeySpaceMisses);
}
@Test
@@ -334,9 +351,9 @@
jedis.exists(NONEXISTENT_KEY);
assertThat(redisStats.getKeyspaceHits())
- .isEqualTo(0);
+ .isEqualTo(preTestKeySpaceHits);
assertThat(redisStats.getKeyspaceMisses())
- .isEqualTo(1);
+ .isEqualTo(preTestKeySpaceMisses + 1);
}
@Test
@@ -344,9 +361,9 @@
jedis.type(EXISTING_STRING_KEY);
assertThat(redisStats.getKeyspaceHits())
- .isEqualTo(1);
+ .isEqualTo(preTestKeySpaceHits + 1);
assertThat(redisStats.getKeyspaceMisses())
- .isEqualTo(0);
+ .isEqualTo(preTestKeySpaceMisses);
}
@Test
@@ -354,9 +371,9 @@
jedis.type(NONEXISTENT_KEY);
assertThat(redisStats.getKeyspaceHits())
- .isEqualTo(0);
+ .isEqualTo(preTestKeySpaceHits);
assertThat(redisStats.getKeyspaceMisses())
- .isEqualTo(1);
+ .isEqualTo(preTestKeySpaceMisses + 1);
}
@Test
@@ -364,9 +381,9 @@
jedis.ttl(EXISTING_STRING_KEY);
assertThat(redisStats.getKeyspaceHits())
- .isEqualTo(1);
+ .isEqualTo(preTestKeySpaceHits + 1);
assertThat(redisStats.getKeyspaceMisses())
- .isEqualTo(0);
+ .isEqualTo(preTestKeySpaceMisses);
}
@Test
@@ -374,9 +391,9 @@
jedis.ttl(NONEXISTENT_KEY);
assertThat(redisStats.getKeyspaceHits())
- .isEqualTo(0);
+ .isEqualTo(preTestKeySpaceHits);
assertThat(redisStats.getKeyspaceMisses())
- .isEqualTo(1);
+ .isEqualTo(preTestKeySpaceMisses + 1);
}
@Test
@@ -384,8 +401,9 @@
long initialCommandsProcessed = redisStats.getCommandsProcessed();
jedis.ttl("key");
- assertThat(redisStats.getCommandsProcessed())
- .isEqualTo(initialCommandsProcessed + 1);
+ GeodeAwaitility.await().atMost(Duration.ofSeconds(5))
+ .untilAsserted(() -> assertThat(redisStats.getCommandsProcessed())
+ .isEqualTo(initialCommandsProcessed + 1));
}
@Test
@@ -468,33 +486,33 @@
}
-
// ######################### Clients Section #################################
@Test
public void clientsStat_withConnectAndClose_isCorrect() {
- jedis = new Jedis("localhost", server.getPort(), TIMEOUT);
- jedis.ping();
+ Jedis jedis2 = new Jedis("localhost", server.getPort(), TIMEOUT);
+ jedis2.ping();
- assertThat(redisStats.getConnectedClients()).isEqualTo(1);
+ assertThat(redisStats.getConnectedClients()).isEqualTo(preTestConnectedClients + 1);
- jedis.close();
+ jedis2.close();
GeodeAwaitility.await().atMost(Duration.ofSeconds(2))
- .untilAsserted(() -> assertThat(redisStats.getConnectedClients()).isEqualTo(0));
+ .untilAsserted(
+ () -> assertThat(redisStats.getConnectedClients()).isEqualTo(preTestConnectedClients));
}
@Test
- public void connectionsReceivedStat_shouldIncrement_WhenNewConnectionOccurs() {
+ public void totalConnectionsReceivedStat_shouldIncrement_WhenNewConnectionOccurs() {
- jedis = new Jedis("localhost", server.getPort(), TIMEOUT);
- jedis.ping();
+ Jedis jedis2 = new Jedis("localhost", server.getPort(), TIMEOUT);
+ jedis2.ping();
- assertThat(redisStats.getConnectionsReceived()).isEqualTo(1);
+ assertThat(redisStats.getTotalConnectionsReceived()).isEqualTo(preTestConnectionsReceived + 1);
- jedis.close();
+ jedis2.close();
- assertThat(redisStats.getConnectionsReceived()).isEqualTo(1);
+ assertThat(redisStats.getTotalConnectionsReceived()).isEqualTo(preTestConnectionsReceived + 1);
}
// ######################## Server Section ################
@@ -525,7 +543,6 @@
.isEqualTo(expectedDays);
}
-
public long getStartTime() {
return START_TIME;
}
diff --git a/geode-redis/src/main/java/org/apache/geode/redis/internal/RedisStats.java b/geode-redis/src/main/java/org/apache/geode/redis/internal/RedisStats.java
index 8f502d5..47e1396 100644
--- a/geode-redis/src/main/java/org/apache/geode/redis/internal/RedisStats.java
+++ b/geode-redis/src/main/java/org/apache/geode/redis/internal/RedisStats.java
@@ -52,9 +52,8 @@
private static final int expirationsId;
private static final int expirationTimeId;
private final AtomicLong commandsProcessed = new AtomicLong();
- private final AtomicLong opsPerSecond = new AtomicLong();
private final AtomicLong totalNetworkBytesRead = new AtomicLong();
- private final AtomicLong connectionsReceived = new AtomicLong();
+ private final AtomicLong totalConnectionsReceived = new AtomicLong();
private final AtomicLong expirations = new AtomicLong();
private final AtomicLong keyspaceHits = new AtomicLong();
private final AtomicLong keyspaceMisses = new AtomicLong();
@@ -114,22 +113,6 @@
perSecondExecutor = startPerSecondUpdater();
}
- public void clearAllStats() {
- commandsProcessed.set(0);
- opsPerSecond.set(0);
- totalNetworkBytesRead.set(0);
- connectionsReceived.set(0);
- expirations.set(0);
- keyspaceHits.set(0);
- keyspaceMisses.set(0);
- stats.setLong(clientId, 0);
- stats.setLong(passiveExpirationChecksId, 0);
- stats.setLong(passiveExpirationCheckTimeId, 0);
- stats.setLong(passiveExpirationsId, 0);
- stats.setLong(expirationsId, 0);
- stats.setLong(expirationTimeId, 0);
- }
-
private static void fillListWithCompletedCommandDescriptors(StatisticsTypeFactory f,
ArrayList<StatisticDescriptor> descriptorList) {
for (RedisCommandType command : RedisCommandType.values()) {
@@ -211,7 +194,7 @@
}
public void addClient() {
- connectionsReceived.incrementAndGet();
+ totalConnectionsReceived.incrementAndGet();
stats.incLong(clientId, 1);
}
@@ -219,8 +202,8 @@
stats.incLong(clientId, -1);
}
- public long getConnectionsReceived() {
- return connectionsReceived.get();
+ public long getTotalConnectionsReceived() {
+ return totalConnectionsReceived.get();
}
public long getConnectedClients() {
diff --git a/geode-redis/src/main/java/org/apache/geode/redis/internal/executor/server/InfoExecutor.java b/geode-redis/src/main/java/org/apache/geode/redis/internal/executor/server/InfoExecutor.java
index 45337bb..bba1b22 100644
--- a/geode-redis/src/main/java/org/apache/geode/redis/internal/executor/server/InfoExecutor.java
+++ b/geode-redis/src/main/java/org/apache/geode/redis/internal/executor/server/InfoExecutor.java
@@ -101,7 +101,7 @@
"instantaneous_ops_per_sec:" + redisStats.getOpsPerformedOverLastSecond() + "\r\n" +
"total_net_input_bytes:" + redisStats.getTotalNetworkBytesRead() + "\r\n" +
"instantaneous_input_kbps:" + instantaneous_input_kbps + "\r\n" +
- "total_connections_received:" + redisStats.getConnectionsReceived() + "\r\n" +
+ "total_connections_received:" + redisStats.getTotalConnectionsReceived() + "\r\n" +
"keyspace_hits:" + redisStats.getKeyspaceHits() + "\r\n" +
"keyspace_misses:" + redisStats.getKeyspaceMisses() + "\r\n" +
"evicted_keys:0\r\n" +