Details
-
Improvement
-
Status: Closed
-
Minor
-
Resolution: Fixed
-
None
-
None
-
None
Description
I propose adding the following to SolrCore:
/** * Executes the lambda with the {@link SolrIndexSearcher}. This is more convenience than using * {@link #getSearcher()} since there is no ref-counting business to worry about. * Example: * <pre class="prettyprint"> * IndexReader reader = h.getCore().withSearcher(SolrIndexSearcher::getIndexReader); * </pre> */ @SuppressWarnings("unchecked") public <R> R withSearcher(Function<SolrIndexSearcher,R> lambda) { final RefCounted<SolrIndexSearcher> refCounted = getSearcher(); try { return lambda.apply(refCounted.get()); } finally { refCounted.decref(); } }
This is a nice tight convenience method, avoiding the clumsy RefCounted API which is easy to accidentally incorrectly use – see https://issues.apache.org/jira/browse/SOLR-11616?focusedCommentId=16477719&page=com.atlassian.jira.plugin.system.issuetabpanels%3Acomment-tabpanel#comment-16477719
I guess my only (small) concern is if hypothetically you might make the lambda short because it's easy to do that (see the one-liner example above) but the object you return that you're interested in (say IndexReader) could potentially become invalid if the SolrIndexSearcher closes. But I think/hope that's impossible normally based on when this getSearcher() used? I could at least add a warning to the docs.