virajjasani commented on code in PR #5497:
URL: https://github.com/apache/hadoop/pull/5497#discussion_r1148404105
##########
hadoop-hdfs-project/hadoop-hdfs-rbf/src/test/java/org/apache/hadoop/hdfs/server/federation/store/driver/TestStateStoreDriverBase.java:
##########
@@ -574,6 +580,38 @@ private static Map<String, Class<?>> getFields(BaseRecord
record) {
return getters;
}
+ public long getMountTableCacheLoadSamples(StateStoreDriver driver) throws
IOException {
+ final MutableRate mountTableCache = getMountTableCache(driver);
+ return mountTableCache.lastStat().numSamples();
+ }
+
+ private static MutableRate getMountTableCache(StateStoreDriver driver)
throws IOException {
+ StateStoreMetrics metrics = stateStore.getMetrics();
+ final Query<MountTable> query = new Query<>(MountTable.newInstance());
+ driver.getMultiple(MountTable.class, query);
+ final Map<String, MutableRate> cacheLoadMetrics =
metrics.getCacheLoadMetrics();
+ final MutableRate mountTableCache =
cacheLoadMetrics.get("CacheMountTableLoad");
+ assertNotNull("CacheMountTableLoad should be present in the state store
metrics",
+ mountTableCache);
+ return mountTableCache;
+ }
+
+ public void testCacheLoadMetrics(StateStoreDriver driver, long numRefresh)
+ throws IOException, IllegalArgumentException {
+ final MutableRate mountTableCache = getMountTableCache(driver);
+ // CacheMountTableLoadNumOps
+ final long mountTableCacheLoadNumOps =
getMountTableCacheLoadSamples(driver);
+ assertEquals("Num of samples collected should match", numRefresh,
mountTableCacheLoadNumOps);
+ // CacheMountTableLoadAvgTime ms
+ final double mountTableCacheLoadAvgTimeMs =
mountTableCache.lastStat().mean();
+ // 2 seconds is a high enough value for the test, hence we expect mount
table cache
+ // with very few entries to be loaded by this time duration, hence not
have this test result
+ // show flaky behavior.
+ assertTrue(
+ "Mean time duration for cache load is expected to be less than 2000
ms. Actual value: "
+ + mountTableCacheLoadAvgTimeMs, mountTableCacheLoadAvgTimeMs <
2000d);
+ }
Review Comment:
Oh for prod, I think we should be better with ms itself because even with
few entries I see at least some value in double for sure and that is always > 0
so I am sure we should be good there.
For test also, I just did more than 10 runs for each state store impl tests:
fs, dfs, zk. And we definitely have values greater than 0 but one time I saw
just 0.01d too hence I wonder Jenkins might get 0.0 too. Hence, let me go with
your suggestion for test:
> If only in test: May be have the default value as -1 and we can assert it
isn't -1 and we should be sorted, if it is -1 then things didin't work the way
we wanted.
Let me make this change
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]