summaryrefslogtreecommitdiffstats
path: root/container-search
diff options
context:
space:
mode:
authorHenning Baldersheim <balder@yahoo-inc.com>2018-02-02 13:21:08 +0100
committerHenning Baldersheim <balder@yahoo-inc.com>2018-02-02 13:21:08 +0100
commit094b9d8647b8ca7ff8478973c3cc14814606fdf1 (patch)
tree105fcb5ef04dbce4b11de1ac9b79ed632c467aac /container-search
parent0e50a4cb9c597cb97170d49b521d0d5ee4e38ec2 (diff)
Use a ResultObject to avoid using Exception for value passing.
Diffstat (limited to 'container-search')
-rw-r--r--container-search/src/main/java/com/yahoo/prelude/fastsearch/FastSearcher.java7
-rw-r--r--container-search/src/main/java/com/yahoo/prelude/fastsearch/VespaBackEndSearcher.java60
-rw-r--r--container-search/src/main/java/com/yahoo/vespa/streamingvisitors/VdsStreamingSearcher.java7
3 files changed, 47 insertions, 27 deletions
diff --git a/container-search/src/main/java/com/yahoo/prelude/fastsearch/FastSearcher.java b/container-search/src/main/java/com/yahoo/prelude/fastsearch/FastSearcher.java
index 52650279ad5..6ce08c75dd4 100644
--- a/container-search/src/main/java/com/yahoo/prelude/fastsearch/FastSearcher.java
+++ b/container-search/src/main/java/com/yahoo/prelude/fastsearch/FastSearcher.java
@@ -317,7 +317,12 @@ public class FastSearcher extends VespaBackEndSearcher {
int skippedHits;
try {
- skippedHits = fillHits(result, 0, receivedPackets, summaryClass);
+ FillHitsResult fillHitsResult = fillHits(result, 0, receivedPackets, summaryClass);
+ skippedHits = fillHitsResult.skippedHits;
+ if (fillHitsResult.error != null) {
+ result.hits().addError(ErrorMessage.createTimeout(fillHitsResult.error));
+ return;
+ }
} catch (TimeoutException e) {
result.hits().addError(ErrorMessage.createTimeout(e.getMessage()));
return;
diff --git a/container-search/src/main/java/com/yahoo/prelude/fastsearch/VespaBackEndSearcher.java b/container-search/src/main/java/com/yahoo/prelude/fastsearch/VespaBackEndSearcher.java
index 51d50230ddc..4c0f3003981 100644
--- a/container-search/src/main/java/com/yahoo/prelude/fastsearch/VespaBackEndSearcher.java
+++ b/container-search/src/main/java/com/yahoo/prelude/fastsearch/VespaBackEndSearcher.java
@@ -471,29 +471,44 @@ public abstract class VespaBackEndSearcher extends PingableSearcher {
}
}
- private boolean fillHit(FastHit hit, DocsumPacket packet, String summaryClass) throws TimeoutException {
+ static private class FillHitResult {
+ final boolean ok;
+ final String error;
+ FillHitResult(boolean ok) {
+ this(ok, null);
+ }
+ FillHitResult(boolean ok, String error) {
+ this.ok = ok;
+ this.error = error;
+ }
+ }
+ private FillHitResult fillHit(FastHit hit, DocsumPacket packet, String summaryClass) {
if (packet != null) {
byte[] docsumdata = packet.getData();
if (docsumdata.length > 0) {
- String error = decodeSummary(summaryClass, hit, docsumdata);
- if (error != null) {
- throw new TimeoutException(error);
- }
- return true;
+ return new FillHitResult(true, decodeSummary(summaryClass, hit, docsumdata));
}
}
- return false;
+ return new FillHitResult(false);
}
+ static protected class FillHitsResult {
+ public final int skippedHits;
+ public final String error;
+ FillHitsResult(int skippedHits, String error) {
+ this.skippedHits = skippedHits;
+ this.error = error;
+ }
+ }
/**
* Fills the hits.
*
* @return the number of hits that we did not return data for, i.e
* when things are working normally we return 0.
*/
- protected int fillHits(Result result, int packetIndex, Packet[] packets, String summaryClass) throws IOException {
+ protected FillHitsResult fillHits(Result result, int packetIndex, Packet[] packets, String summaryClass) throws IOException {
int skippedHits=0;
- TimeoutException lastException = null;
+ String lastError = null;
for (Iterator<Hit> i = hitIterator(result); i.hasNext();) {
Hit hit = i.next();
@@ -504,22 +519,19 @@ public abstract class VespaBackEndSearcher extends PingableSearcher {
DocsumPacket docsum = (DocsumPacket) packets[packetIndex];
packetIndex++;
- try {
- if (!fillHit(fastHit, docsum, summaryClass))
- skippedHits++;
- } catch (TimeoutException e) {
- result.hits().addError(ErrorMessage.createTimeout(e.getMessage()));
+ FillHitResult fr = fillHit(fastHit, docsum, summaryClass);
+ if ( ! fr.ok ) {
+ skippedHits++;
+ }
+ if (fr.error != null) {
+ result.hits().addError(ErrorMessage.createTimeout(fr.error));
skippedHits++;
- lastException = e;
+ lastError = fr.error;
}
}
}
result.hits().setSorted(false);
- if (lastException != null) {
- throw lastException;
- }
-
- return skippedHits;
+ return new FillHitsResult(skippedHits, lastError);
}
/**
@@ -612,11 +624,9 @@ public abstract class VespaBackEndSearcher extends PingableSearcher {
FastHit fastHit = (FastHit) hit;
DocsumPacketKey key = new DocsumPacketKey(fastHit.getGlobalId(), fastHit.getPartId(), summaryClass);
- try {
- if (fillHit(fastHit, (DocsumPacket) packetWrapper.getPacket(key), summaryClass)) {
- fastHit.setCached(true);
- }
- } catch (TimeoutException e) { }
+ if (fillHit(fastHit, (DocsumPacket) packetWrapper.getPacket(key), summaryClass).ok) {
+ fastHit.setCached(true);
+ }
}
}
diff --git a/container-search/src/main/java/com/yahoo/vespa/streamingvisitors/VdsStreamingSearcher.java b/container-search/src/main/java/com/yahoo/vespa/streamingvisitors/VdsStreamingSearcher.java
index fbdb4511964..4ebe29cdacd 100644
--- a/container-search/src/main/java/com/yahoo/vespa/streamingvisitors/VdsStreamingSearcher.java
+++ b/container-search/src/main/java/com/yahoo/vespa/streamingvisitors/VdsStreamingSearcher.java
@@ -194,7 +194,12 @@ public class VdsStreamingSearcher extends VespaBackEndSearcher {
int skippedHits;
try {
- skippedHits = fillHits(result, 0, summaryPackets, query.getPresentation().getSummary());
+ FillHitsResult fillHitsResult = fillHits(result, 0, summaryPackets, query.getPresentation().getSummary());
+ skippedHits = fillHitsResult.skippedHits;
+ if (fillHitsResult.error != null) {
+ result.hits().addError(ErrorMessage.createTimeout(fillHitsResult.error));
+ return result;
+ }
} catch (TimeoutException e) {
result.hits().addError(ErrorMessage.createTimeout(e.getMessage()));
return result;