aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTor Brede Vekterli <vekterli@oath.com>2018-01-17 12:17:47 +0100
committerGeir Storli <geirst@yahoo-inc.com>2018-02-01 13:30:36 +0000
commit30fb044bf2deb88edbb1056ce670c92427e06d37 (patch)
tree7b12a8577113c59c6c604aebbbcb50201561de5e
parent649e330035f9a62f64b4595fe9b75e6346cf5008 (diff)
Add and propagate visitor parameter bucket space
Command line option for bucket space added to vespavisit binary.
-rw-r--r--documentapi/src/main/java/com/yahoo/documentapi/VisitorParameters.java10
-rwxr-xr-xdocumentapi/src/main/java/com/yahoo/documentapi/messagebus/MessageBusVisitorSession.java1
-rw-r--r--documentapi/src/main/java/com/yahoo/documentapi/messagebus/protocol/CreateVisitorMessage.java10
-rw-r--r--documentapi/src/test/java/com/yahoo/documentapi/VisitorParametersTestCase.java2
-rw-r--r--documentapi/src/test/java/com/yahoo/documentapi/messagebus/protocol/test/Messages50TestCase.java3
-rwxr-xr-xdocumentapi/src/test/java/com/yahoo/documentapi/messagebus/test/MessageBusVisitorSessionTestCase.java19
-rw-r--r--vespaclient-java/src/main/java/com/yahoo/vespavisit/VdsVisit.java12
-rw-r--r--vespaclient-java/src/test/java/com/yahoo/vespavisit/VdsVisitTestCase.java6
8 files changed, 60 insertions, 3 deletions
diff --git a/documentapi/src/main/java/com/yahoo/documentapi/VisitorParameters.java b/documentapi/src/main/java/com/yahoo/documentapi/VisitorParameters.java
index 01abd6454a9..0efdefa197e 100644
--- a/documentapi/src/main/java/com/yahoo/documentapi/VisitorParameters.java
+++ b/documentapi/src/main/java/com/yahoo/documentapi/VisitorParameters.java
@@ -20,6 +20,7 @@ import java.util.TreeMap;
public class VisitorParameters extends Parameters {
private String documentSelection;
+ private String bucketSpace = "default";
private String visitorLibrary = "DumpVisitor";
private int maxPending = 32;
private long timeoutMs = -1;
@@ -69,6 +70,7 @@ public class VisitorParameters extends Parameters {
*/
public VisitorParameters(VisitorParameters params) {
setDocumentSelection(params.getDocumentSelection());
+ setBucketSpace(params.getBucketSpace());
setVisitorLibrary(params.getVisitorLibrary());
setMaxPending(params.getMaxPending());
setTimeoutMs(params.getTimeoutMs());
@@ -108,6 +110,9 @@ public class VisitorParameters extends Parameters {
/** @return The selection string used for visiting. */
public String getDocumentSelection() { return documentSelection; }
+ /** @return The bucket space to visit */
+ public String getBucketSpace() { return bucketSpace; }
+
/** @return What visitor library to use for the visiting. The library in question must be installed on each storage node in the target cluster. */
public String getVisitorLibrary() { return visitorLibrary; }
@@ -192,6 +197,9 @@ public class VisitorParameters extends Parameters {
/** Set the document selection expression */
public void setDocumentSelection(String selection) { documentSelection = selection; }
+ /** Set which (single) bucket space this visiting will be against. */
+ public void setBucketSpace(String bucketSpace) { this.bucketSpace = bucketSpace; }
+
/** Set which visitor library is used for visiting in storage. DumpVisitor is most common implementation. */
public void setVisitorLibrary(String library) { visitorLibrary = library; }
@@ -343,11 +351,11 @@ public class VisitorParameters extends Parameters {
this.dynamicMaxBucketsIncreaseFactor = dynamicMaxBucketsIncreaseFactor;
}
- // Inherit docs from Object
public String toString() {
StringBuffer sb = new StringBuffer();
sb.append("VisitorParameters(\n")
.append(" Document selection: ").append(documentSelection).append('\n')
+ .append(" Bucket space: ").append(bucketSpace).append('\n')
.append(" Visitor library: ").append(visitorLibrary).append('\n')
.append(" Max pending: ").append(maxPending).append('\n')
.append(" Timeout (ms): ").append(timeoutMs).append('\n')
diff --git a/documentapi/src/main/java/com/yahoo/documentapi/messagebus/MessageBusVisitorSession.java b/documentapi/src/main/java/com/yahoo/documentapi/messagebus/MessageBusVisitorSession.java
index 4dd78278df0..a146caa972e 100755
--- a/documentapi/src/main/java/com/yahoo/documentapi/messagebus/MessageBusVisitorSession.java
+++ b/documentapi/src/main/java/com/yahoo/documentapi/messagebus/MessageBusVisitorSession.java
@@ -595,6 +595,7 @@ public class MessageBusVisitorSession implements VisitorSession {
msg.setTimeRemaining(messageTimeoutMs);
msg.setBuckets(Arrays.asList(bucket.getSuperbucket(), bucket.getProgress()));
msg.setDocumentSelection(params.getDocumentSelection());
+ msg.setBucketSpace(params.getBucketSpace());
msg.setFromTimestamp(params.getFromTimestamp());
msg.setToTimestamp(params.getToTimestamp());
msg.setMaxPendingReplyCount(params.getMaxPending());
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 57384836001..e6d51103b3e 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
@@ -12,6 +12,7 @@ public class CreateVisitorMessage extends DocumentMessage {
private String controlDestination = "";
private String dataDestination = "";
private String docSelection = "";
+ private String bucketSpace = "default";
private int maxPendingReplyCount = 8;
private List<BucketId> buckets = new ArrayList<>();
private long fromTime = 0;
@@ -76,6 +77,14 @@ public class CreateVisitorMessage extends DocumentMessage {
docSelection = documentSelection;
}
+ public String getBucketSpace() {
+ return bucketSpace;
+ }
+
+ public void setBucketSpace(String bucketSpace) {
+ this.bucketSpace = bucketSpace;
+ }
+
public int getMaxPendingReplyCount() {
return maxPendingReplyCount;
}
@@ -202,6 +211,7 @@ public class CreateVisitorMessage extends DocumentMessage {
sb.append(", time ").append(fromTime).append('-').append(toTime);
}
sb.append(", selection '").append(docSelection).append('\'');
+ sb.append(", bucket space '").append(bucketSpace).append('\'');
if (!libName.equals("DumpVisitor")) {
sb.append(", library ").append(libName);
}
diff --git a/documentapi/src/test/java/com/yahoo/documentapi/VisitorParametersTestCase.java b/documentapi/src/test/java/com/yahoo/documentapi/VisitorParametersTestCase.java
index 54b12b0963d..181253c4377 100644
--- a/documentapi/src/test/java/com/yahoo/documentapi/VisitorParametersTestCase.java
+++ b/documentapi/src/test/java/com/yahoo/documentapi/VisitorParametersTestCase.java
@@ -12,6 +12,7 @@ public class VisitorParametersTestCase {
private VisitorParameters createVisitorParameters() {
VisitorParameters params = new VisitorParameters("");
params.setDocumentSelection("id.user==5678");
+ params.setBucketSpace("narnia");
params.setFromTimestamp(9001);
params.setToTimestamp(10001);
params.setVisitorLibrary("CoolVisitor");
@@ -89,6 +90,7 @@ public class VisitorParametersTestCase {
assertEquals(
"VisitorParameters(\n" +
" Document selection: id.user==5678\n" +
+ " Bucket space: narnia\n" +
" Visitor library: CoolVisitor\n" +
" Max pending: 111\n" +
" Timeout (ms): 1337\n" +
diff --git a/documentapi/src/test/java/com/yahoo/documentapi/messagebus/protocol/test/Messages50TestCase.java b/documentapi/src/test/java/com/yahoo/documentapi/messagebus/protocol/test/Messages50TestCase.java
index f0b76907fc4..0ef83c6b5af 100644
--- a/documentapi/src/test/java/com/yahoo/documentapi/messagebus/protocol/test/Messages50TestCase.java
+++ b/documentapi/src/test/java/com/yahoo/documentapi/messagebus/protocol/test/Messages50TestCase.java
@@ -190,6 +190,7 @@ public class Messages50TestCase extends MessagesTestBase {
assertEquals("CreateVisitorMessage(" +
"No buckets, " +
"selection 'true and false or true', " +
+ "bucket space 'default', " +
"library SomeLibrary, including removes, " +
"get fields: [all]" +
")",
@@ -200,6 +201,7 @@ public class Messages50TestCase extends MessagesTestBase {
assertEquals("CreateVisitorMessage(" +
"Bucket BucketId(0x40000000000004d2), " +
"selection 'true and false or true', " +
+ "bucket space 'default', " +
"library SomeLibrary, including removes, " +
"get fields: [all]" +
")",
@@ -216,6 +218,7 @@ public class Messages50TestCase extends MessagesTestBase {
"5 buckets: BucketId(0x40000000000004d2) BucketId(0x40000000000004d3) BucketId(0x40000000000004d4) ..., " +
"time 10001-20002, " +
"selection 'true and false or true', " +
+ "bucket space 'default', " +
"library SomeLibrary, including removes, " +
"get fields: [all], " +
"visit inconsistent buckets" +
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 25116273377..874066d50a3 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
@@ -2560,6 +2560,25 @@ public class MessageBusVisitorSessionTestCase {
mc.controlHandler.toString());
}
+ @Test
+ public void visit_default_bucket_space_unless_explicitly_given() {
+ MockComponents mc = createDefaultMock("");
+ mc.visitorSession.start();
+ mc.executor.expectAndProcessTasks(1);
+ CreateVisitorMessage cmd = (CreateVisitorMessage)mc.sender.getAndRemoveMessage(0);
+ assertEquals("default", cmd.getBucketSpace());
+ }
+
+ @Test
+ public void explicitly_provided_bucket_space_is_propagated_to_visitor_commands() {
+ MockComponents mc = createDefaultMock("");
+ mc.params.setBucketSpace("upside down");
+ mc.visitorSession.start();
+ mc.executor.expectAndProcessTasks(1);
+ CreateVisitorMessage cmd = (CreateVisitorMessage)mc.sender.getAndRemoveMessage(0);
+ assertEquals("upside down", cmd.getBucketSpace());
+ }
+
/**
* TODOs:
* - parameter validation (max pending, ...)
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 79b48731cc7..4f462bf187e 100644
--- a/vespaclient-java/src/main/java/com/yahoo/vespavisit/VdsVisit.java
+++ b/vespaclient-java/src/main/java/com/yahoo/vespavisit/VdsVisit.java
@@ -336,6 +336,14 @@ public class VdsVisit {
.desc("Output documents as JSON")
.hasArg(false)
.build());
+
+ options.addOption(Option.builder()
+ .longOpt("bucketspace")
+ .hasArg(true)
+ .argName("space")
+ .desc("Bucket space to visit ('default' or 'global). If not specified, 'default' is used.")
+ .build());
+
return options;
}
@@ -442,6 +450,9 @@ public class VdsVisit {
if (line.hasOption("s")) {
params.setDocumentSelection(line.getOptionValue("s"));
}
+ if (line.hasOption("bucketspace")) {
+ params.setBucketSpace(line.getOptionValue("bucketspace"));
+ }
if (line.hasOption("f")) {
params.setFromTimestamp(((Number) line.getParsedOptionValue("f")).longValue());
}
@@ -607,6 +618,7 @@ public class VdsVisit {
} else {
out.println("Visiting documents matching: " + params.getDocumentSelection());
}
+ out.println(String.format("Visiting bucket space: %s", params.getBucketSpace()));
if (params.getFromTimestamp() != 0 && params.getToTimestamp() != 0) {
out.println("Visiting in the inclusive timestamp range "
+ params.getFromTimestamp() + " - " + params.getToTimestamp() + ".");
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 e2d045e1d33..32e29ba51ec 100644
--- a/vespaclient-java/src/test/java/com/yahoo/vespavisit/VdsVisitTestCase.java
+++ b/vespaclient-java/src/test/java/com/yahoo/vespavisit/VdsVisitTestCase.java
@@ -130,7 +130,8 @@ public class VdsVisitTestCase {
"--ordering", "ascending",
"--skipbucketsonfatalerrors",
"--abortonclusterdown",
- "--visitremoves"
+ "--visitremoves",
+ "--bucketspace", "outerspace"
};
VdsVisit.ArgumentParser parser = createMockArgumentParser();
VdsVisit.VdsVisitParameters allParams = parser.parse(args);
@@ -174,8 +175,9 @@ public class VdsVisitTestCase {
printStream.flush();
String nl = System.getProperty("line.separator"); // the joys of running tests on windows
assertEquals(
- "Time out visitor after 123456789 ms." + nl +
+ "Time out visitor after 123456789 ms." + nl +
"Visiting documents matching: 'id.user=1234'" + nl +
+ "Visiting bucket space: outerspace" + nl +
"Visiting in the inclusive timestamp range 5678 - 9012." + nl +
"Visiting field set foodoc.bar,foodoc.baz." + nl +
"Visiting inconsistent buckets." + nl +