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" +