diff options
author | Tor Brede Vekterli <vekterli@oath.com> | 2018-01-17 15:50:14 +0100 |
---|---|---|
committer | Geir Storli <geirst@oath.com> | 2018-01-29 15:32:14 +0000 |
commit | 716d43a04a0fb720e8d1d8a77fbca9e7505acceb (patch) | |
tree | a47ce355765056fabf4730b385b53f5cfe53229e /documentapi | |
parent | 710d9ad634015c3ad7d3f1cc419db5ce11862e8c (diff) |
WIP on bucket space enabled protocol version for Java
Diffstat (limited to 'documentapi')
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 + +} |