From abda412519998eda79ed1bfc96d7a16d877a4f7d Mon Sep 17 00:00:00 2001 From: Tor Brede Vekterli Date: Mon, 6 Mar 2023 15:49:26 +0100 Subject: Add a "null-rendering" option to `vespa-visit` This makes it easy to benchmark whether document rendering is a bottleneck when visiting. For instance, large floating point tensor fields are notoriously expensive to render as JSON. This is more accurate than just redirecting the visit output to `/dev/null` as that still requires documents to be rendered before being evicted into the void. --- .../com/yahoo/vespavisit/StdOutVisitorHandler.java | 9 ++++++++- .../src/main/java/com/yahoo/vespavisit/VdsVisit.java | 20 ++++++++++++++++++++ 2 files changed, 28 insertions(+), 1 deletion(-) (limited to 'vespaclient-java/src/main/java/com/yahoo') diff --git a/vespaclient-java/src/main/java/com/yahoo/vespavisit/StdOutVisitorHandler.java b/vespaclient-java/src/main/java/com/yahoo/vespavisit/StdOutVisitorHandler.java index 288df7e470c..c2dea5e563b 100644 --- a/vespaclient-java/src/main/java/com/yahoo/vespavisit/StdOutVisitorHandler.java +++ b/vespaclient-java/src/main/java/com/yahoo/vespavisit/StdOutVisitorHandler.java @@ -55,6 +55,7 @@ public class StdOutVisitorHandler extends VdsVisitHandler { OutputFormat outputFormat = OutputFormat.JSON; boolean tensorShortForm = false; // TODO Vespa 9: change default to true boolean tensorDirectValues = false; // TODO Vespa 9: change default to true + boolean nullRender = false; boolean usesJson() { return outputFormat == OutputFormat.JSON || outputFormat == OutputFormat.JSONL; @@ -157,6 +158,9 @@ public class StdOutVisitorHandler extends VdsVisitHandler { @Override public void onDocument(Document doc, long timestamp) { try { + if (params.nullRender) { + return; + } if (lastLineIsProgress) { System.err.print('\r'); } @@ -187,6 +191,9 @@ public class StdOutVisitorHandler extends VdsVisitHandler { @Override public void onRemove(DocumentId docId) { try { + if (params.nullRender) { + return; + } if (lastLineIsProgress) { System.err.print('\r'); } @@ -263,7 +270,7 @@ public class StdOutVisitorHandler extends VdsVisitHandler { @Override public synchronized void onDone() { - if ((params.outputFormat == OutputFormat.JSON) && !params.printIds) { + if ((params.outputFormat == OutputFormat.JSON) && !params.printIds && !params.nullRender) { if (first) { out.print('['); } 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 f2ddd4ed8ea..8b919f7e9ea 100644 --- a/vespaclient-java/src/main/java/com/yahoo/vespavisit/VdsVisit.java +++ b/vespaclient-java/src/main/java/com/yahoo/vespavisit/VdsVisit.java @@ -381,6 +381,13 @@ public class VdsVisit { .type(Number.class) .build()); + options.addOption(Option.builder() + .longOpt("nullrender") + .desc("Process documents, but do not render any output. Overrides all other output options. " + + "Used to benchmark whether document rendering is the bottleneck when processing documents.") + .hasArg(false) + .build()); + return options; } @@ -399,6 +406,7 @@ public class VdsVisit { private boolean jsonLinesOutput = false; private boolean tensorShortForm = false; // TODO Vespa 9: change default to true private boolean tensorDirectValues = false; // TODO Vespa 9: change default to true + private boolean nullRender = false; private int slices = 1; private int sliceId = 0; @@ -508,6 +516,14 @@ public class VdsVisit { this.tensorDirectValues = tensorDirectValues; } + public boolean nullRender() { + return nullRender; + } + + public void setNullRender(boolean nullRender) { + this.nullRender = nullRender; + } + public int slices() { return slices; } @@ -660,6 +676,9 @@ public class VdsVisit { if (line.hasOption("tensorvalues")) { allParams.setTensorDirectValues(true); } + if (line.hasOption("nullrender")) { + allParams.setNullRender(true); + } if (line.hasOption("slices") != line.hasOption("sliceid")) { throw new IllegalArgumentException("Both --slices and --sliceid must be specified when visiting with slicing"); } @@ -848,6 +867,7 @@ public class VdsVisit { handlerParams.outputFormat = params.stdOutHandlerOutputFormat(); handlerParams.tensorShortForm = params.tensorShortForm(); handlerParams.tensorDirectValues = params.tensorDirectValues(); + handlerParams.nullRender = params.nullRender(); handler = new StdOutVisitorHandler(handlerParams); if (visitorParameters.getResumeFileName() != null) { -- cgit v1.2.3