veghlaci05 commented on code in PR #3864:
URL: https://github.com/apache/hive/pull/3864#discussion_r1060420473
##########
ql/src/java/org/apache/hadoop/hive/ql/txn/compactor/MetaStoreCompactorThread.java:
##########
@@ -133,4 +138,14 @@ protected static long updateCycleDurationMetric(String
metric, long startedAt) {
}
return 0;
}
+ <T extends TBase<T,?>> T computeIfAbsent(Optional<Cache<String, TBase>>
metaCache, String key, Callable<T> callable) throws Exception {
Review Comment:
Nit: new line between methods
##########
ql/src/test/org/apache/hadoop/hive/ql/txn/compactor/TestCleaner.java:
##########
@@ -1093,5 +1095,34 @@ public void testReady() throws Exception {
Assert.assertEquals(TxnStore.CLEANING_RESPONSE,
rsp.getCompacts().get(0).getState());
}
+ @Test
+ public void testMetaCache() throws Exception {
+ conf.setBoolVar(HIVE_COMPACTOR_DELAYED_CLEANUP_ENABLED, false);
+
+ Table t = newTable("default", "retry_test", false);
+
+ addBaseFile(t, null, 20L, 20);
+ addDeltaFile(t, null, 21L, 22L, 2);
+ addDeltaFile(t, null, 23L, 24L, 2);
+ burnThroughTransactions("default", "retry_test", 25);
+
+ CompactionRequest rqst = new CompactionRequest("default", "retry_test",
CompactionType.MAJOR);
+ long compactTxn = compactInTxn(rqst);
+ addBaseFile(t, null, 25L, 25, compactTxn);
+
+ //Prevent cleaner from marking the compaction as cleaned
+ TxnStore mockedHandler = spy(txnHandler);
+ doThrow(new
RuntimeException()).when(mockedHandler).markCleaned(nullable(CompactionInfo.class));
+ Cleaner cleaner = Mockito.spy(new Cleaner());
+ cleaner.setConf(conf);
+ cleaner.init(new AtomicBoolean(true));
+ cleaner.run();
+
+ ShowCompactResponse rsp = txnHandler.showCompact(new ShowCompactRequest());
+ List<ShowCompactResponseElement> compacts = rsp.getCompacts();
+ Assert.assertEquals(1, compacts.size());
+ Mockito.verify(cleaner, times(1)).resolveTable(Mockito.any());
Review Comment:
For a single run without removing any files, `resolveTable` will be called
only once anyways so this test does not ensure that the cache is used. You
should run cleaning for the **same table** twice and assert that
`resolveTable` called only once, while `computeIfAbsent` called twice.
--
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]