From cea9affdd2a3fa775e8e3be0cc2123214b757af1 Mon Sep 17 00:00:00 2001 From: Sascha Wiedenfeld Date: Fri, 12 Jun 2020 14:15:13 +0200 Subject: [PATCH 1/2] Compile each file match pattern only once #1409 --- .../github/dockerjava/core/GoLangFileMatch.java | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/docker-java-core/src/main/java/com/github/dockerjava/core/GoLangFileMatch.java b/docker-java-core/src/main/java/com/github/dockerjava/core/GoLangFileMatch.java index 445c00120..281349096 100644 --- a/docker-java-core/src/main/java/com/github/dockerjava/core/GoLangFileMatch.java +++ b/docker-java-core/src/main/java/com/github/dockerjava/core/GoLangFileMatch.java @@ -6,8 +6,14 @@ import java.io.File; import java.util.ArrayList; import java.util.List; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.TimeUnit; import java.util.regex.Pattern; +import com.google.common.cache.CacheBuilder; +import com.google.common.cache.CacheLoader; +import com.google.common.cache.LoadingCache; +import com.google.common.util.concurrent.UncheckedExecutionException; import org.apache.commons.lang.StringUtils; import com.github.dockerjava.core.exception.GoLangFileMatchException; @@ -52,6 +58,11 @@ private GoLangFileMatch() { private static final String PATTERN_CHARS_TO_ESCAPE = "\\.[]{}()*+-?^$|"; + private static final LoadingCache PATTERN_CACHE = CacheBuilder.newBuilder() + .expireAfterWrite(1, TimeUnit.HOURS) // ttl 1 hour + .maximumSize(50) // max 50 entries + .build(CacheLoader.from(GoLangFileMatch::buildPattern)); + public static boolean match(List patterns, File file) { return !match(patterns, file.getPath()).isEmpty(); } @@ -74,7 +85,11 @@ public static List match(List patterns, String name) { } public static boolean match(String pattern, String name) { - return buildPattern(pattern).matcher(name).matches(); + try { + return PATTERN_CACHE.get(pattern).matcher(name).matches(); + } catch (ExecutionException | UncheckedExecutionException e) { + throw new GoLangFileMatchException(e.getCause().getMessage()); + } } private static Pattern buildPattern(String pattern) { From f54ffddc91185044c405b89e1efd771253376813 Mon Sep 17 00:00:00 2001 From: Sergei Egorov Date: Thu, 25 Jun 2020 07:57:58 +0200 Subject: [PATCH 2/2] Update GoLangFileMatch.java --- .../main/java/com/github/dockerjava/core/GoLangFileMatch.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docker-java-core/src/main/java/com/github/dockerjava/core/GoLangFileMatch.java b/docker-java-core/src/main/java/com/github/dockerjava/core/GoLangFileMatch.java index 281349096..094834cfd 100644 --- a/docker-java-core/src/main/java/com/github/dockerjava/core/GoLangFileMatch.java +++ b/docker-java-core/src/main/java/com/github/dockerjava/core/GoLangFileMatch.java @@ -59,8 +59,8 @@ private GoLangFileMatch() { private static final String PATTERN_CHARS_TO_ESCAPE = "\\.[]{}()*+-?^$|"; private static final LoadingCache PATTERN_CACHE = CacheBuilder.newBuilder() - .expireAfterWrite(1, TimeUnit.HOURS) // ttl 1 hour - .maximumSize(50) // max 50 entries + .expireAfterAccess(1, TimeUnit.HOURS) + .maximumSize(10_000) .build(CacheLoader.from(GoLangFileMatch::buildPattern)); public static boolean match(List patterns, File file) {