From 8deb7844196cde54d84a5788d39951b20a5addc7 Mon Sep 17 00:00:00 2001 From: Reinhard Pointner Date: Tue, 5 Feb 2019 12:57:04 +0700 Subject: [PATCH] Fix regression issue: com.google.common.cache.CacheLoader$InvalidCacheLoadException: CacheLoader returned null for key --- .../filebot/similarity/EpisodeMatcher.java | 31 ++++++++++--------- 1 file changed, 16 insertions(+), 15 deletions(-) diff --git a/source/net/filebot/similarity/EpisodeMatcher.java b/source/net/filebot/similarity/EpisodeMatcher.java index 06d47f6f..f12d37ad 100644 --- a/source/net/filebot/similarity/EpisodeMatcher.java +++ b/source/net/filebot/similarity/EpisodeMatcher.java @@ -2,12 +2,12 @@ package net.filebot.similarity; import static java.util.Arrays.*; import static java.util.Collections.*; +import static net.filebot.Logging.*; import static net.filebot.web.EpisodeUtilities.*; import java.io.File; import java.util.ArrayList; import java.util.Collection; -import java.util.HashMap; import java.util.HashSet; import java.util.IdentityHashMap; import java.util.List; @@ -15,7 +15,13 @@ import java.util.Map; import java.util.Map.Entry; import java.util.Objects; import java.util.Set; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.TimeUnit; import java.util.function.Function; +import java.util.logging.Level; + +import com.google.common.cache.Cache; +import com.google.common.cache.CacheBuilder; import net.filebot.media.SmartSeasonEpisodeMatcher; import net.filebot.similarity.SeasonEpisodeMatcher.SxE; @@ -85,23 +91,18 @@ public class EpisodeMatcher extends Matcher { } private final SeasonEpisodeMatcher seasonEpisodeMatcher = new SmartSeasonEpisodeMatcher(SeasonEpisodeMatcher.LENIENT_SANITY, false); - private final Map> transformCache = synchronizedMap(new HashMap>(64, 4)); + private final Cache> parseEpisodeIdentiferCache = CacheBuilder.newBuilder().expireAfterAccess(5, TimeUnit.MINUTES).build(); private Set parseEpisodeIdentifer(File file) { - Set result = transformCache.get(file); - if (result != null) { - return result; + try { + return parseEpisodeIdentiferCache.get(file, () -> { + List sxe = seasonEpisodeMatcher.match(file.getName()); + return sxe == null ? emptySet() : new HashSet(sxe); + }); + } catch (ExecutionException e) { + debug.log(Level.SEVERE, e, e::toString); } - - List sxe = seasonEpisodeMatcher.match(file.getName()); - if (sxe != null) { - result = new HashSet(sxe); - } else { - result = emptySet(); - } - - transformCache.put(file, result); - return result; + return emptySet(); } private Set normalizeIdentifierSet(Set numbers) {