diff options
author | Henning Baldersheim <balder@yahoo-inc.com> | 2021-11-01 16:52:15 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-11-01 16:52:15 +0100 |
commit | 5f2db22d896278cc8a3ae55c457a0881309c1000 (patch) | |
tree | 5bba970ba900533d2b198fe23ab560f57de9ec83 | |
parent | 1fe33b4e407a463d5f721b2ebaed005e4462f147 (diff) | |
parent | fb125b363ba81e8db3542debc1ad11f0cee529ac (diff) |
Merge pull request #19816 from vespa-engine/balder/ignore-condition-not-met
Add --ignoreConditionNotMet to vespa-http-client
5 files changed, 34 insertions, 10 deletions
diff --git a/vespa-http-client/src/main/java/com/yahoo/vespa/http/client/Result.java b/vespa-http-client/src/main/java/com/yahoo/vespa/http/client/Result.java index 4cc4c762ccf..93a3b43c211 100644 --- a/vespa-http-client/src/main/java/com/yahoo/vespa/http/client/Result.java +++ b/vespa-http-client/src/main/java/com/yahoo/vespa/http/client/Result.java @@ -63,6 +63,11 @@ public class Result { public boolean isSuccess() { return success; } + public boolean isSuccessOrConditionNotMet() { + return isSuccess() || + details.stream().allMatch(d -> d.getResultType() == Result.ResultType.OPERATION_EXECUTED || + d.getResultType() == Result.ResultType.CONDITION_NOT_MET); + } public List<Detail> getDetails() { return details; } diff --git a/vespa-http-client/src/main/java/com/yahoo/vespa/http/client/SimpleLoggerResultCallback.java b/vespa-http-client/src/main/java/com/yahoo/vespa/http/client/SimpleLoggerResultCallback.java index fcc3e04af78..eba7fbef483 100644 --- a/vespa-http-client/src/main/java/com/yahoo/vespa/http/client/SimpleLoggerResultCallback.java +++ b/vespa-http-client/src/main/java/com/yahoo/vespa/http/client/SimpleLoggerResultCallback.java @@ -23,6 +23,7 @@ public class SimpleLoggerResultCallback implements FeedClient.ResultCallback { private int failureCounter = 0; private final AtomicInteger sentDocumentCounter; private final int printStatsForEveryXDocument; + private final boolean ignoreConditionNotMet; private Instant startSampleInstant = Instant.now(); private int startSampleResultCount = 0; @@ -36,9 +37,10 @@ public class SimpleLoggerResultCallback implements FeedClient.ResultCallback { * @param sentDocumentCounter a counter that is increased outside this class, but can be nice to print here. * @param printStatsForEveryXDocument how often to print stats. */ - public SimpleLoggerResultCallback(AtomicInteger sentDocumentCounter, int printStatsForEveryXDocument) { + public SimpleLoggerResultCallback(AtomicInteger sentDocumentCounter, int printStatsForEveryXDocument, boolean ignoreConditionNotMet) { this.sentDocumentCounter = sentDocumentCounter; this.printStatsForEveryXDocument = printStatsForEveryXDocument; + this.ignoreConditionNotMet = ignoreConditionNotMet; } /** @@ -95,7 +97,10 @@ public class SimpleLoggerResultCallback implements FeedClient.ResultCallback { printProgress(); } resultCounter++; - if (!documentResult.isSuccess()) { + boolean success = ignoreConditionNotMet + ? documentResult.isSuccessOrConditionNotMet() + : documentResult.isSuccess(); + if ( ! success ) { failureCounter++; println("Failure: " + documentResult + (documentResult.getDetails().isEmpty() ? "" : ":")); for (Result.Detail detail : documentResult.getDetails()) diff --git a/vespa-http-client/src/main/java/com/yahoo/vespa/http/client/runner/CommandLineArguments.java b/vespa-http-client/src/main/java/com/yahoo/vespa/http/client/runner/CommandLineArguments.java index 4ccae25f2da..7ccdf3ebd43 100644 --- a/vespa-http-client/src/main/java/com/yahoo/vespa/http/client/runner/CommandLineArguments.java +++ b/vespa-http-client/src/main/java/com/yahoo/vespa/http/client/runner/CommandLineArguments.java @@ -193,6 +193,10 @@ public class CommandLineArguments { description = "Run validation tool on input files instead of feeding them.") private boolean validateArg = false; + @Option(name = {"--ignoreConditionNotMet"}, + description = "Ignore condition not met failures.") + private boolean ignoreConditionNotMet = false; + @Option(name = {"--priority"}, description = "Specify priority of sent messages, see documentation ") private String priorityArg = null; @@ -251,6 +255,8 @@ public class CommandLineArguments { public boolean getVerbose() { return verboseArg; } + public boolean getIgnoreConditionNotMet() { return ignoreConditionNotMet; } + public boolean getAddRootElementToXml() { return addRootElementToXml; } SessionParams createSessionParams(boolean useJson) { diff --git a/vespa-http-client/src/main/java/com/yahoo/vespa/http/client/runner/Runner.java b/vespa-http-client/src/main/java/com/yahoo/vespa/http/client/runner/Runner.java index 60047993f0e..e3e90c8bbfc 100644 --- a/vespa-http-client/src/main/java/com/yahoo/vespa/http/client/runner/Runner.java +++ b/vespa-http-client/src/main/java/com/yahoo/vespa/http/client/runner/Runner.java @@ -76,7 +76,7 @@ public class Runner { ? commandLineArgs.getWhenVerboseEnabledPrintMessageForEveryXDocuments() : Integer.MAX_VALUE; AtomicInteger numSent = new AtomicInteger(0); - SimpleLoggerResultCallback callback = new SimpleLoggerResultCallback(numSent, intervalOfLogging); + SimpleLoggerResultCallback callback = new SimpleLoggerResultCallback(numSent, intervalOfLogging, commandLineArgs.getIgnoreConditionNotMet()); FeedClient feedClient = FeedClientFactory.create(commandLineArgs.createSessionParams(formatInputStream.getFormat()== FormatInputStream.Format.JSON), callback); diff --git a/vespa-http-client/src/test/java/com/yahoo/vespa/http/client/SimpleLoggerResultCallbackTest.java b/vespa-http-client/src/test/java/com/yahoo/vespa/http/client/SimpleLoggerResultCallbackTest.java index 3582ab2696f..5f4a0fdec9a 100644 --- a/vespa-http-client/src/test/java/com/yahoo/vespa/http/client/SimpleLoggerResultCallbackTest.java +++ b/vespa-http-client/src/test/java/com/yahoo/vespa/http/client/SimpleLoggerResultCallbackTest.java @@ -8,14 +8,15 @@ import java.util.ArrayList; import java.util.concurrent.atomic.AtomicInteger; import static org.hamcrest.CoreMatchers.containsString; -import static org.junit.Assert.*; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertThat; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; public class SimpleLoggerResultCallbackTest { @Test public void testAverageCalculation() { - SimpleLoggerResultCallback logger = new SimpleLoggerResultCallback(new AtomicInteger(3), 0); + SimpleLoggerResultCallback logger = new SimpleLoggerResultCallback(new AtomicInteger(3), 0, false); Instant now = Instant.now(); logger.newSamplingPeriod(now); Result result = mock(Result.class); @@ -30,7 +31,7 @@ public class SimpleLoggerResultCallbackTest { @Test public void testAverageCalculationExteremeValues() { - SimpleLoggerResultCallback logger = new SimpleLoggerResultCallback(new AtomicInteger(3), 0); + SimpleLoggerResultCallback logger = new SimpleLoggerResultCallback(new AtomicInteger(3), 0, false); Instant now = Instant.now(); logger.newSamplingPeriod(now); // 0 duration, 0 documents @@ -40,7 +41,7 @@ public class SimpleLoggerResultCallbackTest { @Test public void testOutput() { - SimpleLoggerResultCallback logger = new SimpleLoggerResultCallback(new AtomicInteger(3), 0); + SimpleLoggerResultCallback logger = new SimpleLoggerResultCallback(new AtomicInteger(3), 0, false); Instant now = Instant.now(); logger.newSamplingPeriod(now); Result result = mock(Result.class); @@ -53,11 +54,10 @@ public class SimpleLoggerResultCallbackTest { assertEquals(rate, 15., 0.1 /* delta */); } - @Test - public void testPrintout() { + private void verifyPrintout(boolean ignoreConditionNotMet) { ArrayList<String> outputList = new ArrayList<>(); - SimpleLoggerResultCallback logger = new SimpleLoggerResultCallback(new AtomicInteger(30), 0) { + SimpleLoggerResultCallback logger = new SimpleLoggerResultCallback(new AtomicInteger(30), 0, ignoreConditionNotMet) { @Override protected void println(String output) { outputList.add(output); @@ -70,9 +70,11 @@ public class SimpleLoggerResultCallbackTest { // 2 success, 1 failure Result result = mock(Result.class); when(result.isSuccess()).thenReturn(true); + when(result.isSuccessOrConditionNotMet()).thenReturn(true); logger.onCompletion("1", result); logger.onCompletion("1", result); when(result.isSuccess()).thenReturn(false); + when(result.isSuccessOrConditionNotMet()).thenReturn(false); when(result.toString()).thenReturn("fooError"); logger.onCompletion("1", result); logger.printProgress(); @@ -81,4 +83,10 @@ public class SimpleLoggerResultCallbackTest { assertThat(outputList.toString(), containsString("Failure: fooError")); } + @Test + public void testPrintout() { + verifyPrintout(false); + verifyPrintout(true); + } + } |