diff options
author | Bjørn Christian Seime <bjorn.christian@seime.no> | 2017-03-15 15:56:36 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-03-15 15:56:36 +0100 |
commit | 0f6566f1f0de12573a02c54f45d27ea896b1c752 (patch) | |
tree | 7418e415c6519d1d586892e09c1e9d6c882fc408 /container-search | |
parent | f97f1f8d65c53128a98a497a8e3299d6b4abc41f (diff) | |
parent | ba0ed9f7bd34d930d632561c85ccf3c5af16d937 (diff) |
Merge pull request #2012 from yahoo/bjorncs/fix-trace-level-bug-streaming-searcher
Bjorncs/fix trace level bug streaming searcher
Diffstat (limited to 'container-search')
3 files changed, 68 insertions, 94 deletions
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 0fd152e4718..9953cad5e86 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 @@ -1,29 +1,6 @@ // Copyright 2016 Yahoo Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.search.rendering; -import java.io.IOException; -import java.io.OutputStream; -import java.io.PrintWriter; -import java.io.StringWriter; -import java.math.BigDecimal; -import java.math.BigInteger; -import java.nio.charset.StandardCharsets; -import java.util.ArrayDeque; -import java.util.Arrays; -import java.util.Collections; -import java.util.Deque; -import java.util.Iterator; -import java.util.Map; -import java.util.Optional; -import java.util.Set; -import java.util.concurrent.Executor; -import java.util.function.LongSupplier; - -import com.yahoo.document.datatypes.TensorFieldValue; -import com.yahoo.tensor.Tensor; -import org.json.JSONArray; -import org.json.JSONObject; - import com.fasterxml.jackson.core.JsonEncoding; import com.fasterxml.jackson.core.JsonFactory; import com.fasterxml.jackson.core.JsonGenerator; @@ -35,6 +12,7 @@ import com.yahoo.data.access.Inspectable; import com.yahoo.data.access.simple.JsonRender; import com.yahoo.document.datatypes.FieldValue; import com.yahoo.document.datatypes.StringFieldValue; +import com.yahoo.document.datatypes.TensorFieldValue; import com.yahoo.document.json.JsonWriter; import com.yahoo.prelude.fastsearch.FastHit; import com.yahoo.processing.Response; @@ -61,8 +39,29 @@ import com.yahoo.search.result.ErrorMessage; import com.yahoo.search.result.Hit; import com.yahoo.search.result.HitGroup; import com.yahoo.search.result.NanNumber; +import com.yahoo.tensor.Tensor; import com.yahoo.yolean.trace.TraceNode; import com.yahoo.yolean.trace.TraceVisitor; +import org.json.JSONArray; +import org.json.JSONObject; + +import java.io.IOException; +import java.io.OutputStream; +import java.io.PrintWriter; +import java.io.StringWriter; +import java.math.BigDecimal; +import java.math.BigInteger; +import java.nio.charset.StandardCharsets; +import java.util.ArrayDeque; +import java.util.Arrays; +import java.util.Collections; +import java.util.Deque; +import java.util.Iterator; +import java.util.Map; +import java.util.Optional; +import java.util.Set; +import java.util.concurrent.Executor; +import java.util.function.LongSupplier; /** * JSON renderer for search results. @@ -351,6 +350,7 @@ public class JsonRenderer extends AsynchronousSectionedRenderer<Result> { private void renderTrace(Trace trace) throws IOException { if (!trace.traceNode().children().iterator().hasNext()) return; + if (getResult().getQuery().getTraceLevel() == 0) return; try { long basetime = trace.traceNode().timestamp(); diff --git a/container-search/src/main/java/com/yahoo/vespa/streamingvisitors/VdsStreamingSearcher.java b/container-search/src/main/java/com/yahoo/vespa/streamingvisitors/VdsStreamingSearcher.java index a84a1a545b6..e27893a2b20 100644 --- a/container-search/src/main/java/com/yahoo/vespa/streamingvisitors/VdsStreamingSearcher.java +++ b/container-search/src/main/java/com/yahoo/vespa/streamingvisitors/VdsStreamingSearcher.java @@ -1,6 +1,12 @@ // Copyright 2016 Yahoo Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.vespa.streamingvisitors; +import java.io.IOException; +import java.math.BigInteger; +import java.util.List; +import java.util.Map; +import java.util.logging.Logger; + import com.yahoo.document.DocumentId; import com.yahoo.document.idstring.IdString; import com.yahoo.document.select.parser.ParseException; @@ -17,9 +23,9 @@ import com.yahoo.prelude.fastsearch.FastHit; import com.yahoo.prelude.fastsearch.GroupingListHit; import com.yahoo.prelude.fastsearch.TimeoutException; import com.yahoo.prelude.fastsearch.VespaBackEndSearcher; -import com.yahoo.processing.request.CompoundName; import com.yahoo.search.Query; import com.yahoo.search.Result; +import com.yahoo.processing.request.CompoundName; import com.yahoo.search.result.ErrorMessage; import com.yahoo.search.result.Relevance; import com.yahoo.search.searchchain.Execution; @@ -27,12 +33,6 @@ import com.yahoo.searchlib.aggregation.Grouping; import com.yahoo.vdslib.DocumentSummary; import com.yahoo.vdslib.SearchResult; -import java.io.IOException; -import java.math.BigInteger; -import java.util.List; -import java.util.Map; -import java.util.logging.Logger; - /** * The searcher which forwards queries to storage nodes using visiting. * The searcher is a visitor client responsible for starting search @@ -152,10 +152,8 @@ public class VdsStreamingSearcher extends VespaBackEndSearcher { summaryMap.size()); result.setTotalHitCount(visitor.getTotalHitCount()); - - Execution.Trace traceChild = query.getContext(true).getTrace().createChild(); - traceChild.setTraceLevel(2); - traceChild.setProperty(STREAMING_STATISTICS, visitor.getStatistics()); + query.trace(visitor.getStatistics().toString(), false, 2); + query.getContext(true).setProperty(STREAMING_STATISTICS, visitor.getStatistics()); Packet[] summaryPackets = new Packet [hits.size()]; 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 3f22b22a7cf..b555e038f1c 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 @@ -1,29 +1,6 @@ // Copyright 2016 Yahoo Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.search.rendering; -import static org.junit.Assert.*; -import static org.mockito.Mockito.times; - -import java.io.ByteArrayOutputStream; -import java.io.IOException; -import java.math.BigDecimal; -import java.math.BigInteger; -import java.util.List; -import java.util.Map; -import java.util.concurrent.ExecutionException; - -import com.yahoo.document.datatypes.TensorFieldValue; -import com.yahoo.document.predicate.Predicate; - -import com.yahoo.tensor.Tensor; -import com.yahoo.tensor.TensorType; -import org.json.JSONArray; -import org.json.JSONException; -import org.json.JSONObject; -import org.junit.After; -import org.junit.Before; -import org.junit.Test; - import com.fasterxml.jackson.core.JsonGenerator; import com.fasterxml.jackson.core.JsonParseException; import com.fasterxml.jackson.databind.JsonMappingException; @@ -39,6 +16,8 @@ import com.yahoo.document.Field; import com.yahoo.document.StructDataType; import com.yahoo.document.datatypes.StringFieldValue; import com.yahoo.document.datatypes.Struct; +import com.yahoo.document.datatypes.TensorFieldValue; +import com.yahoo.document.predicate.Predicate; import com.yahoo.prelude.fastsearch.FastHit; import com.yahoo.prelude.hitfield.JSONString; import com.yahoo.search.Query; @@ -59,16 +38,35 @@ import com.yahoo.search.result.Relevance; import com.yahoo.search.result.StructuredData; import com.yahoo.search.searchchain.Execution; import com.yahoo.search.statistics.ElapsedTimeTestCase; -import com.yahoo.search.statistics.TimeTracker; import com.yahoo.search.statistics.ElapsedTimeTestCase.CreativeTimeSource; import com.yahoo.search.statistics.ElapsedTimeTestCase.UselessSearcher; +import com.yahoo.search.statistics.TimeTracker; import com.yahoo.slime.Cursor; import com.yahoo.slime.Slime; +import com.yahoo.tensor.Tensor; +import com.yahoo.tensor.TensorType; import com.yahoo.text.Utf8; import com.yahoo.yolean.trace.TraceNode; - +import org.json.JSONArray; +import org.json.JSONException; +import org.json.JSONObject; +import org.junit.After; +import org.junit.Before; +import org.junit.Test; import org.mockito.Mockito; +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.math.BigDecimal; +import java.math.BigInteger; +import java.util.List; +import java.util.Map; +import java.util.concurrent.ExecutionException; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; +import static org.mockito.Mockito.times; + /** * Functional testing of {@link JsonRenderer}. * @@ -326,46 +324,24 @@ public class JsonRendererTestCase { assertEquals(exp, gen); } - @Test - public final void testHalfEmptyTracing() throws IOException, InterruptedException, ExecutionException { - String expected = "{\n" - + " \"root\": {\n" - + " \"fields\": {\n" - + " \"totalCount\": 0\n" - + " },\n" - + " \"id\": \"toplevel\",\n" - + " \"relevance\": 1.0\n" - + " },\n" - + " \"trace\": {\n" - + " \"children\": [\n" - + " {\n" - + " \"children\": [\n" - + " {" - + " \"children\": [\n" - + " {\n" - + " \"message\": \"green\"" - + " }" - + " ]" - + " }\n" - + " ]\n" - + " }\n" - + " ]\n" - + " }\n" - + "}\n"; + public void trace_is_not_included_if_tracelevel_0() throws IOException, ExecutionException, InterruptedException { + String expected = + "{\n" + + " \"root\": {\n" + + " \"id\": \"toplevel\",\n" + + " \"relevance\": 1.0,\n" + + " \"fields\": {\n" + + " \"totalCount\": 0\n" + + " }\n" + + " }\n" + + "}"; Query q = new Query("/?query=a&tracelevel=0"); Execution execution = new Execution(Execution.Context.createContextStub()); Result r = new Result(q); - execution.search(q); - subExecution(execution, "red", 0); - subExecution(execution, "green", 1); - subExecution(execution, "blue", 0); - q.trace("marker", 1); - ByteArrayOutputStream bs = new ByteArrayOutputStream(); - ListenableFuture<Boolean> f = renderer.render(bs, r, execution, null); - assertTrue(f.get()); - String summary = Utf8.toString(bs.toByteArray()); + q.getContext(true).setProperty("prop-key", "prop-value"); + String summary = render(execution, r); assertEqualJson(expected, summary); } |