kbendick commented on a change in pull request #3801:
URL: https://github.com/apache/iceberg/pull/3801#discussion_r774843656



##########
File path: core/src/test/java/org/apache/iceberg/hadoop/TestCachingCatalog.java
##########
@@ -252,9 +254,9 @@ public void 
testCacheExpirationEagerlyRemovesMetadataTables() throws IOException
     ticker.advance(HALF_OF_EXPIRATION);
     
Assertions.assertThat(catalog.cache().asMap()).doesNotContainKey(tableIdent);
 
-    Arrays.stream(metadataTables(tableIdent)).forEach(metadataTable ->
-        Assert.assertFalse("When a data table expires, its metadata tables 
should expire regardless of age",
-            catalog.cache().asMap().containsKey(metadataTable)));
+    // Removal of metadata tables from cache is async, use awaitility
+    await().untilAsserted(() ->
+        
Assertions.assertThat(catalog.cache().asMap()).doesNotContainKeys(metadataTables(tableIdent)));

Review comment:
       Side Note: Since you're introducing `Awaitility` (which in general I 
think is a good idea), we should update the rest of the tests to use 
`Awaitility` and remove the call to `cleanUp` in the `TestableCachingCatalog`, 
which was added to handle the async expiration.
   
   
https://github.com/apache/iceberg/blob/9c3e340cd67699c3d2499762d794ab1bc1ee7f45/core/src/test/java/org/apache/iceberg/TestableCachingCatalog.java#L46-L51
    
   This larger refactor to using `Awaitility` entirely should be done in a 
separate PR though, as this fix is important and I'd like to get this PR in as 
soon as possible so people can use the updated snapshot and we'll continue to 
see if the race condition is fixed.
   
   The use of awaitility is fine here though, but I was curious why it was 
needed so I went looking through the `Caffeine` issues and update notes and 
found the likely cause. Updating Caffeine to 
[2.8.5](https://github.com/ben-manes/caffeine/releases/tag/v2.8.5) would make 
this change not needed.
   
   The version bump says `Fixed expiration delay for scheduled cleanup` which 
must be why this test started failing with the new write path into the cache. I 
only mention it as I was very curious why this particular change was needed 
given the existing calls to `cleanUp`.
   
   I also have another PR open to upgrade the `caffeine` library version, as 
there are some important bug fixes for us and since we've been mucking around 
in here, we might as well upgrade instead of stay behind. 
https://github.com/apache/iceberg/pull/3803
   
   All that said, I think the use of `Awaitility` here is fine. =)
   
   Others might have different opinions based on a "smallest possible diff" 
principal, where we'd introduce `Awaitility` in one PR by itself to help people 
who backport, but I'm cool either way.
   
   Thanks again for all your work on this!




-- 
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]

Reply via email to