package org.infinispan.server.hotrod;
import static org.infinispan.server.hotrod.Constants.INTELLIGENCE_HASH_DISTRIBUTION_AWARE;
import static org.infinispan.server.hotrod.OperationStatus.Success;
import static org.infinispan.server.hotrod.test.HotRodTestingUtil.assertKeyDoesNotExist;
import static org.infinispan.server.hotrod.test.HotRodTestingUtil.assertStatus;
import static org.infinispan.server.hotrod.test.HotRodTestingUtil.assertSuccess;
import static org.infinispan.server.hotrod.test.HotRodTestingUtil.hotRodCacheConfiguration;
import static org.infinispan.server.hotrod.test.HotRodTestingUtil.k;
import static org.infinispan.server.hotrod.test.HotRodTestingUtil.v;
import static org.testng.AssertJUnit.assertEquals;
import java.lang.reflect.Method;
import java.util.Map;
import org.infinispan.configuration.cache.CacheMode;
import org.infinispan.configuration.cache.ConfigurationBuilder;
import org.infinispan.server.hotrod.test.HotRodClient;
import org.infinispan.server.hotrod.test.HotRodMagicKeyGenerator;
import org.infinispan.server.hotrod.test.TestResponse;
import org.infinispan.stats.impl.AbstractClusterStats;
import org.infinispan.test.TestingUtil;
import org.testng.annotations.Test;
@Test(groups = "functional", testName = "server.hotrod.HotRodStatsClusterTest")
public class HotRodStatsClusterTest extends HotRodMultiNodeTest {
@Override
protected byte protocolVersion() {
return 24;
}
@Override
protected String cacheName() {
return "hotRodClusterStats";
}
@Override
protected ConfigurationBuilder createCacheConfig() {
ConfigurationBuilder config = hotRodCacheConfiguration(
getDefaultClusteredCacheConfig(CacheMode.DIST_SYNC, false));
config.jmxStatistics().enable();
config.clustering().hash().numOwners(1);
return config;
}
public void testClusterStats(Method m) throws Exception {
HotRodClient client1 = clients().get(0);
HotRodClient client2 = clients().get(1);
byte[] key1 = HotRodMagicKeyGenerator.newKey(cache(0, cacheName()));
byte[] value = v(m, "v1-");
TestResponse resp = client1.put(key1, 0, 0, value, INTELLIGENCE_HASH_DISTRIBUTION_AWARE, 0);
assertStatus(resp, Success);
assertSuccess(client1.get(key1, 0), value);
client1.remove(k(m));
Map<String, String> stats1 = client1.stats();
assertEquals(stats1.get("currentNumberOfEntries"), "1");
assertEquals(stats1.get("totalNumberOfEntries"), "1");
assertEquals(stats1.get("stores"), "1");
assertEquals(stats1.get("hits"), "1");
assertEquals(stats1.get("retrievals"), "1");
assertEquals(stats1.get("removeMisses"), "1");
assertEquals(stats1.get("globalCurrentNumberOfEntries"), "1");
assertEquals(stats1.get("globalStores"), "1");
assertEquals(stats1.get("globalHits"), "1");
assertEquals(stats1.get("globalRetrievals"), "1");
assertEquals(stats1.get("globalRemoveMisses"), "1");
Map<String, String> stats2 = client2.stats();
assertEquals(stats2.get("currentNumberOfEntries"), "0");
assertEquals(stats2.get("totalNumberOfEntries"), "0");
assertEquals(stats2.get("stores"), "0");
assertEquals(stats2.get("hits"), "0");
assertEquals(stats2.get("retrievals"), "0");
assertEquals(stats2.get("removeMisses"), "0");
assertEquals(stats2.get("globalCurrentNumberOfEntries"), "1");
assertEquals(stats2.get("globalStores"), "1");
assertEquals(stats2.get("globalHits"), "1");
assertEquals(stats2.get("globalRetrievals"), "1");
assertEquals(stats2.get("globalRemoveMisses"), "1");
TestingUtil.sleepThread(AbstractClusterStats.DEFAULT_STALE_STATS_THRESHOLD + 2000);
client1.remove(key1);
assertKeyDoesNotExist(client1.get(key1, 0));
stats1 = client1.stats();
assertEquals(stats1.get("misses"), "1");
assertEquals(stats1.get("removeHits"), "1");
assertEquals(stats1.get("globalMisses"), "1");
assertEquals(stats1.get("globalRemoveHits"), "1");
stats2 = client2.stats();
assertEquals(stats2.get("misses"), "0");
assertEquals(stats2.get("removeHits"), "0");
assertEquals(stats2.get("globalMisses"), "1");
assertEquals(stats2.get("globalRemoveHits"), "1");
}
}