summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--container-core/src/main/java/com/yahoo/container/handler/Coverage.java7
-rw-r--r--container-search/src/main/java/com/yahoo/prelude/fastsearch/VespaBackEndSearcher.java4
-rw-r--r--container-search/src/main/java/com/yahoo/search/rendering/JsonRenderer.java10
-rw-r--r--container-search/src/main/java/com/yahoo/search/result/Coverage.java14
-rw-r--r--container-search/src/test/java/com/yahoo/search/rendering/JsonRendererTestCase.java35
5 files changed, 59 insertions, 11 deletions
diff --git a/container-core/src/main/java/com/yahoo/container/handler/Coverage.java b/container-core/src/main/java/com/yahoo/container/handler/Coverage.java
index 6c1cfb0fab3..8ff56595f1a 100644
--- a/container-core/src/main/java/com/yahoo/container/handler/Coverage.java
+++ b/container-core/src/main/java/com/yahoo/container/handler/Coverage.java
@@ -2,6 +2,8 @@
package com.yahoo.container.handler;
+import com.google.common.annotations.Beta;
+
/**
* The coverage report for a result set.
*
@@ -105,15 +107,18 @@ public class Coverage {
/**
* Total number of documents that will be searchable once redistribution has settled.
+ * Still in beta, sematics not finalized yet.
*
* @return Total number of documents that will soon be available.
*/
+ @Beta
public long getSoonActive() { return soonActive; }
- public boolean isDegraded() { return degradedReason != 0; }
+ public boolean isDegraded() { return (degradedReason != 0) || isDegradedByNonIdealState(); }
public boolean isDegradedByMatchPhase() { return (degradedReason & DEGRADED_BY_MATCH_PHASE) != 0; }
public boolean isDegradedByTimeout() { return (degradedReason & DEGRADED_BY_TIMEOUT) != 0; }
public boolean isDegradedByAdapativeTimeout() { return (degradedReason & DEGRADED_BY_ADAPTIVE_TIMEOUT) != 0; }
+ public boolean isDegradedByNonIdealState() { return (degradedReason == 0) && (getResultPercentage() != 100);}
/**
* @return whether the search had full coverage or not
diff --git a/container-search/src/main/java/com/yahoo/prelude/fastsearch/VespaBackEndSearcher.java b/container-search/src/main/java/com/yahoo/prelude/fastsearch/VespaBackEndSearcher.java
index 872ed5ac11c..1b44d60cce9 100644
--- a/container-search/src/main/java/com/yahoo/prelude/fastsearch/VespaBackEndSearcher.java
+++ b/container-search/src/main/java/com/yahoo/prelude/fastsearch/VespaBackEndSearcher.java
@@ -417,7 +417,9 @@ public abstract class VespaBackEndSearcher extends PingableSearcher {
}
if (resultPacket.getCoverageFeature()) {
- result.setCoverage(new Coverage(resultPacket.getCoverageDocs(), resultPacket.getActiveDocs()).setSoonActive(resultPacket.getSoonActiveDocs()).setDegradedReason(resultPacket.getDegradedReason()));
+ result.setCoverage(new Coverage(resultPacket.getCoverageDocs(), resultPacket.getActiveDocs())
+ .setSoonActive(resultPacket.getSoonActiveDocs())
+ .setDegradedReason(resultPacket.getDegradedReason()));
}
}
diff --git a/container-search/src/main/java/com/yahoo/search/rendering/JsonRenderer.java b/container-search/src/main/java/com/yahoo/search/rendering/JsonRenderer.java
index 5a195668f81..0fd152e4718 100644
--- a/container-search/src/main/java/com/yahoo/search/rendering/JsonRenderer.java
+++ b/container-search/src/main/java/com/yahoo/search/rendering/JsonRenderer.java
@@ -96,13 +96,11 @@ public class JsonRenderer extends AsynchronousSectionedRenderer<Result> {
private static final String COVERAGE = "coverage";
private static final String COVERAGE_COVERAGE = "coverage";
private static final String COVERAGE_DOCUMENTS = "documents";
- private static final String COVERAGE_ACTIVE = "active";
- private static final String COVERAGE_SOON_ACTIVE = "soon-active";
private static final String COVERAGE_DEGRADE = "degraded";
private static final String COVERAGE_DEGRADE_MATCHPHASE = "match-phase";
private static final String COVERAGE_DEGRADE_TIMEOUT = "timeout";
private static final String COVERAGE_DEGRADE_ADAPTIVE_TIMEOUT = "adaptive-timeout";
- private static final String COVERAGE_NON_IDEAL_STATE = "non-ideal-state";
+ private static final String COVERAGE_DEGRADED_NON_IDEAL_STATE = "non-ideal-state";
private static final String COVERAGE_FULL = "full";
private static final String COVERAGE_NODES = "nodes";
private static final String COVERAGE_RESULTS = "results";
@@ -451,11 +449,7 @@ public class JsonRenderer extends AsynchronousSectionedRenderer<Result> {
generator.writeBooleanField(COVERAGE_DEGRADE_MATCHPHASE, c.isDegradedByMatchPhase());
generator.writeBooleanField(COVERAGE_DEGRADE_TIMEOUT, c.isDegradedByTimeout());
generator.writeBooleanField(COVERAGE_DEGRADE_ADAPTIVE_TIMEOUT, c.isDegradedByAdapativeTimeout());
- generator.writeEndObject();
- } else if (c.getResultPercentage() != 100) {
- generator.writeObjectFieldStart(COVERAGE_NON_IDEAL_STATE);
- generator.writeNumberField(COVERAGE_ACTIVE, c.getActive());
- generator.writeNumberField(COVERAGE_SOON_ACTIVE, c.getSoonActive());
+ generator.writeBooleanField(COVERAGE_DEGRADED_NON_IDEAL_STATE, c.isDegradedByNonIdealState());
generator.writeEndObject();
}
generator.writeBooleanField(COVERAGE_FULL, c.getFull());
diff --git a/container-search/src/main/java/com/yahoo/search/result/Coverage.java b/container-search/src/main/java/com/yahoo/search/result/Coverage.java
index 13deaf36db7..ebb91a64723 100644
--- a/container-search/src/main/java/com/yahoo/search/result/Coverage.java
+++ b/container-search/src/main/java/com/yahoo/search/result/Coverage.java
@@ -1,6 +1,8 @@
// Copyright 2016 Yahoo Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
package com.yahoo.search.result;
+import com.google.common.annotations.Beta;
+
/**
* The coverage report for a result set.
*
@@ -21,7 +23,19 @@ public class Coverage extends com.yahoo.container.handler.Coverage {
super(docs, nodes, full, resultSets);
}
+ /**
+ * Will set number of documents present in ideal state
+ * @param soonActive
+ * @return self for chaining
+ */
+ @Beta
public Coverage setSoonActive(long soonActive) { this.soonActive = soonActive; return this; }
+
+ /**
+ * Will set the reasons for degraded coverage as reported by vespa backend.
+ * @param degradedReason
+ * @return self for chaining
+ */
public Coverage setDegradedReason(int degradedReason) { this.degradedReason = degradedReason; return this; }
}
diff --git a/container-search/src/test/java/com/yahoo/search/rendering/JsonRendererTestCase.java b/container-search/src/test/java/com/yahoo/search/rendering/JsonRendererTestCase.java
index 6189e009e91..3f22b22a7cf 100644
--- a/container-search/src/test/java/com/yahoo/search/rendering/JsonRendererTestCase.java
+++ b/container-search/src/test/java/com/yahoo/search/rendering/JsonRendererTestCase.java
@@ -599,7 +599,40 @@ public class JsonRendererTestCase {
r.hits().add(gg);
r.hits().addError(ErrorMessage.createInternalServerError("boom"));
String summary = render(execution, r);
- // System.out.println(summary);
+ assertEqualJson(expected, summary);
+ }
+
+ @Test
+ public void testCoverage() throws InterruptedException, ExecutionException, IOException {
+ String expected = "{\n"
+ + " \"root\": {\n"
+ + " \"coverage\": {\n"
+ + " \"coverage\": 83,\n"
+ + " \"documents\": 500,\n"
+ + " \"degraded\" : {\n"
+ + " \"match-phase\" : true,\n"
+ + " \"timeout\" : false,\n"
+ + " \"adaptive-timeout\" : true,\n"
+ + " \"non-ideal-state\" : false"
+ + " },\n"
+ + " \"full\": false,\n"
+ + " \"nodes\": 0,\n"
+ + " \"results\": 1,\n"
+ + " \"resultsFull\": 0\n"
+ + " },\n"
+ + " \"fields\": {\n"
+ + " \"totalCount\": 0\n"
+ + " },\n"
+ + " \"id\": \"toplevel\",\n"
+ + " \"relevance\": 1.0\n"
+ + " }\n"
+ + "}";
+ Query q = new Query("/?query=a&tracelevel=5&reportCoverage=true");
+ Execution execution = new Execution(Execution.Context.createContextStub());
+ Result r = new Result(q);
+ r.setCoverage(new Coverage(500, 600).setDegradedReason(5));
+
+ String summary = render(execution, r);
assertEqualJson(expected, summary);
}