summaryrefslogtreecommitdiffstats
path: root/vespa-feed-client-cli
diff options
context:
space:
mode:
authorJon Marius Venstad <venstad@gmail.com>2022-02-02 12:36:01 +0100
committerJon Marius Venstad <venstad@gmail.com>2022-02-02 12:36:01 +0100
commit0f5eaa1c25b698b8a6e588b42200ce0ccfb5937d (patch)
treec240c18f6e7e08cae087ec6280ee03eefb846598 /vespa-feed-client-cli
parent611453d5778bef8e8312c9c9ac7a62eb7001d947 (diff)
Make doom seconds configurable for CLI
Diffstat (limited to 'vespa-feed-client-cli')
-rw-r--r--vespa-feed-client-cli/src/main/java/ai/vespa/feed/client/impl/CliArguments.java13
-rw-r--r--vespa-feed-client-cli/src/main/java/ai/vespa/feed/client/impl/CliClient.java3
-rw-r--r--vespa-feed-client-cli/src/test/java/ai/vespa/feed/client/impl/CliArgumentsTest.java4
-rw-r--r--vespa-feed-client-cli/src/test/resources/help.txt4
4 files changed, 21 insertions, 3 deletions
diff --git a/vespa-feed-client-cli/src/main/java/ai/vespa/feed/client/impl/CliArguments.java b/vespa-feed-client-cli/src/main/java/ai/vespa/feed/client/impl/CliArguments.java
index 4374be94dbd..ac859359bfa 100644
--- a/vespa-feed-client-cli/src/main/java/ai/vespa/feed/client/impl/CliArguments.java
+++ b/vespa-feed-client-cli/src/main/java/ai/vespa/feed/client/impl/CliArguments.java
@@ -54,6 +54,7 @@ class CliArguments {
private static final String SILENT_OPTION = "silent";
private static final String VERSION_OPTION = "version";
private static final String STDIN_OPTION = "stdin";
+ private static final String DOOM_OPTION = "max-failure-seconds";
private final CommandLine arguments;
@@ -149,6 +150,8 @@ class CliArguments {
OptionalInt traceLevel() throws CliArgumentsException { return intValue(TRACE_OPTION); }
+ OptionalInt doomSeconds() throws CliArgumentsException { return intValue(DOOM_OPTION); }
+
Optional<Duration> timeout() throws CliArgumentsException {
OptionalDouble timeout = doubleValue(TIMEOUT_OPTION);
return timeout.isPresent()
@@ -279,8 +282,14 @@ class CliArguments {
.type(Number.class)
.build())
.addOption(Option.builder()
- .longOpt(STDIN_OPTION)
- .desc("Read JSON input from standard input")
+ .longOpt(STDIN_OPTION)
+ .desc("Read JSON input from standard input")
+ .build())
+ .addOption(Option.builder()
+ .longOpt(DOOM_OPTION)
+ .desc("Exit if specified number of seconds ever pass without any successful operations. Disabled by default")
+ .hasArg()
+ .type(Number.class)
.build())
.addOption(Option.builder()
.longOpt(DRYRUN_OPTION)
diff --git a/vespa-feed-client-cli/src/main/java/ai/vespa/feed/client/impl/CliClient.java b/vespa-feed-client-cli/src/main/java/ai/vespa/feed/client/impl/CliClient.java
index 83358585935..5e904b37588 100644
--- a/vespa-feed-client-cli/src/main/java/ai/vespa/feed/client/impl/CliClient.java
+++ b/vespa-feed-client-cli/src/main/java/ai/vespa/feed/client/impl/CliClient.java
@@ -19,6 +19,7 @@ import java.io.InputStream;
import java.io.OutputStream;
import java.io.PrintStream;
import java.nio.file.Files;
+import java.time.Duration;
import java.util.Map;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.TimeUnit;
@@ -135,6 +136,8 @@ public class CliClient {
cliArgs.caCertificates().ifPresent(builder::setCaCertificatesFile);
cliArgs.headers().forEach(builder::addRequestHeader);
builder.setDryrun(cliArgs.dryrunEnabled());
+ cliArgs.doomSeconds().ifPresent(doom -> builder.setCircuitBreaker(new GracePeriodCircuitBreaker(Duration.ofSeconds(10),
+ Duration.ofSeconds(doom))));
return builder.build();
}
diff --git a/vespa-feed-client-cli/src/test/java/ai/vespa/feed/client/impl/CliArgumentsTest.java b/vespa-feed-client-cli/src/test/java/ai/vespa/feed/client/impl/CliArgumentsTest.java
index 19b93c3172b..fe3dc465814 100644
--- a/vespa-feed-client-cli/src/test/java/ai/vespa/feed/client/impl/CliArgumentsTest.java
+++ b/vespa-feed-client-cli/src/test/java/ai/vespa/feed/client/impl/CliArgumentsTest.java
@@ -25,7 +25,8 @@ class CliArgumentsTest {
"--max-streams-per-connection=128", "--certificate=cert.pem", "--private-key=key.pem",
"--ca-certificates=ca-certs.pem", "--disable-ssl-hostname-verification",
"--header=\"My-Header: my-value\"", "--header", "Another-Header: another-value", "--benchmark",
- "--route=myroute", "--timeout=0.125", "--trace=9", "--verbose", "--silent", "--show-errors", "--show-all"});
+ "--route=myroute", "--timeout=0.125", "--trace=9", "--verbose", "--silent",
+ "--show-errors", "--show-all", "--max-failure-seconds=30"});
assertEquals(URI.create("https://vespa.ai:4443/"), args.endpoint());
assertEquals(Paths.get("feed.json"), args.inputFile().get());
assertEquals(10, args.connections().getAsInt());
@@ -43,6 +44,7 @@ class CliArgumentsTest {
assertEquals("myroute", args.route().get());
assertEquals(Duration.ofMillis(125), args.timeout().get());
assertEquals(9, args.traceLevel().getAsInt());
+ assertEquals(30, args.doomSeconds().getAsInt());
assertTrue(args.verboseSpecified());
assertTrue(args.showErrors());
assertTrue(args.showSuccesses());
diff --git a/vespa-feed-client-cli/src/test/resources/help.txt b/vespa-feed-client-cli/src/test/resources/help.txt
index f0819e26449..323206ab128 100644
--- a/vespa-feed-client-cli/src/test/resources/help.txt
+++ b/vespa-feed-client-cli/src/test/resources/help.txt
@@ -17,6 +17,10 @@ Vespa feed client
--header <arg> HTTP header on the form 'Name:
value'
--help
+ --max-failure-seconds <arg> Exit if specified number of
+ seconds ever pass without any
+ successful operations. Disabled
+ by default
--max-streams-per-connection <arg> Maximum number of concurrent
streams per HTTP/2 connection
--private-key <arg> Path to PEM/PKCS#8 encoded