handle query cache misses with getOrFill and a lambda function
Project: http://git-wip-us.apache.org/repos/asf/jena/repo Commit: http://git-wip-us.apache.org/repos/asf/jena/commit/3570b14b Tree: http://git-wip-us.apache.org/repos/asf/jena/tree/3570b14b Diff: http://git-wip-us.apache.org/repos/asf/jena/diff/3570b14b Branch: refs/heads/JENA-507 Commit: 3570b14bd6913ecfbf268fdeba7781e8dd650dc5 Parents: f91818e Author: Osma Suominen <[email protected]> Authored: Sat Jan 9 11:05:47 2016 +0200 Committer: Osma Suominen <[email protected]> Committed: Mon Jan 11 09:27:13 2016 +0200 ---------------------------------------------------------------------- .../java/org/apache/jena/query/text/TextQueryPF.java | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/jena/blob/3570b14b/jena-text/src/main/java/org/apache/jena/query/text/TextQueryPF.java ---------------------------------------------------------------------- diff --git a/jena-text/src/main/java/org/apache/jena/query/text/TextQueryPF.java b/jena-text/src/main/java/org/apache/jena/query/text/TextQueryPF.java index 50350eb..9b30605 100644 --- a/jena-text/src/main/java/org/apache/jena/query/text/TextQueryPF.java +++ b/jena-text/src/main/java/org/apache/jena/query/text/TextQueryPF.java @@ -286,15 +286,15 @@ public class TextQueryPF extends PropertyFunctionBase { execCxt.getContext().put(cacheSymbol, queryCache); } - ListMultimap<String,TextHit> results = queryCache.getIfPresent(cacheKey) ; - if (results == null) { /* cache miss */ - List<TextHit> resultList = textIndex.query(property, queryString, limit) ; - results = LinkedListMultimap.create(); + final String queryStr = queryString; // final needed for the lambda function + ListMultimap<String,TextHit> results = queryCache.getOrFill(cacheKey, () -> { + List<TextHit> resultList = textIndex.query(property, queryStr, limit) ; + ListMultimap<String,TextHit> resultMultimap = LinkedListMultimap.create(); for (TextHit result : resultList) { - results.put(result.getNode().getURI(), result); + resultMultimap.put(result.getNode().getURI(), result); } - queryCache.put(cacheKey, results) ; - } + return resultMultimap; + }); return results; }
