David Smiley created SOLR-12374:
-----------------------------------
Summary: Add SolrCore.withSearcher(lambda accepting
SolrIndexSearcher)
Key: SOLR-12374
URL: https://issues.apache.org/jira/browse/SOLR-12374
Project: Solr
Issue Type: Improvement
Security Level: Public (Default Security Level. Issues are Public)
Reporter: David Smiley
Assignee: David Smiley
I propose adding the following to SolrCore:
{code:java}
/**
* 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();
}
}
{code}
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.
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]