summaryrefslogtreecommitdiffstats
path: root/documentapi
diff options
context:
space:
mode:
authorTor Brede Vekterli <vekterli@oath.com>2018-01-17 15:50:14 +0100
committerGeir Storli <geirst@oath.com>2018-01-29 15:32:14 +0000
commit716d43a04a0fb720e8d1d8a77fbca9e7505acceb (patch)
treea47ce355765056fabf4730b385b53f5cfe53229e /documentapi
parent710d9ad634015c3ad7d3f1cc419db5ce11862e8c (diff)
WIP on bucket space enabled protocol version for Java
Diffstat (limited to 'documentapi')
-rwxr-xr-xdocumentapi/src/main/java/com/yahoo/documentapi/messagebus/protocol/DocumentProtocol.java8
-rwxr-xr-xdocumentapi/src/main/java/com/yahoo/documentapi/messagebus/protocol/RoutableFactories51.java13
-rw-r--r--documentapi/src/main/java/com/yahoo/documentapi/messagebus/protocol/RoutableFactories60.java22
-rw-r--r--documentapi/src/test/java/com/yahoo/documentapi/messagebus/protocol/test/Messages51TestCase.java2
-rw-r--r--documentapi/src/test/java/com/yahoo/documentapi/messagebus/protocol/test/Messages52TestCase.java3
-rw-r--r--documentapi/src/test/java/com/yahoo/documentapi/messagebus/protocol/test/Messages60TestCase.java82
6 files changed, 124 insertions, 6 deletions
diff --git a/documentapi/src/main/java/com/yahoo/documentapi/messagebus/protocol/DocumentProtocol.java b/documentapi/src/main/java/com/yahoo/documentapi/messagebus/protocol/DocumentProtocol.java
index e1e501d3e1b..dac3d50db40 100755
--- a/documentapi/src/main/java/com/yahoo/documentapi/messagebus/protocol/DocumentProtocol.java
+++ b/documentapi/src/main/java/com/yahoo/documentapi/messagebus/protocol/DocumentProtocol.java
@@ -298,10 +298,12 @@ public class DocumentProtocol implements Protocol {
VersionSpecification version50 = new VersionSpecification(5, 0);
VersionSpecification version51 = new VersionSpecification(5, 1);
VersionSpecification version52 = new VersionSpecification(5, 115);
+ VersionSpecification version6 = new VersionSpecification(6, 999); // TODO change once stable protocol
List<VersionSpecification> from50 = Arrays.asList(version50, version51, version52);
List<VersionSpecification> from51 = Arrays.asList(version51, version52);
- List<VersionSpecification> from52 = Arrays.asList(version52);
+ List<VersionSpecification> from52 = Collections.singletonList(version52);
+ List<VersionSpecification> from6 = Collections.singletonList(version6); // TODO decide minor version...
// 5.0 serialization (keep alphabetized please)
putRoutableFactory(MESSAGE_BATCHDOCUMENTUPDATE, new RoutableFactories50.BatchDocumentUpdateMessageFactory(), from50);
@@ -352,6 +354,10 @@ public class DocumentProtocol implements Protocol {
putRoutableFactory(MESSAGE_PUTDOCUMENT, new RoutableFactories52.PutDocumentMessageFactory(), from52);
putRoutableFactory(MESSAGE_UPDATEDOCUMENT, new RoutableFactories52.UpdateDocumentMessageFactory(), from52);
putRoutableFactory(MESSAGE_REMOVEDOCUMENT, new RoutableFactories52.RemoveDocumentMessageFactory(), from52);
+
+ // 6.x serialization
+ // TODO stat, listbuckets
+ putRoutableFactory(MESSAGE_CREATEVISITOR, new RoutableFactories60.CreateVisitorMessageFactory(), from6);
}
/**
diff --git a/documentapi/src/main/java/com/yahoo/documentapi/messagebus/protocol/RoutableFactories51.java b/documentapi/src/main/java/com/yahoo/documentapi/messagebus/protocol/RoutableFactories51.java
index c2f986b8fb8..1754209fc06 100755
--- a/documentapi/src/main/java/com/yahoo/documentapi/messagebus/protocol/RoutableFactories51.java
+++ b/documentapi/src/main/java/com/yahoo/documentapi/messagebus/protocol/RoutableFactories51.java
@@ -5,6 +5,7 @@ import com.yahoo.document.BucketId;
import com.yahoo.document.DocumentId;
import com.yahoo.document.serialization.DocumentDeserializer;
import com.yahoo.document.serialization.DocumentSerializer;
+import com.yahoo.vespa.objects.Deserializer;
import java.util.Map;
@@ -17,6 +18,10 @@ public abstract class RoutableFactories51 extends RoutableFactories50 {
public static class CreateVisitorMessageFactory extends DocumentMessageFactory {
+ protected String decodeBucketSpace(Deserializer deserializer) {
+ return "default"; // TODO fixed space repo
+ }
+
@Override
protected DocumentMessage doDecode(DocumentDeserializer buf) {
CreateVisitorMessage msg = new CreateVisitorMessage();
@@ -53,9 +58,15 @@ public abstract class RoutableFactories51 extends RoutableFactories50 {
msg.setVisitorOrdering(buf.getInt(null));
msg.setMaxBucketsPerVisitor(buf.getInt(null));
msg.setVisitorDispatcherVersion(50);
+ msg.setBucketSpace(decodeBucketSpace(buf));
return msg;
}
+ protected boolean encodeBucketSpace(String bucketSpace) {
+ // TODO fixed space repo
+ return "default".equals(bucketSpace);
+ }
+
@Override
protected boolean doEncode(DocumentMessage obj, DocumentSerializer buf) {
CreateVisitorMessage msg = (CreateVisitorMessage)obj;
@@ -92,7 +103,7 @@ public abstract class RoutableFactories51 extends RoutableFactories50 {
buf.putInt(null, msg.getVisitorOrdering());
buf.putInt(null, msg.getMaxBucketsPerVisitor());
- return true;
+ return encodeBucketSpace(msg.getBucketSpace());
}
}
diff --git a/documentapi/src/main/java/com/yahoo/documentapi/messagebus/protocol/RoutableFactories60.java b/documentapi/src/main/java/com/yahoo/documentapi/messagebus/protocol/RoutableFactories60.java
new file mode 100644
index 00000000000..11a707c44de
--- /dev/null
+++ b/documentapi/src/main/java/com/yahoo/documentapi/messagebus/protocol/RoutableFactories60.java
@@ -0,0 +1,22 @@
+// Copyright 2018 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+package com.yahoo.documentapi.messagebus.protocol;
+
+import com.yahoo.vespa.objects.Deserializer;
+
+public class RoutableFactories60 extends RoutableFactories52 {
+
+ public static class CreateVisitorMessageFactory extends RoutableFactories52.CreateVisitorMessageFactory {
+ @Override
+ protected String decodeBucketSpace(Deserializer deserializer) {
+ // TODO le test~
+ return super.decodeBucketSpace(deserializer);
+ }
+
+ @Override
+ protected boolean encodeBucketSpace(String bucketSpace) {
+ // TODO le test~
+ return super.encodeBucketSpace(bucketSpace);
+ }
+ }
+
+}
diff --git a/documentapi/src/test/java/com/yahoo/documentapi/messagebus/protocol/test/Messages51TestCase.java b/documentapi/src/test/java/com/yahoo/documentapi/messagebus/protocol/test/Messages51TestCase.java
index 0a6e5a66ed9..1c55b5f8e69 100644
--- a/documentapi/src/test/java/com/yahoo/documentapi/messagebus/protocol/test/Messages51TestCase.java
+++ b/documentapi/src/test/java/com/yahoo/documentapi/messagebus/protocol/test/Messages51TestCase.java
@@ -53,7 +53,7 @@ public class Messages51TestCase extends Messages50TestCase {
//
////////////////////////////////////////////////////////////////////////////////
- private static int BASE_MESSAGE_LENGTH = 5;
+ protected static int BASE_MESSAGE_LENGTH = 5;
public class testCreateVisitorMessage implements RunnableTest {
diff --git a/documentapi/src/test/java/com/yahoo/documentapi/messagebus/protocol/test/Messages52TestCase.java b/documentapi/src/test/java/com/yahoo/documentapi/messagebus/protocol/test/Messages52TestCase.java
index c9cc7193d02..1bda3ea3610 100644
--- a/documentapi/src/test/java/com/yahoo/documentapi/messagebus/protocol/test/Messages52TestCase.java
+++ b/documentapi/src/test/java/com/yahoo/documentapi/messagebus/protocol/test/Messages52TestCase.java
@@ -1,7 +1,6 @@
// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
package com.yahoo.documentapi.messagebus.protocol.test;
-import com.google.common.annotations.Beta;
import com.yahoo.component.Version;
import com.yahoo.document.*;
import com.yahoo.document.fieldpathupdate.RemoveFieldPathUpdate;
@@ -15,7 +14,6 @@ import static org.junit.Assert.assertEquals;
* @author Vegard Sjonfjell
*/
-@Beta
public class Messages52TestCase extends Messages51TestCase {
@Override
@@ -40,7 +38,6 @@ public class Messages52TestCase extends Messages51TestCase {
out.put(DocumentProtocol.MESSAGE_REMOVEDOCUMENT, new testRemoveDocumentMessage());
}
- private static int BASE_MESSAGE_LENGTH = 5;
private static String CONDITION_STRING = "There's just one condition";
public class testPutDocumentMessage implements RunnableTest {
diff --git a/documentapi/src/test/java/com/yahoo/documentapi/messagebus/protocol/test/Messages60TestCase.java b/documentapi/src/test/java/com/yahoo/documentapi/messagebus/protocol/test/Messages60TestCase.java
new file mode 100644
index 00000000000..70ccdc1bd1b
--- /dev/null
+++ b/documentapi/src/test/java/com/yahoo/documentapi/messagebus/protocol/test/Messages60TestCase.java
@@ -0,0 +1,82 @@
+// Copyright 2018 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+package com.yahoo.documentapi.messagebus.protocol.test;
+
+import com.yahoo.component.Version;
+import com.yahoo.document.BucketId;
+import com.yahoo.document.select.OrderingSpecification;
+import com.yahoo.documentapi.messagebus.protocol.CreateVisitorMessage;
+import com.yahoo.documentapi.messagebus.protocol.DocumentProtocol;
+import com.yahoo.text.Utf8;
+
+import java.util.Map;
+
+import static org.junit.Assert.assertEquals;
+
+public class Messages60TestCase extends Messages52TestCase {
+
+ @Override
+ protected Version version() {
+ return new Version(6, 999, 0);
+ } // TODO finalize version
+
+ @Override
+ protected boolean shouldTestCoverage() {
+ return true;
+ }
+
+ @Override
+ protected void registerTests(Map<Integer, MessagesTestBase.RunnableTest> out) {
+ super.registerTests(out);
+
+ // This list MUST mirror the list of routable factories from the DocumentProtocol constructor that support
+ // version 6.0. When adding tests to this list, please KEEP THEM ORDERED alphabetically like they are now.
+
+ out.put(DocumentProtocol.MESSAGE_CREATEVISITOR, new Messages60TestCase.testCreateVisitorMessage());
+ }
+
+ public class testCreateVisitorMessage implements RunnableTest {
+
+ private static final String BUCKET_SPACE = "bjarne";
+
+ // FIXME there is a large amount of code duplication across version tests, presumably
+ // to ensure that fields survive across version boundaries, but it makes code very bloated.
+ // TODO head towards a blissful Protobuf future instead...
+ @Override
+ public void run() {
+ CreateVisitorMessage msg = new CreateVisitorMessage("SomeLibrary", "myvisitor", "newyork", "london");
+ msg.setDocumentSelection("true and false or true");
+ msg.getParameters().put("myvar", Utf8.toBytes("somevalue"));
+ msg.getParameters().put("anothervar", Utf8.toBytes("34"));
+ msg.getBuckets().add(new BucketId(16, 1234));
+ msg.setVisitRemoves(true);
+ msg.setFieldSet("foo bar");
+ msg.setVisitorOrdering(OrderingSpecification.DESCENDING);
+ msg.setMaxBucketsPerVisitor(2);
+ msg.setBucketSpace(BUCKET_SPACE);
+ assertEquals(BASE_MESSAGE_LENGTH + 184 + serializedLength(BUCKET_SPACE), serialize("CreateVisitorMessage", msg));
+
+ for (Language lang : LANGUAGES) {
+ msg = (CreateVisitorMessage)deserialize("CreateVisitorMessage", DocumentProtocol.MESSAGE_CREATEVISITOR, lang);
+ assertEquals("SomeLibrary", msg.getLibraryName());
+ assertEquals("myvisitor", msg.getInstanceId());
+ assertEquals("newyork", msg.getControlDestination());
+ assertEquals("london", msg.getDataDestination());
+ assertEquals("true and false or true", msg.getDocumentSelection());
+ assertEquals(8, msg.getMaxPendingReplyCount());
+ assertEquals(true, msg.getVisitRemoves());
+ assertEquals("foo bar", msg.getFieldSet());
+ assertEquals(false, msg.getVisitInconsistentBuckets());
+ assertEquals(1, msg.getBuckets().size());
+ assertEquals(new BucketId(16, 1234), msg.getBuckets().iterator().next());
+ assertEquals("somevalue", Utf8.toString(msg.getParameters().get("myvar")));
+ assertEquals("34", Utf8.toString(msg.getParameters().get("anothervar")));
+ assertEquals(OrderingSpecification.DESCENDING, msg.getVisitorOrdering());
+ assertEquals(2, msg.getMaxBucketsPerVisitor());
+ assertEquals(BUCKET_SPACE, msg.getBucketSpace());
+ }
+ }
+ }
+
+ // TODO want to test that non-default bucket space fails to encode with old version
+
+}