Github user markap14 commented on a diff in the pull request:
https://github.com/apache/nifi/pull/2343#discussion_r157232403
--- Diff:
nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/RouteText.java
---
@@ -209,6 +215,30 @@
private volatile Map<Relationship, PropertyValue> propertyMap = new
HashMap<>();
private volatile Pattern groupingRegex = null;
+ @VisibleForTesting
+ final static int PATTERNS_CACHE_MAXIMUM_ENTRIES = 10;
+
+ /**
+ * LRU cache for the compiled patterns. The size of the cache is
determined by the value of
+ * {@link #PATTERNS_CACHE_MAXIMUM_ENTRIES}.
+ */
+ @VisibleForTesting
+ final ConcurrentMap<Pair<Boolean, String>, Pattern> patternsCache =
CacheBuilder.newBuilder()
+ .maximumSize(PATTERNS_CACHE_MAXIMUM_ENTRIES)
+ .<Pair<Boolean, String>, Pattern>build()
+ .asMap();
+
+ private final Function<Pair<Boolean, String>, Pattern> compileRegex =
ignoreCaseAndRegex -> {
--- End diff --
Again, I would avoid the use of the Pair<Boolean, String> here... and
really would probably avoid the Function all together. Since it seems to be
referenced only once, I'd prefer to instead just inline the use in the
cacheCompiledPattern method, so that there we could just call something like:
`return patternsCache.computeIfAbsent(key, toCompile -> ignoreCase ?
Pattern.compile(toCompile, Pattern.CASE_INSENSITIVE) :
Pattern.compile(toCompile));`
---