diff options
author | Jon Marius Venstad <venstad@gmail.com> | 2022-02-02 12:36:01 +0100 |
---|---|---|
committer | Jon Marius Venstad <venstad@gmail.com> | 2022-02-02 12:36:01 +0100 |
commit | 0f5eaa1c25b698b8a6e588b42200ce0ccfb5937d (patch) | |
tree | c240c18f6e7e08cae087ec6280ee03eefb846598 /vespa-feed-client-cli | |
parent | 611453d5778bef8e8312c9c9ac7a62eb7001d947 (diff) |
Make doom seconds configurable for CLI
Diffstat (limited to 'vespa-feed-client-cli')
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 |