ben-manes commented on code in PR #4551: URL: https://github.com/apache/accumulo/pull/4551#discussion_r1597496799
########## server/tserver/src/main/java/org/apache/accumulo/tserver/ScanServer.java: ########## @@ -246,9 +246,30 @@ public ScanServer(ScanServerOpts opts, String[] args) { LOG.warn( "Tablet metadata caching less than one minute, may cause excessive scans on metadata table."); } - tabletMetadataCache = - Caffeine.newBuilder().expireAfterWrite(cacheExpiration, TimeUnit.MILLISECONDS) - .scheduler(Scheduler.systemScheduler()).recordStats().build(tabletMetadataLoader); + + // Get the cache refresh percentage property + // Value must be less than 100% as 100 or over would effectively disable it + double cacheRefreshPercentage = + getConfiguration().getFraction(Property.SSERV_CACHED_TABLET_METADATA_REFRESH_PERCENT); + Preconditions.checkArgument(cacheRefreshPercentage < cacheExpiration, + "Tablet metadata cache refresh percentage is '%s' but must be less than 1", + cacheRefreshPercentage); + + var builder = Caffeine.newBuilder().expireAfterWrite(cacheExpiration, TimeUnit.MILLISECONDS) + .scheduler(Scheduler.systemScheduler()).recordStats(); + if (cacheRefreshPercentage > 0) { + // Compute the refresh time as a percentage of the expiration time + // Cache hits after this time, but before expiration, will trigger a background + // non-blocking refresh of the entry so future cache hits get an updated entry + // without having to block for a refresh + long cacheRefresh = (long) (cacheExpiration * cacheRefreshPercentage); + LOG.debug("Tablet metadata refresh percentage set to {}, refresh time set to {} ms", + cacheRefreshPercentage, cacheRefresh); + builder.refreshAfterWrite(cacheRefresh, TimeUnit.MILLISECONDS); Review Comment: np! I really like having the console logger setup too just as a failsafe from someone naively using `System.out` or `e.printStackTrace()`. There are linters for that, but still nice to have as a failsafe for 3rd party code. -- 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: notifications-unsubscr...@accumulo.apache.org For queries about this service, please contact Infrastructure at: us...@infra.apache.org