diff options
author | Jon Bratseth <bratseth@oath.com> | 2020-08-05 09:09:29 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-08-05 09:09:29 +0200 |
commit | 78d1d7c83099639947edb423c67df4961a2cf5e4 (patch) | |
tree | 52b17fad75ba741518f59f01f0a3ab1372a8774b | |
parent | 2e82ff0ff2e24811d96c42126d81526da7ea3779 (diff) | |
parent | 2e225436140011754c7d467d5174624d4e451552 (diff) |
Merge pull request #13985 from vespa-engine/balder/minor-fieldset-cleanup
Balder/minor fieldset cleanup
55 files changed, 233 insertions, 512 deletions
diff --git a/document/abi-spec.json b/document/abi-spec.json index 7a0637db1aa..e53cf09f07e 100644 --- a/document/abi-spec.json +++ b/document/abi-spec.json @@ -3374,23 +3374,9 @@ "public com.yahoo.document.fieldset.FieldSet clone()", "public bridge synthetic java.lang.Object clone()" ], - "fields": [] - }, - "com.yahoo.document.fieldset.BodyFields": { - "superClass": "java.lang.Object", - "interfaces": [ - "com.yahoo.document.fieldset.FieldSet" - ], - "attributes": [ - "public" - ], - "methods": [ - "public void <init>()", - "public boolean contains(com.yahoo.document.fieldset.FieldSet)", - "public com.yahoo.document.fieldset.FieldSet clone()", - "public bridge synthetic java.lang.Object clone()" - ], - "fields": [] + "fields": [ + "public static final java.lang.String NAME" + ] }, "com.yahoo.document.fieldset.DocIdOnly": { "superClass": "java.lang.Object", @@ -3406,7 +3392,9 @@ "public com.yahoo.document.fieldset.FieldSet clone()", "public bridge synthetic java.lang.Object clone()" ], - "fields": [] + "fields": [ + "public static final java.lang.String NAME" + ] }, "com.yahoo.document.fieldset.FieldCollection": { "superClass": "java.util.ArrayList", @@ -3454,22 +3442,6 @@ ], "fields": [] }, - "com.yahoo.document.fieldset.HeaderFields": { - "superClass": "java.lang.Object", - "interfaces": [ - "com.yahoo.document.fieldset.FieldSet" - ], - "attributes": [ - "public" - ], - "methods": [ - "public void <init>()", - "public boolean contains(com.yahoo.document.fieldset.FieldSet)", - "public com.yahoo.document.fieldset.FieldSet clone()", - "public bridge synthetic java.lang.Object clone()" - ], - "fields": [] - }, "com.yahoo.document.fieldset.NoFields": { "superClass": "java.lang.Object", "interfaces": [ @@ -3484,7 +3456,9 @@ "public com.yahoo.document.fieldset.FieldSet clone()", "public bridge synthetic java.lang.Object clone()" ], - "fields": [] + "fields": [ + "public static final java.lang.String NAME" + ] }, "com.yahoo.document.idstring.IdIdString": { "superClass": "com.yahoo.document.idstring.IdString", diff --git a/document/src/main/java/com/yahoo/document/DocumentType.java b/document/src/main/java/com/yahoo/document/DocumentType.java index f73fd634e0e..af4aa62f21f 100755 --- a/document/src/main/java/com/yahoo/document/DocumentType.java +++ b/document/src/main/java/com/yahoo/document/DocumentType.java @@ -4,6 +4,7 @@ package com.yahoo.document; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableSet; import com.yahoo.document.datatypes.FieldValue; +import com.yahoo.document.fieldset.AllFields; import com.yahoo.document.serialization.DocumentWriter; import com.yahoo.vespa.objects.Ids; import com.yahoo.vespa.objects.ObjectVisitor; @@ -34,7 +35,6 @@ import java.util.Set; // TODO: Remove header/body concept on Vespa 8 public class DocumentType extends StructuredDataType { - private static final String ALL = "[all]"; public static final String DOCUMENT = "[document]"; public static final int classId = registerClass(Ids.document + 58, DocumentType.class); private StructDataType headerType; @@ -215,8 +215,8 @@ public class DocumentType extends StructuredDataType { this.fieldSets.put(entry.getKey(), ImmutableSet.copyOf(fields)); } - if ( ! this.fieldSets.containsKey(ALL)) { - this.fieldSets.put(ALL, getAllUniqueFields()); + if ( ! this.fieldSets.containsKey(AllFields.NAME)) { + this.fieldSets.put(AllFields.NAME, getAllUniqueFields()); } } @@ -454,7 +454,7 @@ public class DocumentType extends StructuredDataType { * @return an unmodifiable snapshot of the all fields in this type */ public Set<Field> fieldSetAll() { - return fieldSet(ALL); + return fieldSet(AllFields.NAME); } public Set<Field> fieldSet(String name) { diff --git a/document/src/main/java/com/yahoo/document/fieldset/AllFields.java b/document/src/main/java/com/yahoo/document/fieldset/AllFields.java index 7087e959328..247d2829124 100644 --- a/document/src/main/java/com/yahoo/document/fieldset/AllFields.java +++ b/document/src/main/java/com/yahoo/document/fieldset/AllFields.java @@ -2,13 +2,10 @@ package com.yahoo.document.fieldset; /** - * Created with IntelliJ IDEA. - * User: thomasg - * Date: 4/25/12 - * Time: 3:18 PM - * To change this template use File | Settings | File Templates. + * @author Thomas Gundersen */ public class AllFields implements FieldSet { + public static final String NAME = "[all]"; @Override public boolean contains(FieldSet o) { return true; diff --git a/document/src/main/java/com/yahoo/document/fieldset/BodyFields.java b/document/src/main/java/com/yahoo/document/fieldset/BodyFields.java deleted file mode 100644 index 1fd0d1129fa..00000000000 --- a/document/src/main/java/com/yahoo/document/fieldset/BodyFields.java +++ /dev/null @@ -1,40 +0,0 @@ -// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. -package com.yahoo.document.fieldset; - -import com.yahoo.document.Field; - -/** - * @deprecated do not use - */ -@Deprecated // TODO: Remove on Vespa 8 -public class BodyFields implements FieldSet { - @Override - public boolean contains(FieldSet o) { - if (o instanceof BodyFields || o instanceof DocIdOnly || o instanceof NoFields) { - return true; - } - - if (o instanceof Field) { - return !((Field) o).isHeader(); - } - - if (o instanceof FieldCollection) { - FieldCollection c = (FieldCollection)o; - for (Field f : c) { - if (f.isHeader()) { - return false; - } - } - - return true; - } else { - return false; - } - } - - @Override - public FieldSet clone() throws CloneNotSupportedException { - return new BodyFields(); - } - -} diff --git a/document/src/main/java/com/yahoo/document/fieldset/DocIdOnly.java b/document/src/main/java/com/yahoo/document/fieldset/DocIdOnly.java index 29b8348d501..eeac213e2b4 100644 --- a/document/src/main/java/com/yahoo/document/fieldset/DocIdOnly.java +++ b/document/src/main/java/com/yahoo/document/fieldset/DocIdOnly.java @@ -2,13 +2,10 @@ package com.yahoo.document.fieldset; /** - * Created with IntelliJ IDEA. - * User: thomasg - * Date: 4/25/12 - * Time: 3:21 PM - * To change this template use File | Settings | File Templates. + * @author Thomas Gundersen */ public class DocIdOnly implements FieldSet { + public static final String NAME = "[id]"; @Override public boolean contains(FieldSet o) { return (o instanceof DocIdOnly || o instanceof NoFields); diff --git a/document/src/main/java/com/yahoo/document/fieldset/FieldSetRepo.java b/document/src/main/java/com/yahoo/document/fieldset/FieldSetRepo.java index a7035439903..285c78ef0ab 100644 --- a/document/src/main/java/com/yahoo/document/fieldset/FieldSetRepo.java +++ b/document/src/main/java/com/yahoo/document/fieldset/FieldSetRepo.java @@ -7,27 +7,27 @@ import com.yahoo.document.DocumentTypeManager; import com.yahoo.document.Field; import com.yahoo.document.datatypes.FieldValue; -import java.lang.String; -import java.util.*; +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.StringTokenizer; /** * TODO: Move to document and implement */ public class FieldSetRepo { - @SuppressWarnings("deprecation") FieldSet parseSpecialValues(String name) { - if (name.equals("[id]")) { return new DocIdOnly(); } - else if (name.equals("[all]")) { return (new AllFields()); } - else if (name.equals("[none]")) { return (new NoFields()); } - else if (name.equals("[header]")) { return (new HeaderFields()); } + if (name.equals(DocIdOnly.NAME)) { return new DocIdOnly(); } + else if (name.equals(AllFields.NAME)) { return (new AllFields()); } + else if (name.equals(NoFields.NAME)) { return (new NoFields()); } else if (name.equals("[docid]")) { return (new DocIdOnly()); } - else if (name.equals("[body]")) { return (new BodyFields()); } else { throw new IllegalArgumentException( "The only special names (enclosed in '[]') allowed are " + - "id, all, none, header, body"); + "id, all, none"); } } @@ -40,7 +40,7 @@ public class FieldSetRepo { StringTokenizer tokenizer = new StringTokenizer(fieldNames, ","); FieldCollection collection = new FieldCollection(type); - for (; tokenizer.hasMoreTokens(); ) { + while (tokenizer.hasMoreTokens()) { String token = tokenizer.nextToken(); Field f = type.getField(token); if (f == null) { @@ -74,14 +74,13 @@ public class FieldSetRepo { return parseFieldCollection(docMan, type, fields); } - @SuppressWarnings("deprecation") public String serialize(FieldSet fieldSet) { if (fieldSet instanceof Field) { return ((Field)fieldSet).getName(); } else if (fieldSet instanceof FieldCollection) { FieldCollection c = ((FieldCollection)fieldSet); - StringBuffer buffer = new StringBuffer(); + StringBuilder buffer = new StringBuilder(); for (Field f : c) { if (buffer.length() == 0) { buffer.append(c.getDocumentType().getName()); @@ -94,15 +93,11 @@ public class FieldSetRepo { return buffer.toString(); } else if (fieldSet instanceof AllFields) { - return "[all]"; + return AllFields.NAME; } else if (fieldSet instanceof NoFields) { - return "[none]"; - } else if (fieldSet instanceof BodyFields) { - return "[body]"; - } else if (fieldSet instanceof HeaderFields) { - return "[header]"; + return NoFields.NAME; } else if (fieldSet instanceof DocIdOnly) { - return "[docid]"; + return DocIdOnly.NAME; } else { throw new IllegalArgumentException("Unknown field set type " + fieldSet); } @@ -127,7 +122,7 @@ public class FieldSetRepo { * Strips all fields not wanted by the given field set from the document. */ public void stripFields(Document target, FieldSet fieldSet) { - List<Field> toStrip = new ArrayList<Field>(); + List<Field> toStrip = new ArrayList<>(); for (Iterator<Map.Entry<Field, FieldValue>> i = target.iterator(); i.hasNext();) { Map.Entry<Field, FieldValue> v = i.next(); diff --git a/document/src/main/java/com/yahoo/document/fieldset/HeaderFields.java b/document/src/main/java/com/yahoo/document/fieldset/HeaderFields.java deleted file mode 100644 index 220de1ab416..00000000000 --- a/document/src/main/java/com/yahoo/document/fieldset/HeaderFields.java +++ /dev/null @@ -1,41 +0,0 @@ -// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. -package com.yahoo.document.fieldset; - -import com.yahoo.document.Field; - -/** - * @deprecated do not use - */ -@Deprecated // TODO: Remove on Vespa 8 -public class HeaderFields implements FieldSet { - - @Override - public boolean contains(FieldSet o) { - if (o instanceof HeaderFields || o instanceof DocIdOnly || o instanceof NoFields) { - return true; - } - - if (o instanceof Field) { - return ((Field)o).isHeader(); - } - - if (o instanceof FieldCollection) { - FieldCollection c = (FieldCollection)o; - for (Field f : c) { - if (!f.isHeader()) { - return false; - } - } - - return true; - } else { - return false; - } - } - - @Override - public FieldSet clone() throws CloneNotSupportedException { - return new HeaderFields(); - } - -} diff --git a/document/src/main/java/com/yahoo/document/fieldset/NoFields.java b/document/src/main/java/com/yahoo/document/fieldset/NoFields.java index fe3426db143..91663067db0 100644 --- a/document/src/main/java/com/yahoo/document/fieldset/NoFields.java +++ b/document/src/main/java/com/yahoo/document/fieldset/NoFields.java @@ -2,13 +2,10 @@ package com.yahoo.document.fieldset; /** - * Created with IntelliJ IDEA. - * User: thomasg - * Date: 4/25/12 - * Time: 3:18 PM - * To change this template use File | Settings | File Templates. + * @author Thomas Gundersen */ public class NoFields implements FieldSet { + public static final String NAME = "[none]"; @Override public boolean contains(FieldSet o) { return (o instanceof NoFields); diff --git a/document/src/test/java/com/yahoo/document/fieldset/FieldSetTestCase.java b/document/src/test/java/com/yahoo/document/fieldset/FieldSetTestCase.java index 404b069277b..fa0e3c82d01 100644 --- a/document/src/test/java/com/yahoo/document/fieldset/FieldSetTestCase.java +++ b/document/src/test/java/com/yahoo/document/fieldset/FieldSetTestCase.java @@ -13,6 +13,7 @@ import java.util.Map; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; +import static org.junit.Assert.fail; /** * Test for field sets @@ -20,25 +21,19 @@ import static org.junit.Assert.assertTrue; public class FieldSetTestCase extends DocumentTestCaseBase { @Test - @SuppressWarnings("deprecation") public void testClone() throws Exception { assertTrue(new AllFields().clone() instanceof AllFields); assertTrue(new NoFields().clone() instanceof NoFields); - assertTrue(new HeaderFields().clone() instanceof HeaderFields); - assertTrue(new BodyFields().clone() instanceof BodyFields); assertTrue(new DocIdOnly().clone() instanceof DocIdOnly); } @Test - @SuppressWarnings("deprecation") public void testParsing() { FieldSetRepo repo = new FieldSetRepo(); - assertTrue(repo.parse(docMan, "[all]") instanceof AllFields); - assertTrue(repo.parse(docMan, "[none]") instanceof NoFields); - assertTrue(repo.parse(docMan, "[id]") instanceof DocIdOnly); - assertTrue(repo.parse(docMan, "[header]") instanceof HeaderFields); - assertTrue(repo.parse(docMan, "[body]") instanceof BodyFields); + assertTrue(repo.parse(docMan, AllFields.NAME) instanceof AllFields); + assertTrue(repo.parse(docMan, NoFields.NAME) instanceof NoFields); + assertTrue(repo.parse(docMan, DocIdOnly.NAME) instanceof DocIdOnly); FieldCollection collection = (FieldCollection)repo.parse(docMan, "testdoc:stringattr,intattr"); assertEquals(2, collection.size()); @@ -61,50 +56,37 @@ public class FieldSetTestCase extends DocumentTestCaseBase { void assertError(String str) { try { new FieldSetRepo().parse(docMan, str); - assertTrue(false); + fail(); } catch (Exception e) { } } @Test - @SuppressWarnings("deprecation") public void testContains() throws Exception { - Field headerField = testDocType.getField("intattr"); - Field bodyField = testDocType.getField("rawattr"); - - assertFalse(headerField.contains(testDocType.getField("byteattr"))); - assertTrue(headerField.contains(testDocType.getField("intattr"))); - assertFalse(headerField.contains(bodyField)); - assertTrue(headerField.contains(new DocIdOnly())); - assertTrue(headerField.contains(new NoFields())); - assertFalse(headerField.contains(new AllFields())); - assertFalse(headerField.contains(new HeaderFields())); - assertFalse(headerField.contains(new BodyFields())); - - assertFalse(new NoFields().contains(headerField)); + Field intAttr = testDocType.getField("intattr"); + Field rawAttr = testDocType.getField("rawattr"); + + assertFalse(intAttr.contains(testDocType.getField("byteattr"))); + assertTrue(intAttr.contains(testDocType.getField("intattr"))); + assertFalse(intAttr.contains(rawAttr)); + assertTrue(intAttr.contains(new DocIdOnly())); + assertTrue(intAttr.contains(new NoFields())); + assertFalse(intAttr.contains(new AllFields())); + + assertFalse(new NoFields().contains(intAttr)); assertFalse(new NoFields().contains(new AllFields())); assertFalse(new NoFields().contains(new DocIdOnly())); - assertTrue(new AllFields().contains(new HeaderFields())); - assertTrue(new AllFields().contains(headerField)); - assertTrue(new AllFields().contains(bodyField)); - assertTrue(new AllFields().contains(new BodyFields())); + assertTrue(new AllFields().contains(intAttr)); + assertTrue(new AllFields().contains(rawAttr)); assertTrue(new AllFields().contains(new DocIdOnly())); assertTrue(new AllFields().contains(new NoFields())); assertTrue(new AllFields().contains(new AllFields())); assertTrue(new DocIdOnly().contains(new NoFields())); assertTrue(new DocIdOnly().contains(new DocIdOnly())); - assertFalse(new DocIdOnly().contains(headerField)); - - assertTrue(new HeaderFields().contains(headerField)); - assertTrue(new HeaderFields().contains(bodyField)); - assertTrue(new HeaderFields().contains(new DocIdOnly())); - assertTrue(new HeaderFields().contains(new NoFields())); + assertFalse(new DocIdOnly().contains(intAttr)); - assertNotContains("[body]", "testdoc:rawattr"); - assertContains("[header]", "testdoc:intattr"); - assertContains("[header]", "testdoc:rawattr"); assertContains("testdoc:rawattr,intattr", "testdoc:intattr"); assertNotContains("testdoc:intattr", "testdoc:rawattr,intattr"); assertContains("testdoc:intattr,rawattr", "testdoc:rawattr,intattr"); @@ -116,17 +98,17 @@ public class FieldSetTestCase extends DocumentTestCaseBase { } String stringifyFields(Document doc) { - String retVal = ""; + StringBuilder retVal = new StringBuilder(); for (Iterator<Map.Entry<Field, FieldValue>> i = doc.iterator(); i.hasNext(); ) { Map.Entry<Field, FieldValue> v = i.next(); if (retVal.length() > 0) { - retVal += ","; + retVal.append(","); } - retVal += v.getKey().getName() + ":" + v.getValue().toString(); + retVal.append(v.getKey().getName()).append(":").append(v.getValue().toString()); } - return retVal; + return retVal.toString(); } String doCopyFields(Document source, String fieldSet) { @@ -141,9 +123,7 @@ public class FieldSetTestCase extends DocumentTestCaseBase { Document doc = getTestDocument(); doc.removeFieldValue("rawattr"); - assertEquals("", doCopyFields(doc, "[body]")); - assertEquals("floatattr:3.56,stringattr:tjohei,intattr:50,byteattr:30", doCopyFields(doc, "[header]")); - assertEquals("floatattr:3.56,stringattr:tjohei,intattr:50,byteattr:30", doCopyFields(doc, "[all]")); + assertEquals("floatattr:3.56,stringattr:tjohei,intattr:50,byteattr:30", doCopyFields(doc, AllFields.NAME)); assertEquals("floatattr:3.56,byteattr:30", doCopyFields(doc, "testdoc:floatattr,byteattr")); } @@ -159,9 +139,7 @@ public class FieldSetTestCase extends DocumentTestCaseBase { Document doc = getTestDocument(); doc.removeFieldValue("rawattr"); - assertEquals("", doStripFields(doc, "[body]")); - assertEquals("floatattr:3.56,stringattr:tjohei,intattr:50,byteattr:30", doStripFields(doc, "[header]")); - assertEquals("floatattr:3.56,stringattr:tjohei,intattr:50,byteattr:30", doStripFields(doc, "[all]")); + assertEquals("floatattr:3.56,stringattr:tjohei,intattr:50,byteattr:30", doStripFields(doc, AllFields.NAME)); assertEquals("floatattr:3.56,byteattr:30", doStripFields(doc, "testdoc:floatattr,byteattr")); } @@ -169,11 +147,9 @@ public class FieldSetTestCase extends DocumentTestCaseBase { public void testSerialize() { String fieldSets[] = { - "[all]", - "[none]", - "[header]", - "[docid]", - "[body]", + AllFields.NAME, + NoFields.NAME, + DocIdOnly.NAME, "testdoc:rawattr", "testdoc:rawattr,intattr" }; diff --git a/document/src/tests/fieldsettest.cpp b/document/src/tests/fieldsettest.cpp index b0cad61b72a..b82cca86ce7 100644 --- a/document/src/tests/fieldsettest.cpp +++ b/document/src/tests/fieldsettest.cpp @@ -40,11 +40,9 @@ TEST_F(FieldSetTest, testParsing) FieldSetRepo repo; - (void) dynamic_cast<AllFields&>(*repo.parse(docRepo, "[all]")); - (void) dynamic_cast<NoFields&>(*repo.parse(docRepo, "[none]")); - (void) dynamic_cast<DocIdOnly&>(*repo.parse(docRepo, "[id]")); - (void) dynamic_cast<HeaderFields&>(*repo.parse(docRepo, "[header]")); - (void) dynamic_cast<BodyFields&>(*repo.parse(docRepo, "[body]")); + (void) dynamic_cast<AllFields&>(*repo.parse(docRepo, AllFields::NAME)); + (void) dynamic_cast<NoFields&>(*repo.parse(docRepo, NoFields::NAME)); + (void) dynamic_cast<DocIdOnly&>(*repo.parse(docRepo, DocIdOnly::NAME)); FieldSet::UP set = repo.parse(docRepo, "testdoctype1:headerval,content"); FieldCollection& coll = dynamic_cast<FieldCollection&>(*set); @@ -88,13 +86,10 @@ TEST_F(FieldSetTest, testContains) const DocumentType& type = *repo.getDocumentType("testdoctype1"); const Field& headerField = type.getField("headerval"); - const Field& bodyField = type.getField("content"); NoFields none; AllFields all; DocIdOnly id; - HeaderFields h; - BodyFields b; EXPECT_EQ(false, headerField.contains(type.getField("headerlongval"))); EXPECT_EQ(true, headerField.contains(headerField)); @@ -109,17 +104,7 @@ TEST_F(FieldSetTest, testContains) EXPECT_EQ(false, none.contains(id)); EXPECT_EQ(true, id.contains(none)); - EXPECT_EQ(true, h.contains(headerField)); - EXPECT_EQ(false, h.contains(bodyField)); - - EXPECT_EQ(false, b.contains(headerField)); - EXPECT_EQ(true, b.contains(bodyField)); - FieldSetRepo r; - EXPECT_EQ(true, checkContains(r, repo, "[body]", - "testdoctype1:content")); - EXPECT_EQ(false, checkContains(r, repo, "[header]", - "testdoctype1:content")); EXPECT_EQ(true, checkContains(r, repo, "testdoctype1:content,headerval", "testdoctype1:content")); @@ -209,17 +194,12 @@ TEST_F(FieldSetTest, testCopyDocumentFields) const DocumentTypeRepo& repo = testDocMan.getTypeRepo(); Document::UP src(createTestDocument(testDocMan)); - EXPECT_EQ(std::string("content: megafoo megabar\n"), - doCopyFields(*src, repo, "[body]")); EXPECT_EQ(std::string(""), - doCopyFields(*src, repo, "[none]")); - EXPECT_EQ(std::string("headerval: 5678\n" - "hstringval: hello fantastic world\n"), - doCopyFields(*src, repo, "[header]")); + doCopyFields(*src, repo, NoFields::NAME)); EXPECT_EQ(std::string("content: megafoo megabar\n" "headerval: 5678\n" "hstringval: hello fantastic world\n"), - doCopyFields(*src, repo, "[all]")); + doCopyFields(*src, repo, AllFields::NAME)); EXPECT_EQ(std::string("content: megafoo megabar\n" "hstringval: hello fantastic world\n"), doCopyFields(*src, repo, "testdoctype1:hstringval,content")); @@ -228,7 +208,7 @@ TEST_F(FieldSetTest, testCopyDocumentFields) Document dest(src->getType(), DocumentId("id:ns:" + src->getType().getName() + "::bar")); dest.setValue(dest.getField("content"), StringFieldValue("overwriteme")); EXPECT_EQ(std::string("content: megafoo megabar\n"), - doCopyFields(*src, repo, "[body]", &dest)); + doCopyFields(*src, repo, src->getType().getName() + ":content", &dest)); } } @@ -256,15 +236,13 @@ TEST_F(FieldSetTest, testDocumentSubsetCopy) EXPECT_TRUE(doc.get()); EXPECT_EQ(src->getId(), doc->getId()); EXPECT_EQ(src->getType(), doc->getType()); - EXPECT_EQ(doCopyFields(*src, repo, "[all]"), + EXPECT_EQ(doCopyFields(*src, repo, AllFields::NAME), stringifyFields(*doc)); } const char* fieldSets[] = { - "[all]", - "[none]", - "[header]", - "[body]", + AllFields::NAME, + NoFields::NAME, "testdoctype1:hstringval,content" }; for (size_t i = 0; i < sizeof(fieldSets) / sizeof(fieldSets[0]); ++i) { @@ -279,11 +257,9 @@ TEST_F(FieldSetTest, testSerialize) const DocumentTypeRepo& docRepo = testDocMan.getTypeRepo(); const char* fieldSets[] = { - "[all]", - "[none]", - "[header]", - "[docid]", - "[body]", + AllFields::NAME, + NoFields::NAME, + DocIdOnly::NAME, "testdoctype1:content", "testdoctype1:content,hstringval" }; @@ -301,19 +277,14 @@ TEST_F(FieldSetTest, testStripFields) const DocumentTypeRepo& repo = testDocMan.getTypeRepo(); Document::UP src(createTestDocument(testDocMan)); - EXPECT_EQ(std::string("content: megafoo megabar\n"), - doStripFields(*src, repo, "[body]")); EXPECT_EQ(std::string(""), - doStripFields(*src, repo, "[none]")); + doStripFields(*src, repo, NoFields::NAME)); EXPECT_EQ(std::string(""), - doStripFields(*src, repo, "[id]")); - EXPECT_EQ(std::string("headerval: 5678\n" - "hstringval: hello fantastic world\n"), - doStripFields(*src, repo, "[header]")); + doStripFields(*src, repo, DocIdOnly::NAME)); EXPECT_EQ(std::string("content: megafoo megabar\n" "headerval: 5678\n" "hstringval: hello fantastic world\n"), - doStripFields(*src, repo, "[all]")); + doStripFields(*src, repo, AllFields::NAME)); EXPECT_EQ(std::string("content: megafoo megabar\n" "hstringval: hello fantastic world\n"), doStripFields(*src, repo, "testdoctype1:hstringval,content")); diff --git a/document/src/vespa/document/base/field.cpp b/document/src/vespa/document/base/field.cpp index be5d94ce7f0..e85703d203c 100644 --- a/document/src/vespa/document/base/field.cpp +++ b/document/src/vespa/document/base/field.cpp @@ -62,8 +62,6 @@ Field::contains(const FieldSet& fields) const case NONE: case DOCID: return true; - case HEADER: - case BODY: case ALL: return false; } diff --git a/document/src/vespa/document/fieldset/fieldset.h b/document/src/vespa/document/fieldset/fieldset.h index 309a7caf517..6c9acadcf5d 100644 --- a/document/src/vespa/document/fieldset/fieldset.h +++ b/document/src/vespa/document/fieldset/fieldset.h @@ -20,14 +20,12 @@ public: SET, ALL, NONE, - HEADER, // Special collection used by VDS - BODY, // Special collection used by VDS DOCID }; typedef std::unique_ptr<FieldSet> UP; - virtual ~FieldSet() {}; + virtual ~FieldSet() = default; /** * @return Return true if all the fields in "fields" are contained in @@ -54,9 +52,7 @@ public: * needs to only contain fields matching a given field set and can * readily be modified in-place. */ - static void copyFields(Document& dest, - const Document& src, - const FieldSet& fields); + static void copyFields(Document& dest, const Document& src, const FieldSet& fields); /** * Creates a copy of document src containing only the fields given by @@ -64,16 +60,13 @@ public: * See comment for copyFields() for performance notes. * @return The new, (partially) copied document instance. */ - static std::unique_ptr<Document> createDocumentSubsetCopy( - const Document& src, - const FieldSet& fields); + static std::unique_ptr<Document> createDocumentSubsetCopy(const Document& src, const FieldSet& fields); /** * Strip all fields _except_ the ones that are contained within the * fieldsToKeep fieldset. Modifies original document in-place. */ - static void stripFields(Document& doc, - const FieldSet& fieldsToKeep); + static void stripFields(Document& doc, const FieldSet& fieldsToKeep); }; } diff --git a/document/src/vespa/document/fieldset/fieldsetrepo.cpp b/document/src/vespa/document/fieldset/fieldsetrepo.cpp index aa14cfc2b80..e3212f3bd25 100644 --- a/document/src/vespa/document/fieldset/fieldsetrepo.cpp +++ b/document/src/vespa/document/fieldset/fieldsetrepo.cpp @@ -22,16 +22,12 @@ parseSpecialValues(vespalib::stringref name) fs.reset(new AllFields()); } else if ((name.size() == 6) && (name[1] == 'n') && (name[2] == 'o') && (name[3] == 'n') && (name[4] == 'e') && (name[5] == ']')) { fs.reset(new NoFields()); - } else if ((name.size() == 8) && (name[1] == 'h') && (name[2] == 'e') && (name[3] == 'a') && (name[4] == 'd') && (name[5] == 'e') && (name[6] == 'r') && (name[7] == ']')) { - fs.reset(new HeaderFields()); } else if ((name.size() == 7) && (name[1] == 'd') && (name[2] == 'o') && (name[3] == 'c') && (name[4] == 'i') && (name[5] == 'd') && (name[6] == ']')) { fs.reset(new DocIdOnly()); - } else if ((name.size() == 6) && (name[1] == 'b') && (name[2] == 'o') && (name[3] == 'd') && (name[4] == 'y') && (name[5] == ']')) { - fs.reset(new BodyFields()); } else { throw vespalib::IllegalArgumentException( "The only special names (enclosed in '[]') allowed are " - "id, all, none, header, body, not '" + name + "'."); + "id, all, none, not '" + name + "'."); } return fs; } @@ -43,8 +39,7 @@ parseFieldCollection(const DocumentTypeRepo& repo, { const DocumentType* typePtr = repo.getDocumentType(docType); if (!typePtr) { - throw vespalib::IllegalArgumentException( - "Unknown document type " + docType); + throw vespalib::IllegalArgumentException("Unknown document type " + docType); } const DocumentType& type(*typePtr); @@ -90,7 +85,6 @@ FieldSetRepo::serialize(const FieldSet& fieldSet) switch (fieldSet.getType()) { case FieldSet::FIELD: return static_cast<const Field&>(fieldSet).getName(); - break; case FieldSet::SET: { const FieldCollection& collection = static_cast<const FieldCollection&>(fieldSet); @@ -110,15 +104,11 @@ FieldSetRepo::serialize(const FieldSet& fieldSet) return stream.str(); } case FieldSet::ALL: - return "[all]"; + return AllFields::NAME; case FieldSet::NONE: - return "[none]"; - case FieldSet::HEADER: - return "[header]"; - case FieldSet::BODY: - return "[body]"; + return NoFields::NAME; case FieldSet::DOCID: - return "[docid]"; + return DocIdOnly::NAME; default: return ""; } diff --git a/document/src/vespa/document/fieldset/fieldsets.cpp b/document/src/vespa/document/fieldset/fieldsets.cpp index 1f9ea32273b..1a6cd5e6b84 100644 --- a/document/src/vespa/document/fieldset/fieldsets.cpp +++ b/document/src/vespa/document/fieldset/fieldsets.cpp @@ -6,70 +6,7 @@ namespace document { -bool -HeaderFields::contains(const FieldSet& fields) const -{ - switch (fields.getType()) { - case FIELD: - return static_cast<const Field&>(fields).isHeaderField(); - case SET: - { - const FieldCollection& coll = static_cast<const FieldCollection&>(fields); - for (Field::Set::const_iterator iter = coll.getFields().begin(); - iter != coll.getFields().end(); - ++iter) { - if (!(*iter)->isHeaderField()) { - return false; - } - } - - return true; - } - case NONE: - case DOCID: - case HEADER: - return true; - case BODY: - case ALL: - return false; - } - - return false; -} - -bool -BodyFields::contains(const FieldSet& fields) const -{ - switch (fields.getType()) { - case FIELD: - return !static_cast<const Field&>(fields).isHeaderField(); - case SET: - { - const FieldCollection& coll = static_cast<const FieldCollection&>(fields); - for (Field::Set::const_iterator iter = coll.getFields().begin(); - iter != coll.getFields().end(); - ++iter) { - if ((*iter)->isHeaderField()) { - return false; - } - } - - return true; - } - case NONE: - case DOCID: - case BODY: - return true; - case HEADER: - case ALL: - return false; - } - - return false; -} - -FieldCollection::FieldCollection(const DocumentType& type, - const Field::Set& s) +FieldCollection::FieldCollection(const DocumentType& type, const Field::Set& s) : _set(s), _docType(type) { @@ -104,8 +41,6 @@ FieldCollection::contains(const FieldSet& fields) const case NONE: case DOCID: return true; - case BODY: - case HEADER: case ALL: return false; } @@ -126,9 +61,7 @@ FieldCollection::insert(const Field::Set& c) } void -FieldSet::copyFields(Document& dest, - const Document& src, - const FieldSet& fields) +FieldSet::copyFields(Document& dest, const Document& src, const FieldSet& fields) { if (fields.getType() == ALL) { dest.getFields() = src.getFields(); @@ -146,8 +79,7 @@ FieldSet::copyFields(Document& dest, } Document::UP -FieldSet::createDocumentSubsetCopy(const Document& src, - const FieldSet& fields) +FieldSet::createDocumentSubsetCopy(const Document& src, const FieldSet& fields) { auto ret = std::make_unique<Document>(src.getType(), src.getId()); copyFields(*ret, src, fields); @@ -155,8 +87,7 @@ FieldSet::createDocumentSubsetCopy(const Document& src, } void -FieldSet::stripFields(Document& doc, - const FieldSet& fieldsToKeep) +FieldSet::stripFields(Document& doc, const FieldSet& fieldsToKeep) { if (fieldsToKeep.getType() == ALL) { return; diff --git a/document/src/vespa/document/fieldset/fieldsets.h b/document/src/vespa/document/fieldset/fieldsets.h index 1ff34e2d882..7b8ec6bbff0 100644 --- a/document/src/vespa/document/fieldset/fieldsets.h +++ b/document/src/vespa/document/fieldset/fieldsets.h @@ -10,6 +10,7 @@ class DocumentType; class AllFields final : public FieldSet { public: + static constexpr const char * NAME = "[all]"; bool contains(const FieldSet&) const override { return true; } Type getType() const override { return ALL; } FieldSet* clone() const override { return new AllFields(); } @@ -18,6 +19,7 @@ public: class NoFields final : public FieldSet { public: + static constexpr const char * NAME = "[none]"; bool contains(const FieldSet& f) const override { return f.getType() == NONE; } Type getType() const override { return NONE; } FieldSet* clone() const override { return new NoFields(); } @@ -26,6 +28,7 @@ public: class DocIdOnly final : public FieldSet { public: + static constexpr const char * NAME = "[id]"; bool contains(const FieldSet& fields) const override { return fields.getType() == DOCID || fields.getType() == NONE; } @@ -33,22 +36,6 @@ public: FieldSet* clone() const override { return new DocIdOnly(); } }; -class HeaderFields final : public FieldSet -{ -public: - bool contains(const FieldSet& fields) const override; - Type getType() const override { return HEADER; } - FieldSet* clone() const override { return new HeaderFields(); } -}; - -class BodyFields final : public FieldSet -{ -public: - bool contains(const FieldSet& fields) const override; - Type getType() const override { return BODY; } - FieldSet* clone() const override { return new BodyFields(); } -}; - class FieldCollection : public FieldSet { public: diff --git a/documentapi/src/main/java/com/yahoo/documentapi/VisitorParameters.java b/documentapi/src/main/java/com/yahoo/documentapi/VisitorParameters.java index 5b511a1dea8..6a059699b2b 100644 --- a/documentapi/src/main/java/com/yahoo/documentapi/VisitorParameters.java +++ b/documentapi/src/main/java/com/yahoo/documentapi/VisitorParameters.java @@ -3,6 +3,7 @@ package com.yahoo.documentapi; import com.yahoo.document.BucketId; import com.yahoo.document.FixedBucketSpaces; +import com.yahoo.document.fieldset.AllFields; import com.yahoo.documentapi.messagebus.loadtypes.LoadType; import com.yahoo.documentapi.messagebus.protocol.DocumentProtocol; import com.yahoo.messagebus.ThrottlePolicy; @@ -29,7 +30,7 @@ public class VisitorParameters extends Parameters { private long fromTimestamp = 0; private long toTimestamp = 0; boolean visitRemoves = false; - private String fieldSet = "[all]"; + private String fieldSet = AllFields.NAME; boolean visitInconsistentBuckets = false; private ProgressToken resumeToken = null; private String resumeFileName = ""; diff --git a/documentapi/src/main/java/com/yahoo/documentapi/messagebus/MessageBusAsyncSession.java b/documentapi/src/main/java/com/yahoo/documentapi/messagebus/MessageBusAsyncSession.java index 493871d45c0..ab39e4c30ff 100644 --- a/documentapi/src/main/java/com/yahoo/documentapi/messagebus/MessageBusAsyncSession.java +++ b/documentapi/src/main/java/com/yahoo/documentapi/messagebus/MessageBusAsyncSession.java @@ -5,6 +5,7 @@ import com.yahoo.document.Document; import com.yahoo.document.DocumentId; import com.yahoo.document.DocumentPut; import com.yahoo.document.DocumentUpdate; +import com.yahoo.document.fieldset.AllFields; import com.yahoo.documentapi.AsyncParameters; import com.yahoo.documentapi.AsyncSession; import com.yahoo.documentapi.DocumentIdResponse; @@ -114,7 +115,7 @@ public class MessageBusAsyncSession implements MessageBusSession, AsyncSession { @Override public Result get(DocumentId id, DocumentProtocol.Priority pri) { - GetDocumentMessage msg = new GetDocumentMessage(id, "[all]"); + GetDocumentMessage msg = new GetDocumentMessage(id, AllFields.NAME); msg.setPriority(pri); return send(msg); } diff --git a/documentapi/src/main/java/com/yahoo/documentapi/messagebus/MessageBusSyncSession.java b/documentapi/src/main/java/com/yahoo/documentapi/messagebus/MessageBusSyncSession.java index 9a16cef2f84..a9621950b88 100755 --- a/documentapi/src/main/java/com/yahoo/documentapi/messagebus/MessageBusSyncSession.java +++ b/documentapi/src/main/java/com/yahoo/documentapi/messagebus/MessageBusSyncSession.java @@ -6,6 +6,7 @@ import com.yahoo.document.DocumentId; import com.yahoo.document.DocumentPut; import com.yahoo.document.DocumentRemove; import com.yahoo.document.DocumentUpdate; +import com.yahoo.document.fieldset.AllFields; import com.yahoo.documentapi.AsyncParameters; import com.yahoo.documentapi.DocumentAccessException; import com.yahoo.documentapi.Response; @@ -135,7 +136,7 @@ public class MessageBusSyncSession implements MessageBusSession, SyncSession, Re @Override public Document get(DocumentId id, Duration timeout) { - return get(id, "[all]", DocumentProtocol.Priority.NORMAL_1, timeout); + return get(id, AllFields.NAME, DocumentProtocol.Priority.NORMAL_1, timeout); } @Override diff --git a/documentapi/src/main/java/com/yahoo/documentapi/messagebus/protocol/CreateVisitorMessage.java b/documentapi/src/main/java/com/yahoo/documentapi/messagebus/protocol/CreateVisitorMessage.java index c4e17141237..990585f39e1 100644 --- a/documentapi/src/main/java/com/yahoo/documentapi/messagebus/protocol/CreateVisitorMessage.java +++ b/documentapi/src/main/java/com/yahoo/documentapi/messagebus/protocol/CreateVisitorMessage.java @@ -3,6 +3,7 @@ package com.yahoo.documentapi.messagebus.protocol; import com.yahoo.document.BucketId; import com.yahoo.document.FixedBucketSpaces; +import com.yahoo.document.fieldset.AllFields; import java.util.ArrayList; import java.util.Iterator; @@ -23,7 +24,7 @@ public class CreateVisitorMessage extends DocumentMessage { private long fromTime = 0; private long toTime = 0; private boolean visitRemoves = false; - private String fieldSet = "[all]"; + private String fieldSet = AllFields.NAME; private boolean visitInconsistentBuckets = false; private Map<String, byte[]> params = new TreeMap<>(); private int maxBucketsPerVisitor = 1; diff --git a/documentapi/src/main/java/com/yahoo/documentapi/messagebus/protocol/GetDocumentMessage.java b/documentapi/src/main/java/com/yahoo/documentapi/messagebus/protocol/GetDocumentMessage.java index cd115cfbf0e..f65550bbf0f 100755 --- a/documentapi/src/main/java/com/yahoo/documentapi/messagebus/protocol/GetDocumentMessage.java +++ b/documentapi/src/main/java/com/yahoo/documentapi/messagebus/protocol/GetDocumentMessage.java @@ -2,6 +2,7 @@ package com.yahoo.documentapi.messagebus.protocol; import com.yahoo.document.DocumentId; +import com.yahoo.document.fieldset.AllFields; import java.util.Arrays; @@ -10,7 +11,7 @@ import java.util.Arrays; */ public class GetDocumentMessage extends DocumentMessage { - final static String DEFAULT_FIELD_SET = "[all]"; + final static String DEFAULT_FIELD_SET = AllFields.NAME; private DocumentId documentId = null; private String fieldSet = DEFAULT_FIELD_SET; diff --git a/documentapi/src/test/java/com/yahoo/documentapi/VisitorParametersTestCase.java b/documentapi/src/test/java/com/yahoo/documentapi/VisitorParametersTestCase.java index 61e0c9ba8b3..5941c2ac0e2 100644 --- a/documentapi/src/test/java/com/yahoo/documentapi/VisitorParametersTestCase.java +++ b/documentapi/src/test/java/com/yahoo/documentapi/VisitorParametersTestCase.java @@ -1,6 +1,7 @@ // Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.documentapi; +import com.yahoo.document.fieldset.AllFields; import com.yahoo.documentapi.messagebus.loadtypes.LoadType; import com.yahoo.documentapi.messagebus.protocol.DocumentProtocol; import org.junit.Test; @@ -23,7 +24,7 @@ public class VisitorParametersTestCase { params.setRoute("extraterrestrial/highway"); params.setTimeoutMs(1337); params.setMaxPending(111); - params.setFieldSet("[header]"); + params.setFieldSet(AllFields.NAME); params.setLoadType(loadType); params.setVisitRemoves(true); params.setVisitInconsistentBuckets(true); @@ -59,7 +60,7 @@ public class VisitorParametersTestCase { assertEquals("extraterrestrial/highway", copy.getRoute().toString()); assertEquals(1337, copy.getTimeoutMs()); assertEquals(111, copy.getMaxPending()); - assertEquals("[header]", copy.getFieldSet()); + assertEquals(AllFields.NAME, copy.getFieldSet()); assertEquals(loadType, copy.getLoadType()); assertEquals(true, copy.getVisitRemoves()); assertEquals(true, copy.getVisitInconsistentBuckets()); @@ -98,7 +99,7 @@ public class VisitorParametersTestCase { " Visitor library parameters:\n" + " groovy : dudes\n" + " ninja : turtles\n" + - " Field set: [header]\n" + + " Field set: [all]\n" + " Route: extraterrestrial/highway\n" + " Weight: 1.0\n" + " Max firstpass hits: 555\n" + diff --git a/documentapi/src/test/java/com/yahoo/documentapi/local/LocalDocumentApiTestCase.java b/documentapi/src/test/java/com/yahoo/documentapi/local/LocalDocumentApiTestCase.java index d1361e50973..69dc7c6da74 100644 --- a/documentapi/src/test/java/com/yahoo/documentapi/local/LocalDocumentApiTestCase.java +++ b/documentapi/src/test/java/com/yahoo/documentapi/local/LocalDocumentApiTestCase.java @@ -8,6 +8,7 @@ import com.yahoo.document.DocumentRemove; import com.yahoo.document.DocumentType; import com.yahoo.document.DocumentUpdate; import com.yahoo.document.datatypes.StringFieldValue; +import com.yahoo.document.fieldset.DocIdOnly; import com.yahoo.document.select.parser.ParseException; import com.yahoo.document.update.FieldUpdate; import com.yahoo.documentapi.AsyncParameters; @@ -183,7 +184,7 @@ public class LocalDocumentApiTestCase extends AbstractDocumentApiTestCase { ((StringFieldValue) doc3.getFieldValue("artist")).getString()); // Visit the documents again, retrieving none of the document fields - parameters.setFieldSet("[id]"); + parameters.setFieldSet(DocIdOnly.NAME); received.clear(); access.createVisitorSession(parameters).waitUntilDone(0); assertSame(VisitorControlHandler.CompletionCode.SUCCESS, diff --git a/documentapi/src/test/java/com/yahoo/documentapi/messagebus/protocol/test/PolicyTestCase.java b/documentapi/src/test/java/com/yahoo/documentapi/messagebus/protocol/test/PolicyTestCase.java index fb9cec88836..c054ec860ca 100755 --- a/documentapi/src/test/java/com/yahoo/documentapi/messagebus/protocol/test/PolicyTestCase.java +++ b/documentapi/src/test/java/com/yahoo/documentapi/messagebus/protocol/test/PolicyTestCase.java @@ -7,6 +7,7 @@ import com.yahoo.document.DocumentPut; import com.yahoo.document.DocumentTypeManager; import com.yahoo.document.DocumentTypeManagerConfigurer; import com.yahoo.document.DocumentUpdate; +import com.yahoo.document.fieldset.AllFields; import com.yahoo.documentapi.messagebus.protocol.ANDPolicy; import com.yahoo.documentapi.messagebus.protocol.DocumentProtocol; import com.yahoo.documentapi.messagebus.protocol.DocumentRouteSelectorPolicy; @@ -368,7 +369,7 @@ public class PolicyTestCase { PolicyTestFrame frame = new PolicyTestFrame(manager); frame.setHop(new HopSpec("test", getDocumentRouteSelectorRawConfig()) .addRecipient("foo").addRecipient("bar")); - frame.setMessage(new GetDocumentMessage(new DocumentId("id:ns:testdoc::yarn"), "[all]")); + frame.setMessage(new GetDocumentMessage(new DocumentId("id:ns:testdoc::yarn"), AllFields.NAME)); List<RoutingNode> selected = frame.select(2); for (int i = 0, len = selected.size(); i < len; ++i) { Document doc = null; diff --git a/documentapi/src/test/java/com/yahoo/documentapi/messagebus/test/MessageBusVisitorSessionTestCase.java b/documentapi/src/test/java/com/yahoo/documentapi/messagebus/test/MessageBusVisitorSessionTestCase.java index 9d0011ef05d..35e0c21f93f 100755 --- a/documentapi/src/test/java/com/yahoo/documentapi/messagebus/test/MessageBusVisitorSessionTestCase.java +++ b/documentapi/src/test/java/com/yahoo/documentapi/messagebus/test/MessageBusVisitorSessionTestCase.java @@ -3,6 +3,8 @@ package com.yahoo.documentapi.messagebus.test; import com.yahoo.document.BucketId; import com.yahoo.document.DocumentId; +import com.yahoo.document.fieldset.AllFields; +import com.yahoo.document.fieldset.DocIdOnly; import com.yahoo.document.select.parser.ParseException; import com.yahoo.documentapi.*; import com.yahoo.documentapi.messagebus.MessageBusVisitorSession; @@ -472,7 +474,7 @@ public class MessageBusVisitorSessionTestCase { if (msg.getMaxPendingReplyCount() != 32) { sb.append("max pending=").append(msg.getMaxPendingReplyCount()).append("\n"); } - if (!"[all]".equals(msg.getFieldSet())) { + if (!AllFields.NAME.equals(msg.getFieldSet())) { sb.append("fieldset=").append(msg.getFieldSet()).append("\n"); } if (msg.getVisitInconsistentBuckets()) { @@ -712,14 +714,13 @@ public class MessageBusVisitorSessionTestCase { params.setRoute("extraterrestrial/highway"); params.setTimeoutMs(1337); params.setMaxPending(111); - params.setFieldSet("[header]"); + params.setFieldSet(DocIdOnly.NAME); params.setLoadType(new LoadType(3, "samnmax", DocumentProtocol.Priority.HIGH_3)); params.setVisitRemoves(true); params.setVisitInconsistentBuckets(true); params.setTraceLevel(9); - MessageBusVisitorSession visitorSession = createVisitorSession( - sender, receiver, executor, params); + MessageBusVisitorSession visitorSession = createVisitorSession(sender, receiver, executor, params); visitorSession.start(); // Process initial task which sends a single CreateVisitor. @@ -735,7 +736,7 @@ public class MessageBusVisitorSessionTestCase { "from timestamp=9001\n" + "to timestamp=10001\n" + "max pending=111\n" + - "fieldset=[header]\n" + + "fieldset=[id]\n" + "visit inconsistent=true\n" + "visit removes=true\n" + "parameters=[\n" + diff --git a/documentapi/src/tests/policies/policies_test.cpp b/documentapi/src/tests/policies/policies_test.cpp index 0f0b9bd4504..61a8618556b 100644 --- a/documentapi/src/tests/policies/policies_test.cpp +++ b/documentapi/src/tests/policies/policies_test.cpp @@ -329,7 +329,7 @@ Test::testExternSend() mbus::DestinationSession::UP ds = dst.mb.createDestinationSession("session", true, dr); // Send message from local node to remote cluster and resolve route there. - mbus::Message::UP msg(new GetDocumentMessage(DocumentId("id:ns:testdoc::"), 0)); + mbus::Message::UP msg = std::make_unique<GetDocumentMessage>(DocumentId("id:ns:testdoc::")); msg->getTrace().setLevel(9); msg->setRoute(mbus::Route::parse(vespalib::make_string("[Extern:tcp/localhost:%d;itr/session] default", slobrok.port()))); @@ -365,7 +365,7 @@ Test::testExternMultipleSlobroks() std::make_shared<DocumentProtocol>(_loadTypes, _repo)); mbus::DestinationSession::UP ds = dst.mb.createDestinationSession("session", true, dr); - mbus::Message::UP msg(new GetDocumentMessage(DocumentId("id:ns:testdoc::"), 0)); + mbus::Message::UP msg = std::make_unique<GetDocumentMessage>(DocumentId("id:ns:testdoc::")); msg->setRoute(mbus::Route::parse(vespalib::make_string("[Extern:%s;dst/session]", spec.c_str()))); ASSERT_TRUE(ss->send(std::move(msg)).isAccepted()); ASSERT_TRUE((msg = dr.getMessage(TIMEOUT))); @@ -381,7 +381,7 @@ Test::testExternMultipleSlobroks() std::make_shared<DocumentProtocol>(_loadTypes, _repo)); mbus::DestinationSession::UP ds = dst.mb.createDestinationSession("session", true, dr); - mbus::Message::UP msg(new GetDocumentMessage(DocumentId("id:ns:testdoc::"), 0)); + mbus::Message::UP msg = std::make_unique<GetDocumentMessage>(DocumentId("id:ns:testdoc::")); msg->setRoute(mbus::Route::parse(vespalib::make_string("[Extern:%s;dst/session]", spec.c_str()))); ASSERT_TRUE(ss->send(std::move(msg)).isAccepted()); ASSERT_TRUE((msg = dr.getMessage(TIMEOUT))); @@ -615,7 +615,7 @@ Test::testDocumentRouteSelector() .addRecipient("foo") .addRecipient("bar")); - frame.setMessage(make_unique<GetDocumentMessage>(DocumentId("id:ns:testdoc::"), 0)); + frame.setMessage(make_unique<GetDocumentMessage>(DocumentId("id:ns:testdoc::"))); EXPECT_TRUE(frame.testSelect(StringList().add("foo"))); mbus::Message::UP put = make_unique<PutDocumentMessage>(make_shared<Document>(*_docType, DocumentId("id:ns:testdoc::"))); diff --git a/documentapi/src/vespa/documentapi/messagebus/messages/getdocumentmessage.cpp b/documentapi/src/vespa/documentapi/messagebus/messages/getdocumentmessage.cpp index 821af8e256b..acc3e61843e 100644 --- a/documentapi/src/vespa/documentapi/messagebus/messages/getdocumentmessage.cpp +++ b/documentapi/src/vespa/documentapi/messagebus/messages/getdocumentmessage.cpp @@ -3,20 +3,21 @@ #include "getdocumentmessage.h" #include "getdocumentreply.h" #include <vespa/documentapi/messagebus/documentprotocol.h> +#include <vespa/document/fieldset/fieldsets.h> namespace documentapi { GetDocumentMessage::GetDocumentMessage() : DocumentMessage(), _documentId(), - _fieldSet("[all]") + _fieldSet(document::AllFields::NAME) {} -GetDocumentMessage::GetDocumentMessage(const document::DocumentId &documentId, int flags) : +GetDocumentMessage::GetDocumentMessage(const document::DocumentId &documentId) : DocumentMessage(), - _documentId(documentId) + _documentId(documentId), + _fieldSet(document::AllFields::NAME) { - setFlags(flags); } GetDocumentMessage::GetDocumentMessage(const document::DocumentId &documentId, @@ -27,13 +28,12 @@ GetDocumentMessage::GetDocumentMessage(const document::DocumentId &documentId, { } -GetDocumentMessage::~GetDocumentMessage() { -} +GetDocumentMessage::~GetDocumentMessage() = default; DocumentReply::UP GetDocumentMessage::doCreateReply() const { - return DocumentReply::UP(new GetDocumentReply()); + return std::make_unique<GetDocumentReply>(); } uint32_t diff --git a/documentapi/src/vespa/documentapi/messagebus/messages/getdocumentmessage.h b/documentapi/src/vespa/documentapi/messagebus/messages/getdocumentmessage.h index 619367faf4d..d157b68c4ed 100644 --- a/documentapi/src/vespa/documentapi/messagebus/messages/getdocumentmessage.h +++ b/documentapi/src/vespa/documentapi/messagebus/messages/getdocumentmessage.h @@ -21,11 +21,6 @@ public: typedef std::unique_ptr<GetDocumentMessage> UP; typedef std::shared_ptr<GetDocumentMessage> SP; - enum { - FLAG_NONE = 0, - FLAG_ONLY_HEADER = 1 - }; - /** * Constructs a new message for deserialization. */ @@ -35,9 +30,8 @@ public: * Constructs a new document get message. * * @param documentId The identifier of the document to retrieve. - * @param flags How to retrieve the document. */ - GetDocumentMessage(const document::DocumentId &documentId, int flags = 0); + explicit GetDocumentMessage(const document::DocumentId &documentId); /** * Constructs a new document get message. @@ -45,8 +39,7 @@ public: * @param documentId The identifier of the document to retrieve. * @param fieldSet The fields to retrieve (comma-separated) */ - GetDocumentMessage(const document::DocumentId &documentId, - vespalib::stringref fieldSet); + GetDocumentMessage(const document::DocumentId &documentId, vespalib::stringref fieldSet); ~GetDocumentMessage(); @@ -65,23 +58,6 @@ public: void setDocumentId(const document::DocumentId &documentId); /** - * Returs the storage flags of this message. - * - * @return The storage flags. - */ - int getFlags() const { return (_fieldSet == "[header]" ? FLAG_ONLY_HEADER : - FLAG_NONE); }; - - /** - * Sets the storage flags of this message. - * - * @param flags The flags to set. - */ - void setFlags(int flags) { - _fieldSet = (flags == FLAG_ONLY_HEADER) ? "[header]" : "[all]"; - } - - /** * Returns the fields to be retrieved by the get. */ const string& getFieldSet() const { return _fieldSet; } diff --git a/documentapi/src/vespa/documentapi/messagebus/messages/visitor.cpp b/documentapi/src/vespa/documentapi/messagebus/messages/visitor.cpp index 453e93fd7eb..26e5344df2d 100644 --- a/documentapi/src/vespa/documentapi/messagebus/messages/visitor.cpp +++ b/documentapi/src/vespa/documentapi/messagebus/messages/visitor.cpp @@ -5,6 +5,7 @@ #include <vespa/vespalib/objects/nbostream.h> #include <vespa/vespalib/util/growablebytebuffer.h> #include <vespa/document/util/bytebuffer.h> +#include <vespa/document/fieldset/fieldsets.h> #include <climits> using document::FixedBucketSpaces; @@ -24,7 +25,7 @@ CreateVisitorMessage::CreateVisitorMessage() : _fromTime(0), _toTime(0), _visitRemoves(false), - _fieldSet("[all]"), + _fieldSet(document::AllFields::NAME), _visitInconsistentBuckets(false), _params(), _version(42), @@ -47,7 +48,7 @@ CreateVisitorMessage::CreateVisitorMessage(const string& libraryName, _fromTime(0), _toTime(0), _visitRemoves(false), - _fieldSet("[all]"), + _fieldSet(document::AllFields::NAME), _visitInconsistentBuckets(false), _params(), _version(42), diff --git a/persistence/src/vespa/persistence/conformancetest/conformancetest.cpp b/persistence/src/vespa/persistence/conformancetest/conformancetest.cpp index 036a2b87692..3d15d09814f 100644 --- a/persistence/src/vespa/persistence/conformancetest/conformancetest.cpp +++ b/persistence/src/vespa/persistence/conformancetest/conformancetest.cpp @@ -43,8 +43,7 @@ PersistenceProvider::UP getSpi(ConformanceTest::PersistenceFactory &factory, enum SELECTION_FIELDS { METADATA_ONLY = 0, - FIELDS_HEADER = 1, - FIELDS_BODY = 2 + ALL_FIELDS = 1 }; CreateIteratorResult @@ -52,13 +51,11 @@ createIterator(PersistenceProvider& spi, const Bucket& b, const Selection& sel, IncludedVersions versions = NEWEST_DOCUMENT_ONLY, - int fields = FIELDS_HEADER | FIELDS_BODY) + int fields = ALL_FIELDS) { document::FieldSet::UP fieldSet; - if (fields & FIELDS_BODY) { + if (fields & ALL_FIELDS) { fieldSet.reset(new document::AllFields()); - } else if (fields & FIELDS_HEADER) { - fieldSet.reset(new document::HeaderFields()); } else { fieldSet.reset(new document::DocIdOnly()); } diff --git a/searchcore/src/tests/proton/document_iterator/document_iterator_test.cpp b/searchcore/src/tests/proton/document_iterator/document_iterator_test.cpp index 9342ddd4b8a..b76d433337b 100644 --- a/searchcore/src/tests/proton/document_iterator/document_iterator_test.cpp +++ b/searchcore/src/tests/proton/document_iterator/document_iterator_test.cpp @@ -748,7 +748,9 @@ TEST("require that document selection and timestamp range works together") { } TEST("require that fieldset limits fields returned") { - DocumentIterator itr(bucket(5), document::HeaderFields(), selectAll(), newestV(), -1, false); + document::FieldCollection limited(getDocType()); + limited.insert(getDocType().getField("header")); + DocumentIterator itr(bucket(5), limited, selectAll(), newestV(), -1, false); itr.add(doc_with_fields("id:ns:foo::xxx1", Timestamp(1), bucket(5))); IterateResult res = itr.iterate(largeNum); EXPECT_TRUE(res.isCompleted()); diff --git a/storage/src/tests/distributor/distributortest.cpp b/storage/src/tests/distributor/distributortest.cpp index 0da860d0542..dc0a01448af 100644 --- a/storage/src/tests/distributor/distributortest.cpp +++ b/storage/src/tests/distributor/distributortest.cpp @@ -8,6 +8,7 @@ #include <vespa/storageframework/defaultimplementation/thread/threadpoolimpl.h> #include <tests/distributor/distributortestutil.h> #include <vespa/document/bucket/fixed_bucket_spaces.h> +#include <vespa/document/fieldset/fieldsets.h> #include <vespa/document/test/make_document_bucket.h> #include <vespa/document/test/make_bucket_space.h> #include <vespa/storage/config/config-stor-distributormanager.h> @@ -755,7 +756,7 @@ auto make_dummy_get_command_for_bucket_1() { return std::make_shared<api::GetCommand>( makeDocumentBucket(document::BucketId(0)), document::DocumentId("id:foo:testdoctype1:n=1:foo"), - "[all]"); + document::AllFields::NAME); } } diff --git a/storage/src/tests/distributor/externaloperationhandlertest.cpp b/storage/src/tests/distributor/externaloperationhandlertest.cpp index 03ba148277e..1f0fba90200 100644 --- a/storage/src/tests/distributor/externaloperationhandlertest.cpp +++ b/storage/src/tests/distributor/externaloperationhandlertest.cpp @@ -8,6 +8,7 @@ #include <vespa/storageapi/message/persistence.h> #include <vespa/document/repo/documenttyperepo.h> #include <vespa/document/update/documentupdate.h> +#include <vespa/document/fieldset/fieldsets.h> #include <vespa/document/test/make_document_bucket.h> #include <vespa/vespalib/gtest/gtest.h> @@ -157,13 +158,13 @@ ExternalOperationHandlerTest::findOwned1stNotOwned2ndInStates( std::shared_ptr<api::GetCommand> ExternalOperationHandlerTest::makeGetCommand(const vespalib::string& id) const { - return std::make_shared<api::GetCommand>(makeDocumentBucket(document::BucketId(0)), DocumentId(id), "[all]"); + return std::make_shared<api::GetCommand>(makeDocumentBucket(document::BucketId(0)), DocumentId(id), document::AllFields::NAME); } std::shared_ptr<api::GetCommand> ExternalOperationHandlerTest::makeGetCommandForUser(uint64_t id) const { DocumentId docId(vespalib::make_string("id:foo:test:n=%" PRIu64 ":bar", id)); - return std::make_shared<api::GetCommand>(makeDocumentBucket(document::BucketId(0)), docId, "[all]"); + return std::make_shared<api::GetCommand>(makeDocumentBucket(document::BucketId(0)), docId, document::AllFields::NAME); } std::shared_ptr<api::UpdateCommand> ExternalOperationHandlerTest::makeUpdateCommand( diff --git a/storage/src/tests/distributor/getoperationtest.cpp b/storage/src/tests/distributor/getoperationtest.cpp index d4d14314790..09e4f41d275 100644 --- a/storage/src/tests/distributor/getoperationtest.cpp +++ b/storage/src/tests/distributor/getoperationtest.cpp @@ -3,6 +3,7 @@ #include <vespa/config/helper/configgetter.h> #include <vespa/document/config/config-documenttypes.h> #include <vespa/document/repo/documenttyperepo.h> +#include <vespa/document/fieldset/fieldsets.h> #include <vespa/storage/bucketdb/bucketdatabase.h> #include <vespa/storage/distributor/distributor_bucket_space.h> #include <vespa/storage/distributor/externaloperationhandler.h> @@ -53,7 +54,7 @@ struct GetOperationTest : Test, DistributorTestUtil { } void sendGet(api::InternalReadConsistency consistency = api::InternalReadConsistency::Strong) { - auto msg = std::make_shared<api::GetCommand>(makeDocumentBucket(BucketId(0)), docId, "[all]"); + auto msg = std::make_shared<api::GetCommand>(makeDocumentBucket(BucketId(0)), docId, document::AllFields::NAME); op = std::make_unique<GetOperation>( getExternalOperationHandler(), getDistributorBucketSpace(), getDistributorBucketSpace().getBucketDatabase().acquire_read_guard(), diff --git a/storage/src/tests/distributor/twophaseupdateoperationtest.cpp b/storage/src/tests/distributor/twophaseupdateoperationtest.cpp index e42e7684f81..635e5b9883b 100644 --- a/storage/src/tests/distributor/twophaseupdateoperationtest.cpp +++ b/storage/src/tests/distributor/twophaseupdateoperationtest.cpp @@ -1,18 +1,16 @@ // Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. #include <vespa/config/helper/configgetter.h> -#include <vespa/document/config/config-documenttypes.h> #include <vespa/document/repo/documenttyperepo.h> #include <vespa/document/base/testdocrepo.h> #include <vespa/document/update/arithmeticvalueupdate.h> -#include <iomanip> -#include <tests/common/dummystoragelink.h> #include <vespa/storage/distributor/externaloperationhandler.h> #include <vespa/storageapi/message/persistence.h> #include <vespa/storage/distributor/operations/external/twophaseupdateoperation.h> #include <tests/distributor/distributortestutil.h> #include <vespa/document/test/make_document_bucket.h> #include <vespa/storage/distributor/distributor.h> +#include <vespa/document/fieldset/fieldsets.h> #include <vespa/vespalib/gtest/gtest.h> #include <gmock/gmock.h> @@ -1100,13 +1098,13 @@ TEST_F(ThreePhaseUpdateTest, metadata_only_gets_are_sent_if_3phase_update_enable ASSERT_EQ("Get => 0,Get => 1", _sender.getCommands(true)); { auto& get_cmd = dynamic_cast<const api::GetCommand&>(*_sender.command(0)); - EXPECT_EQ("[none]", get_cmd.getFieldSet()); + EXPECT_EQ(document::NoFields::NAME, get_cmd.getFieldSet()); EXPECT_EQ(get_cmd.internal_read_consistency(), api::InternalReadConsistency::Weak); checkMessageSettingsPropagatedTo(_sender.command(0)); } { auto& get_cmd = dynamic_cast<const api::GetCommand&>(*_sender.command(1)); - EXPECT_EQ("[none]", get_cmd.getFieldSet()); + EXPECT_EQ(document::NoFields::NAME, get_cmd.getFieldSet()); EXPECT_EQ(get_cmd.internal_read_consistency(), api::InternalReadConsistency::Weak); checkMessageSettingsPropagatedTo(_sender.command(1)); } @@ -1125,7 +1123,7 @@ TEST_F(ThreePhaseUpdateTest, full_document_get_sent_to_replica_with_highest_time ASSERT_EQ("Get => 1", _sender.getCommands(true, false, 2)); { auto& get_cmd = dynamic_cast<const api::GetCommand&>(*_sender.command(2)); - EXPECT_EQ("[all]", get_cmd.getFieldSet()); + EXPECT_EQ(document::AllFields::NAME, get_cmd.getFieldSet()); EXPECT_EQ(get_cmd.internal_read_consistency(), api::InternalReadConsistency::Strong); } } diff --git a/storage/src/tests/distributor/visitoroperationtest.cpp b/storage/src/tests/distributor/visitoroperationtest.cpp index 5d7871376cb..8a9d8063525 100644 --- a/storage/src/tests/distributor/visitoroperationtest.cpp +++ b/storage/src/tests/distributor/visitoroperationtest.cpp @@ -9,11 +9,9 @@ #include <vespa/storage/distributor/distributormetricsset.h> #include <tests/distributor/distributortestutil.h> #include <vespa/storage/distributor/distributor.h> -#include <tests/common/dummystoragelink.h> +#include <vespa/document/fieldset/fieldsets.h> #include <vespa/document/test/make_bucket_space.h> #include <vespa/vespalib/gtest/gtest.h> -#include <gmock/gmock.h> -#include <ostream> using namespace document; using namespace storage::api; @@ -57,7 +55,7 @@ struct VisitorOperationTest : Test, DistributorTestUtil { makeBucketSpace(), libraryName, instanceId, docSelection); cmd->setControlDestination("controldestination"); cmd->setDataDestination("datadestination"); - cmd->setFieldSet("[header]"); + cmd->setFieldSet(document::AllFields::NAME); if (visitRemoves) { cmd->setVisitRemoves(); } @@ -176,7 +174,7 @@ VisitorOperationTest::doStandardVisitTest(const std::string& clusterState) msg->setToTime(0); msg->addBucketToBeVisited(id); msg->addBucketToBeVisited(nullId); - msg->setFieldSet("[header]"); + msg->setFieldSet(document::AllFields::NAME); msg->setVisitRemoves(); msg->setTimeout(1234ms); msg->getTrace().setLevel(7); @@ -201,7 +199,7 @@ VisitorOperationTest::doStandardVisitTest(const std::string& clusterState) EXPECT_EQ(1, cvc->getBuckets().size()); EXPECT_EQ(api::Timestamp(10), cvc->getFromTime()); EXPECT_GT(cvc->getToTime(), 0); - EXPECT_EQ("[header]", cvc->getFieldSet()); + EXPECT_EQ(document::AllFields::NAME, cvc->getFieldSet()); EXPECT_TRUE(cvc->visitRemoves()); EXPECT_EQ(1234ms, cvc->getTimeout()); EXPECT_EQ(7, cvc->getTrace().getLevel()); diff --git a/storage/src/tests/persistence/common/filestortestfixture.cpp b/storage/src/tests/persistence/common/filestortestfixture.cpp index 63b7885fc53..352f1326463 100644 --- a/storage/src/tests/persistence/common/filestortestfixture.cpp +++ b/storage/src/tests/persistence/common/filestortestfixture.cpp @@ -5,6 +5,7 @@ #include <vespa/persistence/dummyimpl/dummypersistence.h> #include <tests/persistence/common/filestortestfixture.h> #include <vespa/document/repo/documenttyperepo.h> +#include <vespa/document/fieldset/fieldsets.h> #include <vespa/document/test/make_document_bucket.h> #include <vespa/persistence/spi/test.h> #include <sstream> @@ -96,8 +97,7 @@ FileStorTestFixture::TestFileStorComponents::sendDummyGet( { std::ostringstream id; id << "id:foo:testdoctype1:n=" << bid.getId() << ":0"; - std::shared_ptr<api::GetCommand> cmd( - new api::GetCommand(makeDocumentBucket(bid), document::DocumentId(id.str()), "[all]")); + auto cmd = std::make_shared<api::GetCommand>(makeDocumentBucket(bid), document::DocumentId(id.str()), document::AllFields::NAME); cmd->setAddress(makeSelfAddress()); cmd->setPriority(255); top.sendDown(cmd); diff --git a/storage/src/tests/persistence/filestorage/filestormanagertest.cpp b/storage/src/tests/persistence/filestorage/filestormanagertest.cpp index bf0083311fb..b7f2cb81956 100644 --- a/storage/src/tests/persistence/filestorage/filestormanagertest.cpp +++ b/storage/src/tests/persistence/filestorage/filestormanagertest.cpp @@ -6,6 +6,7 @@ #include <tests/persistence/filestorage/forwardingmessagesender.h> #include <vespa/document/repo/documenttyperepo.h> #include <vespa/document/test/make_document_bucket.h> +#include <vespa/document/fieldset/fieldsets.h> #include <vespa/storage/storageserver/statemanager.h> #include <vespa/storage/bucketdb/bucketmanager.h> #include <vespa/storage/persistence/persistencethread.h> @@ -20,7 +21,6 @@ #include <vespa/persistence/spi/test.h> #include <vespa/config/common/exceptions.h> #include <vespa/fastos/file.h> -#include <vespa/vespalib/util/time.h> #include <vespa/vespalib/gtest/gtest.h> #include <atomic> #include <thread> @@ -281,7 +281,7 @@ TEST_F(FileStorManagerTest, header_only_put) { } // Getting it { - auto cmd = std::make_shared<api::GetCommand>(makeDocumentBucket(bid), doc->getId(), "[all]"); + auto cmd = std::make_shared<api::GetCommand>(makeDocumentBucket(bid), doc->getId(), document::AllFields::NAME); cmd->setAddress(address); top.sendDown(cmd); top.waitForMessages(1, _waitTime); @@ -870,7 +870,7 @@ TEST_F(FileStorManagerTest, split1) { document::BucketId bucket( 17, i % 3 == 0 ? 0x10001 : 0x0100001); auto cmd = std::make_shared<api::GetCommand>( - makeDocumentBucket(bucket), documents[i]->getId(), "[all]"); + makeDocumentBucket(bucket), documents[i]->getId(), document::AllFields::NAME); api::StorageMessageAddress address("storage", lib::NodeType::STORAGE, 3); cmd->setAddress(address); filestorHandler.schedule(cmd, 0); @@ -906,7 +906,7 @@ TEST_F(FileStorManagerTest, split1) { documents[i]->getId()).getRawId()); } auto cmd = std::make_shared<api::GetCommand>( - makeDocumentBucket(bucket), documents[i]->getId(), "[all]"); + makeDocumentBucket(bucket), documents[i]->getId(), document::AllFields::NAME); api::StorageMessageAddress address("storage", lib::NodeType::STORAGE, 3); cmd->setAddress(address); filestorHandler.schedule(cmd, 0); @@ -993,7 +993,7 @@ TEST_F(FileStorManagerTest, split_single_group) { for (uint32_t i=0; i<documents.size(); ++i) { document::BucketId bucket(17, state ? 0x10001 : 0x00001); auto cmd = std::make_shared<api::GetCommand> - (makeDocumentBucket(bucket), documents[i]->getId(), "[all]"); + (makeDocumentBucket(bucket), documents[i]->getId(), document::AllFields::NAME); api::StorageMessageAddress address("storage", lib::NodeType::STORAGE, 3); cmd->setAddress(address); filestorHandler.schedule(cmd, 0); @@ -1221,7 +1221,7 @@ TEST_F(FileStorManagerTest, join) { for (uint32_t i=0; i<documents.size(); ++i) { document::BucketId bucket(16, 1); auto cmd = std::make_shared<api::GetCommand>( - makeDocumentBucket(bucket), documents[i]->getId(), "[all]"); + makeDocumentBucket(bucket), documents[i]->getId(), document::AllFields::NAME); api::StorageMessageAddress address("storage", lib::NodeType::STORAGE, 3); cmd->setAddress(address); filestorHandler.schedule(cmd, 0); @@ -1245,8 +1245,7 @@ createIterator(DummyStorageLink& link, const document::BucketId& bucketId, const std::string& docSel, framework::MicroSecTime fromTime = framework::MicroSecTime(0), - framework::MicroSecTime toTime = framework::MicroSecTime::max(), - bool headerOnly = false) + framework::MicroSecTime toTime = framework::MicroSecTime::max()) { spi::Bucket bucket(makeSpiBucket(bucketId)); @@ -1256,7 +1255,7 @@ createIterator(DummyStorageLink& link, selection.setToTimestamp(spi::Timestamp(toTime.getTime())); auto createIterCmd = std::make_shared<CreateIteratorCommand>( makeDocumentBucket(bucket), selection, - headerOnly ? "[header]" : "[all]", + document::AllFields::NAME, spi::NEWEST_DOCUMENT_ONLY); link.sendDown(createIterCmd); link.waitForMessages(1, FileStorManagerTest::LONG_WAITTIME); @@ -1358,7 +1357,7 @@ TEST_F(FileStorManagerTest, visiting) { } EXPECT_EQ(27u, totalDocs); } - // Visit bucket with min and max timestamps set, headers only + // Visit bucket with min and max timestamps set { document::BucketId bucket(16, 2); spi::IteratorId iterId( @@ -1366,8 +1365,7 @@ TEST_F(FileStorManagerTest, visiting) { ids[1], "", framework::MicroSecTime(30), - framework::MicroSecTime(40), - true)); + framework::MicroSecTime(40))); uint32_t totalDocs = 0; while (true) { auto cmd = std::make_shared<GetIterCommand>(makeDocumentBucket(ids[1]), iterId, 16*1024); @@ -2046,7 +2044,7 @@ TEST_F(FileStorManagerTest, get_command_size_is_added_to_metric) { document::BucketId bucket(16, 4000); createBucket(bucket, 0); auto cmd = std::make_shared<api::GetCommand>( - makeDocumentBucket(bucket), document::DocumentId("id:foo:testdoctype1::bar"), "[all]"); + makeDocumentBucket(bucket), document::DocumentId("id:foo:testdoctype1::bar"), document::AllFields::NAME); assert_request_size_set(c, std::move(cmd), thread_metrics_of(*c.manager)->get[defaultLoadType]); } diff --git a/storage/src/tests/persistence/persistencequeuetest.cpp b/storage/src/tests/persistence/persistencequeuetest.cpp index 3754a82e7ae..289d5462203 100644 --- a/storage/src/tests/persistence/persistencequeuetest.cpp +++ b/storage/src/tests/persistence/persistencequeuetest.cpp @@ -1,12 +1,11 @@ // Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. -#include <vespa/log/log.h> -#include <vespa/storageapi/message/bucket.h> -#include <tests/persistence/common/persistenceproviderwrapper.h> #include <vespa/persistence/dummyimpl/dummypersistence.h> #include <tests/persistence/common/filestortestfixture.h> #include <tests/persistence/filestorage/forwardingmessagesender.h> #include <vespa/document/test/make_document_bucket.h> +#include <vespa/document/fieldset/fieldsets.h> +#include <vespa/log/log.h> LOG_SETUP(".persistencequeuetest"); @@ -80,7 +79,7 @@ std::shared_ptr<api::StorageMessage> PersistenceQueueTest::createPut(uint64_t bu std::shared_ptr<api::StorageMessage> PersistenceQueueTest::createGet(uint64_t bucket) const { auto cmd = std::make_shared<api::GetCommand>( makeDocumentBucket(document::BucketId(16, bucket)), - document::DocumentId(vespalib::make_string("id:foo:testdoctype1:n=%" PRIu64 ":0", bucket)), "[all]"); + document::DocumentId(vespalib::make_string("id:foo:testdoctype1:n=%" PRIu64 ":0", bucket)), document::AllFields::NAME); cmd->setAddress(makeSelfAddress()); return cmd; } diff --git a/storage/src/tests/persistence/persistencetestutils.cpp b/storage/src/tests/persistence/persistencetestutils.cpp index cf8bf71708d..504767e68c7 100644 --- a/storage/src/tests/persistence/persistencetestutils.cpp +++ b/storage/src/tests/persistence/persistencetestutils.cpp @@ -219,15 +219,11 @@ spi::GetResult PersistenceTestUtils::doGetOnDisk( uint16_t disk, const document::BucketId& bucketId, - const document::DocumentId& docId, - bool headerOnly) + const document::DocumentId& docId) { - document::FieldSet::UP fieldSet(new document::AllFields()); + auto fieldSet = std::make_unique<document::AllFields>(); spi::Context context(defaultLoadType, spi::Priority(0), spi::Trace::TraceLevel(0)); - if (headerOnly) { - fieldSet.reset(new document::HeaderFields()); - } return getPersistenceProvider().get(makeSpiBucket( bucketId, spi::PartitionId(disk)), *fieldSet, docId, context); } diff --git a/storage/src/tests/persistence/persistencetestutils.h b/storage/src/tests/persistence/persistencetestutils.h index cdd08d42565..6cee3b79ab8 100644 --- a/storage/src/tests/persistence/persistencetestutils.h +++ b/storage/src/tests/persistence/persistencetestutils.h @@ -190,14 +190,12 @@ public: spi::GetResult doGetOnDisk( uint16_t disk, const document::BucketId& bucketId, - const document::DocumentId& docId, - bool headerOnly); + const document::DocumentId& docId); spi::GetResult doGet( const document::BucketId& bucketId, - const document::DocumentId& docId, - bool headerOnly) - { return doGetOnDisk(0, bucketId, docId, headerOnly); } + const document::DocumentId& docId) + { return doGetOnDisk(0, bucketId, docId); } std::shared_ptr<document::DocumentUpdate> createBodyUpdate( const document::DocumentId& id, diff --git a/storage/src/tests/persistence/testandsettest.cpp b/storage/src/tests/persistence/testandsettest.cpp index 578a90081c7..18d78e1e8cf 100644 --- a/storage/src/tests/persistence/testandsettest.cpp +++ b/storage/src/tests/persistence/testandsettest.cpp @@ -7,6 +7,7 @@ #include <vespa/document/fieldvalue/fieldvalues.h> #include <vespa/document/update/documentupdate.h> #include <vespa/document/update/assignvalueupdate.h> +#include <vespa/document/fieldset/fieldsets.h> #include <vespa/persistence/spi/test.h> #include <functional> @@ -252,7 +253,7 @@ TestAndSetTest::createTestDocument() document::Document::SP TestAndSetTest::retrieveTestDocument() { - auto get = std::make_shared<api::GetCommand>(BUCKET, testDocId, "[all]"); + auto get = std::make_shared<api::GetCommand>(BUCKET, testDocId, document::AllFields::NAME); auto tracker = thread->handleGet(*get, createTracker(get, BUCKET)); assert(tracker->getResult() == api::ReturnCode::Result::OK); diff --git a/storage/src/tests/storageserver/bouncertest.cpp b/storage/src/tests/storageserver/bouncertest.cpp index 29a56b234d0..46dad62de48 100644 --- a/storage/src/tests/storageserver/bouncertest.cpp +++ b/storage/src/tests/storageserver/bouncertest.cpp @@ -10,6 +10,7 @@ #include <tests/common/dummystoragelink.h> #include <vespa/document/bucket/fixed_bucket_spaces.h> #include <vespa/document/test/make_document_bucket.h> +#include <vespa/document/fieldset/fieldsets.h> #include <vespa/storageapi/message/persistence.h> #include <vespa/config/common/exceptions.h> #include <vespa/vespalib/gtest/gtest.h> @@ -122,7 +123,7 @@ std::shared_ptr<api::StorageCommand> create_dummy_get_message() { return std::make_shared<api::GetCommand>( document::Bucket(document::FixedBucketSpaces::default_space(), document::BucketId(0)), document::DocumentId("id:ns:foo::bar"), - "[all]"); + document::AllFields::NAME); } TEST_F(BouncerTest, future_timestamp) { diff --git a/storage/src/tests/storageserver/communicationmanagertest.cpp b/storage/src/tests/storageserver/communicationmanagertest.cpp index 8444319b395..0f95f7e7ece 100644 --- a/storage/src/tests/storageserver/communicationmanagertest.cpp +++ b/storage/src/tests/storageserver/communicationmanagertest.cpp @@ -11,11 +11,11 @@ #include <tests/common/dummystoragelink.h> #include <tests/common/testhelper.h> #include <vespa/document/test/make_document_bucket.h> +#include <vespa/document/fieldset/fieldsets.h> #include <vespa/documentapi/messagebus/messages/getdocumentmessage.h> #include <vespa/vespalib/util/stringfmt.h> #include <vespa/documentapi/messagebus/messages/removedocumentmessage.h> #include <vespa/documentapi/messagebus/messages/getdocumentreply.h> -#include <vespa/vespalib/util/time.h> #include <thread> #include <vespa/vespalib/gtest/gtest.h> @@ -35,7 +35,7 @@ struct CommunicationManagerTest : Test { { auto cmd = std::make_shared<api::GetCommand>(makeDocumentBucket(document::BucketId(0)), document::DocumentId("id:ns:mytype::mydoc"), - "[all]"); + document::AllFields::NAME); cmd->setAddress(api::StorageMessageAddress("storage", lib::NodeType::STORAGE, 1)); cmd->setPriority(priority); return cmd; @@ -71,7 +71,7 @@ TEST_F(CommunicationManagerTest, simple) { // Send a message through from distributor to storage auto cmd = std::make_shared<api::GetCommand>( - makeDocumentBucket(document::BucketId(0)), document::DocumentId("id:ns:mytype::mydoc"), "[all]"); + makeDocumentBucket(document::BucketId(0)), document::DocumentId("id:ns:mytype::mydoc"), document::AllFields::NAME); cmd->setAddress(api::StorageMessageAddress("storage", lib::NodeType::STORAGE, 1)); distributorLink->sendUp(cmd); storageLink->waitForMessages(1, MESSAGE_WAIT_TIME_SEC); diff --git a/storage/src/vespa/storage/distributor/operations/external/twophaseupdateoperation.cpp b/storage/src/vespa/storage/distributor/operations/external/twophaseupdateoperation.cpp index 73788d0affe..53940426a63 100644 --- a/storage/src/vespa/storage/distributor/operations/external/twophaseupdateoperation.cpp +++ b/storage/src/vespa/storage/distributor/operations/external/twophaseupdateoperation.cpp @@ -9,6 +9,7 @@ #include <vespa/document/datatype/documenttype.h> #include <vespa/document/fieldvalue/document.h> #include <vespa/document/select/parser.h> +#include <vespa/document/fieldset//fieldsets.h> #include <vespa/vespalib/stllike/hash_map.hpp> #include <vespa/log/log.h> @@ -205,7 +206,7 @@ TwoPhaseUpdateOperation::startSafePathUpdate(DistributorMessageSender& sender) std::shared_ptr<GetOperation> TwoPhaseUpdateOperation::create_initial_safe_path_get_operation() { document::Bucket bucket(_updateCmd->getBucket().getBucketSpace(), document::BucketId(0)); - const char* field_set = _use_initial_cheap_metadata_fetch_phase ? "[none]" : "[all]"; + const char* field_set = _use_initial_cheap_metadata_fetch_phase ? document::NoFields::NAME : document::AllFields::NAME; auto get = std::make_shared<api::GetCommand>(bucket, _updateCmd->getDocumentId(), field_set); copyMessageSettings(*_updateCmd, *get); // Metadata-only Gets just look at the data in the meta-store, not any fields. @@ -345,7 +346,7 @@ TwoPhaseUpdateOperation::handleFastPathReceive(DistributorMessageSender& sender, _updateReply = intermediate._reply; _fast_path_repair_source_node = bestNode.second; document::Bucket bucket(_updateCmd->getBucket().getBucketSpace(), bestNode.first); - auto cmd = std::make_shared<api::GetCommand>(bucket, _updateCmd->getDocumentId(), "[all]"); + auto cmd = std::make_shared<api::GetCommand>(bucket, _updateCmd->getDocumentId(), document::AllFields::NAME); copyMessageSettings(*_updateCmd, *cmd); sender.sendToNode(lib::NodeType::STORAGE, _fast_path_repair_source_node, cmd); @@ -471,7 +472,7 @@ void TwoPhaseUpdateOperation::handle_safe_path_received_metadata_get( LOG(debug, "Update(%s): sending single payload Get to %s on node %u (had timestamp %" PRIu64 ")", update_doc_id().c_str(), bucket.toString().c_str(), newest_replica->node, newest_replica->timestamp); - auto cmd = std::make_shared<api::GetCommand>(bucket, _updateCmd->getDocumentId(), "[all]"); + auto cmd = std::make_shared<api::GetCommand>(bucket, _updateCmd->getDocumentId(), document::AllFields::NAME); copyMessageSettings(*_updateCmd, *cmd); sender.sendToNode(lib::NodeType::STORAGE, newest_replica->node, cmd); diff --git a/storage/src/vespa/storage/persistence/bucketprocessor.cpp b/storage/src/vespa/storage/persistence/bucketprocessor.cpp index d6c549ef6f4..c88b08612d7 100644 --- a/storage/src/vespa/storage/persistence/bucketprocessor.cpp +++ b/storage/src/vespa/storage/persistence/bucketprocessor.cpp @@ -48,7 +48,7 @@ BucketProcessor::iterateAll(spi::PersistenceProvider& provider, = spi::Selection(spi::DocumentSelection(documentSelection)); spi::CreateIteratorResult createIterResult(provider.createIterator( bucket, - document::HeaderFields(), + document::AllFields(), sel, versions, context)); @@ -64,8 +64,7 @@ BucketProcessor::iterateAll(spi::PersistenceProvider& provider, IteratorGuard iteratorGuard(provider, iteratorId, context); while (true) { - spi::IterateResult result( - provider.iterate(iteratorId, UINT64_MAX, context)); + spi::IterateResult result(provider.iterate(iteratorId, UINT64_MAX, context)); if (result.getErrorCode() != spi::Result::ErrorType::NONE) { vespalib::asciistream ss; ss << "Failed: " << result.getErrorMessage(); diff --git a/storage/src/vespa/storage/visiting/visitor.cpp b/storage/src/vespa/storage/visiting/visitor.cpp index c9cda047784..dcd8cc4ba39 100644 --- a/storage/src/vespa/storage/visiting/visitor.cpp +++ b/storage/src/vespa/storage/visiting/visitor.cpp @@ -7,6 +7,7 @@ #include <vespa/storage/persistence/messages.h> #include <vespa/documentapi/messagebus/messages/visitor.h> #include <vespa/document/select/node.h> +#include <vespa/document/fieldset/fieldsets.h> #include <vespa/vespalib/stllike/hash_map.hpp> #include <vespa/vespalib/stllike/asciistream.h> #include <vespa/vespalib/util/stringfmt.h> @@ -165,7 +166,7 @@ Visitor::VisitorOptions::VisitorOptions() _maxParallel(1), _maxParallelOneBucket(2), _maxPending(1), - _fieldSet("[all]"), + _fieldSet(document::AllFields::NAME), _visitRemoves(false) { } diff --git a/storageapi/src/vespa/storageapi/mbusprot/protocolserialization4_2.cpp b/storageapi/src/vespa/storageapi/mbusprot/protocolserialization4_2.cpp index 0cfd2160497..8deb689d3a8 100644 --- a/storageapi/src/vespa/storageapi/mbusprot/protocolserialization4_2.cpp +++ b/storageapi/src/vespa/storageapi/mbusprot/protocolserialization4_2.cpp @@ -10,11 +10,13 @@ #include <vespa/storageapi/message/visitor.h> #include <vespa/storageapi/message/removelocation.h> #include <vespa/vespalib/util/exceptions.h> +#include <vespa/document/fieldset/fieldsets.h> #include <vespa/log/log.h> LOG_SETUP(".storage.api.mbusprot.serialization.4_2"); using document::BucketSpace; +using document::AllFields; namespace storage::mbusprot { @@ -29,7 +31,7 @@ void ProtocolSerialization4_2::onEncode(GBBuf& buf, const api::GetCommand& msg) buf.putString(msg.getDocumentId().toString()); putBucket(msg.getBucket(), buf); buf.putLong(msg.getBeforeTimestamp()); - buf.putBoolean(msg.getFieldSet() == "[header]"); + buf.putBoolean(false); onEncodeCommand(buf, msg); } @@ -39,8 +41,9 @@ ProtocolSerialization4_2::onDecodeGetCommand(BBuf& buf) const document::DocumentId did(SH::getString(buf)); document::Bucket bucket = getBucket(buf); api::Timestamp beforeTimestamp(SH::getLong(buf)); - bool headerOnly(SH::getBoolean(buf)); - auto msg = std::make_unique<api::GetCommand>(bucket, did, headerOnly ? "[header]" : "[all]", beforeTimestamp); + bool headerOnly(SH::getBoolean(buf)); // Ignored header only flag + (void) headerOnly; + auto msg = std::make_unique<api::GetCommand>(bucket, did, AllFields::NAME, beforeTimestamp); onDecodeCommand(buf, *msg); return msg; } @@ -371,7 +374,7 @@ ProtocolSerialization4_2::onEncode(GBBuf& buf, const api::CreateVisitorCommand& } buf.putBoolean(msg.visitRemoves()); - buf.putBoolean(msg.getFieldSet() == "[header]"); + buf.putBoolean(false); buf.putBoolean(msg.visitInconsistentBuckets()); buf.putInt(vespalib::count_ms(msg.getQueueTimeout())); msg.getParameters().serialize(buf); @@ -409,7 +412,7 @@ ProtocolSerialization4_2::onDecodeCreateVisitorCommand(BBuf& buf) const msg->setVisitRemoves(); } if (SH::getBoolean(buf)) { - msg->setFieldSet("[header]"); + msg->setFieldSet(AllFields::NAME); } if (SH::getBoolean(buf)) { msg->setVisitInconsistentBuckets(); diff --git a/storageapi/src/vespa/storageapi/message/visitor.cpp b/storageapi/src/vespa/storageapi/message/visitor.cpp index e531e73fea5..faf58361276 100644 --- a/storageapi/src/vespa/storageapi/message/visitor.cpp +++ b/storageapi/src/vespa/storageapi/message/visitor.cpp @@ -1,9 +1,9 @@ // Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. #include "visitor.h" +#include <vespa/document/fieldset/fieldsets.h> #include <vespa/vespalib/util/array.hpp> #include <climits> -#include <ostream> namespace storage::api { @@ -32,7 +32,7 @@ CreateVisitorCommand::CreateVisitorCommand(document::BucketSpace bucketSpace, _instanceId(instanceId), _visitorId(0), _visitRemoves(false), - _fieldSet("[all]"), + _fieldSet(document::AllFields::NAME), _visitInconsistentBuckets(false), _queueTimeout(2000ms), _maxPendingReplyCount(2), diff --git a/vespaclient-container-plugin/src/main/java/com/yahoo/document/restapi/OperationHandlerImpl.java b/vespaclient-container-plugin/src/main/java/com/yahoo/document/restapi/OperationHandlerImpl.java index 8f0e70f554c..3d3a8fc52ad 100644 --- a/vespaclient-container-plugin/src/main/java/com/yahoo/document/restapi/OperationHandlerImpl.java +++ b/vespaclient-container-plugin/src/main/java/com/yahoo/document/restapi/OperationHandlerImpl.java @@ -6,6 +6,7 @@ import com.yahoo.document.DocumentId; import com.yahoo.document.DocumentRemove; import com.yahoo.document.FixedBucketSpaces; import com.yahoo.document.TestAndSetCondition; +import com.yahoo.document.fieldset.AllFields; import com.yahoo.document.json.JsonWriter; import com.yahoo.document.DocumentPut; import com.yahoo.documentapi.DocumentAccess; @@ -424,7 +425,7 @@ public class OperationHandlerImpl implements OperationHandler { // document types in which case we can't explicitly state a single document type. // This matches legacy /visit API and vespa-visit tool behavior. params.fieldSet(options.fieldSet.orElse( - restUri.isRootOnly() ? "[all]" : restUri.getDocumentType() + ":[document]")); + restUri.isRootOnly() ? AllFields.NAME : restUri.getDocumentType() + ":[document]")); params.setMaxBucketsPerVisitor(1); params.setMaxPending(32); params.setMaxFirstPassHits(1); diff --git a/vespaclient-container-plugin/src/test/java/com/yahoo/document/restapi/OperationHandlerImplTest.java b/vespaclient-container-plugin/src/test/java/com/yahoo/document/restapi/OperationHandlerImplTest.java index 91c52c4b98b..efb25f0e2b3 100644 --- a/vespaclient-container-plugin/src/test/java/com/yahoo/document/restapi/OperationHandlerImplTest.java +++ b/vespaclient-container-plugin/src/test/java/com/yahoo/document/restapi/OperationHandlerImplTest.java @@ -1,6 +1,7 @@ // Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.document.restapi; +import com.yahoo.document.fieldset.AllFields; import com.yahoo.documentapi.DocumentAccess; import com.yahoo.documentapi.ProgressToken; import com.yahoo.documentapi.SyncParameters; @@ -419,7 +420,7 @@ public class OperationHandlerImplTest { @Test public void api_root_visiting_uses_all_fieldset_by_default() throws Exception { VisitorParameters parameters = generatedVisitParametersFrom(apiRootVisitUri(), "", optionsBuilder().cluster("foo").build()); - assertEquals("[all]", parameters.getFieldSet()); + assertEquals(AllFields.NAME, parameters.getFieldSet()); } @Test diff --git a/vespaclient-java/src/main/java/com/yahoo/vespaget/CommandLineOptions.java b/vespaclient-java/src/main/java/com/yahoo/vespaget/CommandLineOptions.java index 0bfdcbe75ff..b07c54399af 100644 --- a/vespaclient-java/src/main/java/com/yahoo/vespaget/CommandLineOptions.java +++ b/vespaclient-java/src/main/java/com/yahoo/vespaget/CommandLineOptions.java @@ -1,6 +1,8 @@ // Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.vespaget; +import com.yahoo.document.fieldset.AllFields; +import com.yahoo.document.fieldset.DocIdOnly; import com.yahoo.documentapi.messagebus.protocol.DocumentProtocol; import org.apache.commons.cli.CommandLine; import org.apache.commons.cli.CommandLineParser; @@ -67,7 +69,7 @@ public class CommandLineOptions { options.addOption(Option.builder("f") .hasArg(true) - .desc("Retrieve the specified fields only (see https://docs.vespa.ai/documentation/documents.html#fieldsets) (default '[all]')") + .desc("Retrieve the specified fields only (see https://docs.vespa.ai/documentation/documents.html#fieldsets) (default '" + AllFields.NAME + "')") .longOpt(FIELDSET_OPTION) .argName("fieldset").build()); @@ -178,9 +180,9 @@ public class CommandLineOptions { } if (printIdsOnly) { - fieldSet = "[id]"; + fieldSet = DocIdOnly.NAME; } else if (fieldSet.isEmpty()) { - fieldSet = "[all]"; + fieldSet = AllFields.NAME; } if (!cluster.isEmpty() && !route.isEmpty()) { diff --git a/vespaclient-java/src/main/java/com/yahoo/vespavisit/VdsVisit.java b/vespaclient-java/src/main/java/com/yahoo/vespavisit/VdsVisit.java index 83199c76e5a..88eed9dfc59 100644 --- a/vespaclient-java/src/main/java/com/yahoo/vespavisit/VdsVisit.java +++ b/vespaclient-java/src/main/java/com/yahoo/vespavisit/VdsVisit.java @@ -2,6 +2,7 @@ package com.yahoo.vespavisit; import com.yahoo.document.FixedBucketSpaces; +import com.yahoo.document.fieldset.DocIdOnly; import com.yahoo.document.select.parser.ParseException; import com.yahoo.documentapi.ProgressToken; import com.yahoo.documentapi.VisitorControlHandler; @@ -479,7 +480,7 @@ public class VdsVisit { } if (line.hasOption("i")) { allParams.setPrintIdsOnly(true); - params.fieldSet("[id]"); + params.fieldSet(DocIdOnly.NAME); } if (line.hasOption("p")) { params.setResumeFileName(line.getOptionValue("p")); @@ -512,7 +513,7 @@ public class VdsVisit { if (line.hasOption("statistics")) { allParams.setStatisticsParts(line.getOptionValue("statistics")); - params.fieldSet("[id]"); + params.fieldSet(DocIdOnly.NAME); params.setVisitorLibrary("CountVisitor"); } diff --git a/vespaclient-java/src/test/java/com/yahoo/vespaget/CommandLineOptionsTest.java b/vespaclient-java/src/test/java/com/yahoo/vespaget/CommandLineOptionsTest.java index 50b499b8df2..20d12d3f55f 100644 --- a/vespaclient-java/src/test/java/com/yahoo/vespaget/CommandLineOptionsTest.java +++ b/vespaclient-java/src/test/java/com/yahoo/vespaget/CommandLineOptionsTest.java @@ -1,15 +1,24 @@ // Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.vespaget; +import com.yahoo.document.fieldset.AllFields; +import com.yahoo.document.fieldset.DocIdOnly; import com.yahoo.documentapi.messagebus.protocol.DocumentProtocol; import org.junit.Rule; import org.junit.Test; import org.junit.rules.ExpectedException; -import java.io.*; +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.PrintStream; +import java.io.UnsupportedEncodingException; import java.util.Iterator; -import static org.junit.Assert.*; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; /** * Test class for {@link CommandLineOptions} @@ -45,7 +54,7 @@ public class CommandLineOptionsTest { assertFalse(params.help); assertFalse(params.documentIds.hasNext()); assertFalse(params.printIdsOnly); - assertEquals("[all]", params.fieldSet); + assertEquals(AllFields.NAME, params.fieldSet); assertEquals("default-get", params.route); assertTrue(params.cluster.isEmpty()); assertEquals("client", params.configId); @@ -92,7 +101,7 @@ public class CommandLineOptionsTest { public void testInvalidCombination3() { exception.expect(IllegalArgumentException.class); exception.expectMessage("Field set option can not be used in combination with print ids option."); - getParsedOptions("--printids", "--fieldset", "[header]"); + getParsedOptions("--printids", "--fieldset", AllFields.NAME); } @Test @@ -138,7 +147,7 @@ public class CommandLineOptionsTest { @Test public void testPrintids() { ClientParameters params = getParsedOptions("--printids"); - assertEquals("[id]", params.fieldSet); + assertEquals(DocIdOnly.NAME, params.fieldSet); } @Test diff --git a/vespaclient-java/src/test/java/com/yahoo/vespaget/DocumentRetrieverTest.java b/vespaclient-java/src/test/java/com/yahoo/vespaget/DocumentRetrieverTest.java index c662e2fed62..d8b5c267bf2 100644 --- a/vespaclient-java/src/test/java/com/yahoo/vespaget/DocumentRetrieverTest.java +++ b/vespaclient-java/src/test/java/com/yahoo/vespaget/DocumentRetrieverTest.java @@ -1,11 +1,11 @@ // Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.vespaget; -import com.fasterxml.jackson.core.JsonParseException; import com.fasterxml.jackson.databind.ObjectMapper; import com.yahoo.document.DataType; import com.yahoo.document.Document; import com.yahoo.document.DocumentId; +import com.yahoo.document.fieldset.AllFields; import com.yahoo.documentapi.messagebus.MessageBusDocumentAccess; import com.yahoo.documentapi.messagebus.MessageBusSyncSession; import com.yahoo.documentapi.messagebus.loadtypes.LoadType; @@ -96,7 +96,7 @@ public class DocumentRetrieverTest { .setCluster("") .setRoute("default") .setConfigId("client") - .setFieldSet("[all]") + .setFieldSet(AllFields.NAME) .setPrintIdsOnly(false) .setHelp(false) .setShowDocSize(false) @@ -180,7 +180,7 @@ public class DocumentRetrieverTest { } @Test - public void testJsonOutput() throws DocumentRetrieverException, JsonParseException, IOException { + public void testJsonOutput() throws DocumentRetrieverException, IOException { ClientParameters params = createParameters() .setDocumentIds(asIterator(DOC_ID_1, DOC_ID_2, DOC_ID_3)) .setJsonOutput(true) diff --git a/vespaclient-java/src/test/java/com/yahoo/vespavisit/VdsVisitTestCase.java b/vespaclient-java/src/test/java/com/yahoo/vespavisit/VdsVisitTestCase.java index d9efe2c5129..4c8fbb1beee 100644 --- a/vespaclient-java/src/test/java/com/yahoo/vespavisit/VdsVisitTestCase.java +++ b/vespaclient-java/src/test/java/com/yahoo/vespavisit/VdsVisitTestCase.java @@ -1,6 +1,7 @@ // Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.vespavisit; +import com.yahoo.document.fieldset.DocIdOnly; import com.yahoo.document.select.parser.ParseException; import com.yahoo.documentapi.*; import com.yahoo.documentapi.messagebus.protocol.DocumentProtocol; @@ -83,7 +84,7 @@ public class VdsVisitTestCase { assertNotNull(params); assertEquals(654321, allParams.getFullTimeout()); assertEquals(654321, params.getTimeoutMs()); - assertEquals("[id]", params.getFieldSet()); + assertEquals(DocIdOnly.NAME, params.getFieldSet()); } @Test @@ -98,7 +99,7 @@ public class VdsVisitTestCase { VisitorParameters params = allParams.getVisitorParameters(); assertNotNull(params); - assertEquals("[id]", params.getFieldSet()); + assertEquals(DocIdOnly.NAME, params.getFieldSet()); assertTrue(allParams.isPrintIdsOnly()); } @@ -295,7 +296,7 @@ public class VdsVisitTestCase { VisitorParameters params = allParams.getVisitorParameters(); assertNotNull(params); assertEquals("foo", allParams.getStatisticsParts()); - assertEquals("[id]", params.getFieldSet()); + assertEquals(DocIdOnly.NAME, params.getFieldSet()); assertEquals("CountVisitor", params.getVisitorLibrary()); } |