summaryrefslogtreecommitdiffstats
path: root/container-search
diff options
context:
space:
mode:
authorHenning Baldersheim <balder@yahoo-inc.com>2017-08-16 22:15:46 +0200
committerHenning Baldersheim <balder@yahoo-inc.com>2017-08-16 22:15:46 +0200
commit490cdebe067f598055648009327a463e68bdfc44 (patch)
tree68bdd2ee27481a3955b2eaf16e4f3bb96ea4f428 /container-search
parent669cb9a58bc0245dc12a6a9deddf05a64c49003b (diff)
Add rankprofile to the base sessionId.
Diffstat (limited to 'container-search')
-rw-r--r--container-search/src/main/java/com/yahoo/fs4/GetDocSumsPacket.java2
-rw-r--r--container-search/src/main/java/com/yahoo/fs4/QueryPacket.java6
-rw-r--r--container-search/src/main/java/com/yahoo/search/Query.java7
-rw-r--r--container-search/src/main/java/com/yahoo/search/dispatch/Dispatcher.java8
-rw-r--r--container-search/src/main/java/com/yahoo/search/grouping/vespa/GroupingExecutor.java2
-rw-r--r--container-search/src/main/java/com/yahoo/search/query/SessionId.java8
-rw-r--r--container-search/src/test/java/com/yahoo/fs4/test/GetDocSumsPacketTestCase.java8
-rw-r--r--container-search/src/test/java/com/yahoo/prelude/fastsearch/test/FastSearcherTestCase.java6
8 files changed, 26 insertions, 21 deletions
diff --git a/container-search/src/main/java/com/yahoo/fs4/GetDocSumsPacket.java b/container-search/src/main/java/com/yahoo/fs4/GetDocSumsPacket.java
index e85a74de611..3bfa2ebe3af 100644
--- a/container-search/src/main/java/com/yahoo/fs4/GetDocSumsPacket.java
+++ b/container-search/src/main/java/com/yahoo/fs4/GetDocSumsPacket.java
@@ -77,7 +77,7 @@ public class GetDocSumsPacket extends Packet {
boolean useQueryCache = query.getRanking().getQueryCache();
// If feature cache is used we need to include the sessionId as key.
if (useQueryCache) { // TODO: Move this decision (and the key) to ranking
- query.getRanking().getProperties().put(sessionIdKey, query.getSessionId(false).asUtf8String().toString());
+ query.getRanking().getProperties().put(sessionIdKey, query.getSessionId(query.getRanking().getProfile(), false).toString());
}
// always allow slime docsums
diff --git a/container-search/src/main/java/com/yahoo/fs4/QueryPacket.java b/container-search/src/main/java/com/yahoo/fs4/QueryPacket.java
index 3f852a6fc12..07b8f03fe15 100644
--- a/container-search/src/main/java/com/yahoo/fs4/QueryPacket.java
+++ b/container-search/src/main/java/com/yahoo/fs4/QueryPacket.java
@@ -9,6 +9,7 @@ import com.yahoo.search.grouping.vespa.GroupingExecutor;
import com.yahoo.search.query.Ranking;
import com.yahoo.searchlib.aggregation.Grouping;
import com.yahoo.text.Utf8;
+import com.yahoo.text.Utf8String;
import com.yahoo.vespa.objects.BufferSerializer;
import java.nio.ByteBuffer;
@@ -148,8 +149,9 @@ public class QueryPacket extends Packet {
}
if (sendSessionKey) {
- buffer.putInt(query.getSessionId(true).asUtf8String().getByteLength());
- buffer.put(query.getSessionId(true).asUtf8String().getBytes());
+ Utf8String key = query.getSessionId(query.getRanking().getProfile(), true);
+ buffer.putInt(key.getByteLength());
+ buffer.put(key.getBytes());
}
if ((featureFlag & QF_LOCATION) != 0) {
diff --git a/container-search/src/main/java/com/yahoo/search/Query.java b/container-search/src/main/java/com/yahoo/search/Query.java
index 9f8228d2857..2692cd824c1 100644
--- a/container-search/src/main/java/com/yahoo/search/Query.java
+++ b/container-search/src/main/java/com/yahoo/search/Query.java
@@ -30,6 +30,7 @@ import com.yahoo.search.query.properties.DefaultProperties;
import com.yahoo.search.query.properties.QueryProperties;
import com.yahoo.search.query.properties.QueryPropertyAliases;
import com.yahoo.search.query.properties.RequestContextProperties;
+import com.yahoo.text.Utf8String;
import com.yahoo.yolean.Exceptions;
import com.yahoo.search.federation.FederationSearcher;
import com.yahoo.search.query.Properties;
@@ -970,10 +971,12 @@ public class Query extends com.yahoo.processing.Request implements Cloneable {
* @param create if true this is created if not already set
* @return the session id of this query, or null if not set and create is false
*/
- public SessionId getSessionId(boolean create) {
+ public Utf8String getSessionId(String rankProfile, boolean create) {
if (sessionId == null && create)
this.sessionId = SessionId.next();
- return sessionId;
+ return sessionId != null
+ ? new Utf8String(sessionId.toString() + "." + ((rankProfile != null) ? rankProfile : ""))
+ : null;
}
public boolean hasEncodableProperties() {
diff --git a/container-search/src/main/java/com/yahoo/search/dispatch/Dispatcher.java b/container-search/src/main/java/com/yahoo/search/dispatch/Dispatcher.java
index 47558b131a0..1ff7757733b 100644
--- a/container-search/src/main/java/com/yahoo/search/dispatch/Dispatcher.java
+++ b/container-search/src/main/java/com/yahoo/search/dispatch/Dispatcher.java
@@ -21,6 +21,7 @@ import com.yahoo.slime.BinaryFormat;
import com.yahoo.slime.Cursor;
import com.yahoo.slime.Slime;
import com.yahoo.data.access.Inspector;
+import com.yahoo.text.Utf8String;
import com.yahoo.vespa.config.search.DispatchConfig;
import java.util.Iterator;
@@ -117,21 +118,22 @@ public class Dispatcher extends AbstractComponent {
}
Query query = result.getQuery();
- byte[] serializedSlime = BinaryFormat.encode(toSlime(query.getRanking().getProfile(), summaryClass, query.getSessionId(false), hits));
+ String rankProfile = query.getRanking().getProfile();
+ byte[] serializedSlime = BinaryFormat.encode(toSlime(rankProfile, summaryClass, query.getSessionId(rankProfile, false), hits));
double timeoutSeconds = ((double)query.getTimeLeft()-3.0)/1000.0;
Compressor.Compression compressionResult = compressor.compress(compression, serializedSlime);
client.getDocsums(hits, node, compressionResult.type(),
serializedSlime.length, compressionResult.data(), responseReceiver, timeoutSeconds);
}
- static private Slime toSlime(String rankProfile, String summaryClass, SessionId sessionId, List<FastHit> hits) {
+ static private Slime toSlime(String rankProfile, String summaryClass, Utf8String sessionId, List<FastHit> hits) {
Slime slime = new Slime();
Cursor root = slime.setObject();
if (summaryClass != null) {
root.setString("class", summaryClass);
}
if (sessionId != null) {
- root.setData("sessionid", sessionId.asUtf8String().getBytes());
+ root.setData("sessionid", sessionId.getBytes());
}
if (rankProfile != null) {
root.setString("ranking", rankProfile);
diff --git a/container-search/src/main/java/com/yahoo/search/grouping/vespa/GroupingExecutor.java b/container-search/src/main/java/com/yahoo/search/grouping/vespa/GroupingExecutor.java
index 1661283f060..ceba6e506b5 100644
--- a/container-search/src/main/java/com/yahoo/search/grouping/vespa/GroupingExecutor.java
+++ b/container-search/src/main/java/com/yahoo/search/grouping/vespa/GroupingExecutor.java
@@ -225,7 +225,7 @@ public class GroupingExecutor extends Searcher {
baseRoot = origRoot.clone();
}
if (query.isTraceable(3) && query.getGroupingSessionCache()) {
- query.trace("Grouping in " + (lastPass + 1) + " passes. SessionId='" + query.getSessionId(true) + "'.", 3);
+ query.trace("Grouping in " + (lastPass + 1) + " passes. SessionId='" + query.getSessionId(query.getRanking().getProfile(), true) + "'.", 3);
}
for (int pass = 0; pass <= lastPass; ++pass) {
boolean firstPass = (pass == 0);
diff --git a/container-search/src/main/java/com/yahoo/search/query/SessionId.java b/container-search/src/main/java/com/yahoo/search/query/SessionId.java
index 5831b10c88d..b4b844961f6 100644
--- a/container-search/src/main/java/com/yahoo/search/query/SessionId.java
+++ b/container-search/src/main/java/com/yahoo/search/query/SessionId.java
@@ -2,8 +2,6 @@
package com.yahoo.search.query;
import com.yahoo.container.Server;
-import com.yahoo.text.Utf8String;
-
import java.util.concurrent.atomic.AtomicLong;
/**
@@ -17,13 +15,13 @@ public class SessionId {
private static final String serverId = Server.get().getServerDiscriminator();
private static final AtomicLong sequenceCounter = new AtomicLong();
- private final Utf8String id;
+ private final String id;
private SessionId(String serverId, long timestamp, long sequence) {
- this.id = new Utf8String(serverId + "." + timestamp + "." + sequence);
+ this.id = serverId + "." + timestamp + "." + sequence;
}
- public Utf8String asUtf8String() { return id; }
+ public String toString() { return id; }
/**
* Creates a session id which is unique across the cluster this runtime is a member of each time this is called.
diff --git a/container-search/src/test/java/com/yahoo/fs4/test/GetDocSumsPacketTestCase.java b/container-search/src/test/java/com/yahoo/fs4/test/GetDocSumsPacketTestCase.java
index d572a835102..6455e54d92b 100644
--- a/container-search/src/test/java/com/yahoo/fs4/test/GetDocSumsPacketTestCase.java
+++ b/container-search/src/test/java/com/yahoo/fs4/test/GetDocSumsPacketTestCase.java
@@ -65,11 +65,11 @@ public class GetDocSumsPacketTestCase {
@Test
public void requireThatSessionIdIsEncodedAsPropertyWhenUsingSearchSession() throws BufferTooSmallException {
Result result = new Result(new Query("?query=foo"));
- result.getQuery().getSessionId(true); // create session id.
+ result.getQuery().getSessionId("",true); // create session id.
result.getQuery().getRanking().setQueryCache(true);
FastHit hit = new FastHit();
result.hits().add(hit);
- assertPacket(false, result, new byte[] { 0, 0, 0, -123, 0, 0, 0, -37, 0, 0, 56, 17, 0, 0, 0, 0,
+ assertPacket(false, result, new byte[] { 0, 0, 0, -115, 0, 0, 0, -37, 0, 0, 56, 17, 0, 0, 0, 0,
// query timeout
IGNORE, IGNORE, IGNORE, IGNORE,
// "default" - rank profile
@@ -79,8 +79,8 @@ public class GetDocSumsPacketTestCase {
// 2 property entries
0, 0, 0, 2,
// rank: sessionId => qrserver.0.XXXXXXXXXXXXX.0
- 0, 0, 0, 4, 'r', 'a', 'n', 'k', 0, 0, 0, 1, 0, 0, 0, 9, 's', 'e', 's', 's', 'i', 'o', 'n', 'I', 'd', 0, 0, 0, 26, 'q', 'r', 's', 'e', 'r', 'v', 'e', 'r', '.',
- IGNORE, '.', IGNORE, IGNORE, IGNORE, IGNORE, IGNORE, IGNORE, IGNORE, IGNORE, IGNORE, IGNORE, IGNORE, IGNORE, IGNORE, '.', IGNORE,
+ 0, 0, 0, 4, 'r', 'a', 'n', 'k', 0, 0, 0, 1, 0, 0, 0, 9, 's', 'e', 's', 's', 'i', 'o', 'n', 'I', 'd', 0, 0, 0, 34, 'q', 'r', 's', 'e', 'r', 'v', 'e', 'r', '.',
+ IGNORE, '.', IGNORE, IGNORE, IGNORE, IGNORE, IGNORE, IGNORE, IGNORE, IGNORE, IGNORE, IGNORE, IGNORE, IGNORE, IGNORE, '.', IGNORE, '.','d', 'e', 'f', 'a', 'u', 'l', 't',
// caches: features => true
0, 0, 0, 6, 'c', 'a', 'c', 'h', 'e', 's', 0, 0, 0, 1, 0, 0, 0, 5, 'q', 'u', 'e', 'r', 'y', 0, 0, 0, 4, 't', 'r', 'u', 'e',
// flags
diff --git a/container-search/src/test/java/com/yahoo/prelude/fastsearch/test/FastSearcherTestCase.java b/container-search/src/test/java/com/yahoo/prelude/fastsearch/test/FastSearcherTestCase.java
index ca8ed15f67b..95342766f82 100644
--- a/container-search/src/test/java/com/yahoo/prelude/fastsearch/test/FastSearcherTestCase.java
+++ b/container-search/src/test/java/com/yahoo/prelude/fastsearch/test/FastSearcherTestCase.java
@@ -262,7 +262,7 @@ public class FastSearcherTestCase {
buf.get(actual);
byte IGNORE = 69;
- byte[] expected = new byte[] { 0, 0, 0, -85, 0, 0, 0, -37, 0, 0, 48, 17, 0, 0, 0, 0,
+ byte[] expected = new byte[] { 0, 0, 0, -77, 0, 0, 0, -37, 0, 0, 48, 17, 0, 0, 0, 0,
// query timeout
IGNORE, IGNORE, IGNORE, IGNORE,
// "default" - rank profile
@@ -270,8 +270,8 @@ public class FastSearcherTestCase {
// 3 property entries (rank, match, caches)
0, 0, 0, 3,
// rank: sessionId => qrserver.0.XXXXXXXXXXXXX.0
- 0, 0, 0, 4, 'r', 'a', 'n', 'k', 0, 0, 0, 1, 0, 0, 0, 9, 's', 'e', 's', 's', 'i', 'o', 'n', 'I', 'd', 0, 0, 0, 26, 'q', 'r', 's', 'e', 'r', 'v', 'e', 'r', '.',
- IGNORE, '.', IGNORE, IGNORE, IGNORE, IGNORE, IGNORE, IGNORE, IGNORE, IGNORE, IGNORE, IGNORE, IGNORE, IGNORE, IGNORE, '.', IGNORE,
+ 0, 0, 0, 4, 'r', 'a', 'n', 'k', 0, 0, 0, 1, 0, 0, 0, 9, 's', 'e', 's', 's', 'i', 'o', 'n', 'I', 'd', 0, 0, 0, 34, 'q', 'r', 's', 'e', 'r', 'v', 'e', 'r', '.',
+ IGNORE, '.', IGNORE, IGNORE, IGNORE, IGNORE, IGNORE, IGNORE, IGNORE, IGNORE, IGNORE, IGNORE, IGNORE, IGNORE, IGNORE, '.', IGNORE, '.','d', 'e', 'f', 'a', 'u', 'l', 't',
// match: documentdb.searchdoctype => test
0, 0, 0, 5, 'm', 'a', 't', 'c', 'h', 0, 0, 0, 1, 0, 0, 0, 24, 'd', 'o', 'c', 'u', 'm', 'e', 'n', 't', 'd', 'b', '.', 's', 'e', 'a', 'r', 'c', 'h', 'd', 'o', 'c', 't', 'y', 'p', 'e', 0, 0, 0, 4, 't', 'e', 's', 't',
// sessionId => qrserver.0.XXXXXXXXXXXXX.0