Skip to content

Commit

Permalink
SOLR-15635: introducing SRI.addCloseHookStrict()
Browse files Browse the repository at this point in the history
  • Loading branch information
ebs-mkhludnev committed Oct 30, 2021
1 parent 38db506 commit 36fd4aa
Show file tree
Hide file tree
Showing 2 changed files with 24 additions and 5 deletions.
25 changes: 22 additions & 3 deletions solr/core/src/java/org/apache/solr/request/SolrRequestInfo.java
Expand Up @@ -18,13 +18,15 @@

import javax.servlet.http.HttpServletRequest;
import java.io.Closeable;
import java.io.IOException;
import java.lang.invoke.MethodHandles;
import java.security.Principal;
import java.util.Date;
import java.util.Deque;
import java.util.LinkedList;
import java.util.List;
import java.util.TimeZone;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.atomic.AtomicReference;

import org.apache.solr.common.SolrException;
Expand Down Expand Up @@ -106,9 +108,7 @@ public static void reset() {

private static void closeHooks(SolrRequestInfo info) {
if (info.closeHooks != null) {
final List<Closeable> oldHooks = info.closeHooks;
info.closeHooks = null;
for (Closeable hook : oldHooks) {
for (Closeable hook : info.closeHooks) {
try {
hook.close();
} catch (Exception e) {
Expand Down Expand Up @@ -185,6 +185,11 @@ public void setResponseBuilder(ResponseBuilder rb) {
this.rb = rb;
}

/**
* adds the hook which will be invoked once or a few times per request completion
* @deprecated {@link #addCloseHookStrict(Closeable)}
* */
@Deprecated
public void addCloseHook(Closeable hook) {
// is this better here, or on SolrQueryRequest?
synchronized (this) {
Expand All @@ -194,6 +199,20 @@ public void addCloseHook(Closeable hook) {
closeHooks.add(hook);
}
}
/**
* adds the hook which will be invoked strictly once per request completion
* */
public void addCloseHookStrict(Closeable hook) {
addCloseHook(new Closeable() {
AtomicBoolean closed = new AtomicBoolean(false);
@Override
public void close() throws IOException {
if (closed.compareAndSet(false, true)) {
hook.close();
}
}
});
}

public SolrDispatchFilter.Action getAction() {
return action;
Expand Down
4 changes: 2 additions & 2 deletions solr/core/src/java/org/apache/solr/search/JoinQuery.java
Expand Up @@ -139,9 +139,9 @@ public JoinQueryWeight(SolrIndexSearcher searcher, ScoreMode scoreMode, float bo

if (fromRef != null) {
final RefCounted<SolrIndexSearcher> ref = fromRef;
info.addCloseHook(ref::decref);
info.addCloseHookStrict(ref::decref);
}
info.addCloseHook(fromCore);
info.addCloseHookStrict(fromCore);
}
this.toSearcher = searcher;
}
Expand Down

0 comments on commit 36fd4aa

Please sign in to comment.