aboutsummaryrefslogtreecommitdiffstats
path: root/container-search/src/main/java/com/yahoo/search/dispatch/rpc/RpcFillInvoker.java
diff options
context:
space:
mode:
Diffstat (limited to 'container-search/src/main/java/com/yahoo/search/dispatch/rpc/RpcFillInvoker.java')
-rw-r--r--container-search/src/main/java/com/yahoo/search/dispatch/rpc/RpcFillInvoker.java22
1 files changed, 14 insertions, 8 deletions
diff --git a/container-search/src/main/java/com/yahoo/search/dispatch/rpc/RpcFillInvoker.java b/container-search/src/main/java/com/yahoo/search/dispatch/rpc/RpcFillInvoker.java
index aa72823c809..712dca2c34a 100644
--- a/container-search/src/main/java/com/yahoo/search/dispatch/rpc/RpcFillInvoker.java
+++ b/container-search/src/main/java/com/yahoo/search/dispatch/rpc/RpcFillInvoker.java
@@ -7,6 +7,7 @@ import com.yahoo.compress.Compressor;
import com.yahoo.container.protect.Error;
import com.yahoo.data.access.Inspector;
import com.yahoo.data.access.slime.SlimeAdapter;
+import com.yahoo.prelude.Location;
import com.yahoo.prelude.fastsearch.DocumentDatabase;
import com.yahoo.prelude.fastsearch.FastHit;
import com.yahoo.prelude.fastsearch.TimeoutException;
@@ -42,10 +43,8 @@ public class RpcFillInvoker extends FillInvoker {
private final DocumentDatabase documentDb;
private final RpcResourcePool resourcePool;
-
private GetDocsumsResponseReceiver responseReceiver;
-
RpcFillInvoker(RpcResourcePool resourcePool, DocumentDatabase documentDb) {
this.documentDb = documentDb;
this.resourcePool = resourcePool;
@@ -54,12 +53,15 @@ public class RpcFillInvoker extends FillInvoker {
@Override
protected void sendFillRequest(Result result, String summaryClass) {
ListMap<Integer, FastHit> hitsByNode = hitsByNode(result);
+ Query query = result.getQuery();
CompressionType compression = CompressionType
- .valueOf(result.getQuery().properties().getString(RpcResourcePool.dispatchCompression, "LZ4").toUpperCase());
+ .valueOf(query.properties().getString(RpcResourcePool.dispatchCompression, "LZ4").toUpperCase());
- if (result.getQuery().getTraceLevel() >= 3)
- result.getQuery().trace("Sending " + hitsByNode.size() + " summary fetch RPC requests", 3);
+ if (query.getTraceLevel() >= 3) {
+ query.trace("Sending " + hitsByNode.size() + " summary fetch RPC requests", 3);
+ query.trace("RpcSlime: Not resending query during document summary fetching", 3);
+ }
responseReceiver = new GetDocsumsResponseReceiver(hitsByNode.size(), resourcePool.compressor(), result);
for (Map.Entry<Integer, List<FastHit>> nodeHits : hitsByNode.entrySet()) {
@@ -112,13 +114,14 @@ public class RpcFillInvoker extends FillInvoker {
Query query = result.getQuery();
String rankProfile = query.getRanking().getProfile();
byte[] serializedSlime = BinaryFormat
- .encode(toSlime(rankProfile, summaryClass, query.getModel().getDocumentDb(), query.getSessionId(), hits));
+ .encode(toSlime(rankProfile, summaryClass, query.getModel().getDocumentDb(),
+ query.getSessionId(), query.getRanking().getLocation(), hits));
double timeoutSeconds = ((double) query.getTimeLeft() - 3.0) / 1000.0;
Compressor.Compression compressionResult = resourcePool.compress(query, serializedSlime);
node.getDocsums(hits, compressionResult.type(), serializedSlime.length, compressionResult.data(), responseReceiver, timeoutSeconds);
}
- static private Slime toSlime(String rankProfile, String summaryClass, String docType, SessionId sessionId, List<FastHit> hits) {
+ static private Slime toSlime(String rankProfile, String summaryClass, String docType, SessionId sessionId, Location location, List<FastHit> hits) {
Slime slime = new Slime();
Cursor root = slime.setObject();
if (summaryClass != null) {
@@ -133,6 +136,9 @@ public class RpcFillInvoker extends FillInvoker {
if (rankProfile != null) {
root.setString("ranking", rankProfile);
}
+ if (location != null) {
+ root.setString("location", location.toString());
+ }
Cursor gids = root.setArray("gids");
for (FastHit hit : hits) {
gids.addData(hit.getGlobalId().getRawId());
@@ -239,7 +245,7 @@ public class RpcFillInvoker extends FillInvoker {
int skippedHits = 0;
for (int i = 0; i < hits.size(); i++) {
Inspector summary = summaries.entry(i).field("docsum");
- if (summary.fieldCount() != 0) {
+ if (summary.valid()) {
hits.get(i).setField(Hit.SDDOCNAME_FIELD, documentDb.getName());
hits.get(i).addSummary(documentDb.getDocsumDefinitionSet().getDocsum(summaryClass), summary);
hits.get(i).setFilled(summaryClass);