diff options
author | Henning Baldersheim <balder@yahoo-inc.com> | 2022-11-29 17:40:00 +0100 |
---|---|---|
committer | Henning Baldersheim <balder@yahoo-inc.com> | 2022-11-29 17:40:00 +0100 |
commit | e807b7cab069732251d797a25f2bb6c8fd70c095 (patch) | |
tree | 19a421508950b5a00902bc6ee99fe0b99b83646c | |
parent | deaac2672dbf627a319b7ebaba808e7918bd0186 (diff) |
Reduce need to access getJDiscRequest
10 files changed, 48 insertions, 14 deletions
diff --git a/container-core/abi-spec.json b/container-core/abi-spec.json index 9c2638a0a64..5f86db1d385 100644 --- a/container-core/abi-spec.json +++ b/container-core/abi-spec.json @@ -627,6 +627,10 @@ "public com.yahoo.jdisc.http.HttpRequest$Method getMethod()", "public java.net.URI getUri()", "public com.yahoo.jdisc.http.HttpRequest getJDiscRequest()", + "public java.util.Map context()", + "public long creationTime(java.util.concurrent.TimeUnit)", + "public long getConnectedAt(java.util.concurrent.TimeUnit)", + "public long relativeCreatedAtNanoTime()", "public java.lang.String getProperty(java.lang.String)", "public java.util.Map propertyMap()", "public boolean getBooleanProperty(java.lang.String)", diff --git a/container-core/src/main/java/com/yahoo/container/jdisc/HttpRequest.java b/container-core/src/main/java/com/yahoo/container/jdisc/HttpRequest.java index 39f55cedff5..100fb053ecf 100644 --- a/container-core/src/main/java/com/yahoo/container/jdisc/HttpRequest.java +++ b/container-core/src/main/java/com/yahoo/container/jdisc/HttpRequest.java @@ -455,12 +455,37 @@ public class HttpRequest { return parentRequest; } + /** + * <p>Returns the named application context objects. This data is not intended for network transport, rather they + * are intended for passing shared data between components of an Application.</p> + * + * @return The context map. + */ + public Map<String, Object> context() { + return parentRequest.context(); + } + /** Returns the time at which this Request was created. */ public long creationTime(TimeUnit unit) { return parentRequest.creationTime(unit); } /** + * <p>For server requests, this returns the timestamp of when the underlying HTTP channel was connected. + * + * @param unit the unit to return the time in + * @return the timestamp of when the underlying HTTP channel was connected, or request creation time + */ + public long getConnectedAt(TimeUnit unit) { + return parentRequest.getConnectedAt(TimeUnit.MILLISECONDS); + } + + /** + * @return the relative created timestamp (using {@link System#nanoTime()} + */ + public long relativeCreatedAtNanoTime() { return parentRequest.relativeCreatedAtNanoTime(); } + + /** * Returns the value of a request property/parameter. * Multi-value properties are not supported. * diff --git a/container-search/abi-spec.json b/container-search/abi-spec.json index ab8718508b7..22be0d32f69 100644 --- a/container-search/abi-spec.json +++ b/container-search/abi-spec.json @@ -1985,6 +1985,7 @@ "public com.yahoo.search.query.Model getModel()", "public com.yahoo.search.query.Trace getTrace()", "public com.yahoo.container.jdisc.HttpRequest getHttpRequest()", + "public java.net.URI getUri()", "public com.yahoo.search.query.SessionId getSessionId()", "public com.yahoo.search.query.SessionId getSessionId(java.lang.String)", "public void prepare()", 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 f948ddfb8e9..494b16304ea 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 @@ -162,7 +162,7 @@ public abstract class VespaBackEndSearcher extends PingableSearcher { // query root should not be null here Item root = query.getModel().getQueryTree().getRoot(); if (root == null || root instanceof NullItem) { - return new Result(query, ErrorMessage.createNullQuery(query.getHttpRequest().getUri().toString())); + return new Result(query, ErrorMessage.createNullQuery(query.getUri().toString())); } if ( ! getDocumentDatabase(query).schema().rankProfiles().containsKey(query.getRanking().getProfile())) diff --git a/container-search/src/main/java/com/yahoo/prelude/statistics/StatisticsSearcher.java b/container-search/src/main/java/com/yahoo/prelude/statistics/StatisticsSearcher.java index 6401945799b..09f15b4c5c2 100644 --- a/container-search/src/main/java/com/yahoo/prelude/statistics/StatisticsSearcher.java +++ b/container-search/src/main/java/com/yahoo/prelude/statistics/StatisticsSearcher.java @@ -3,8 +3,8 @@ package com.yahoo.prelude.statistics; import com.yahoo.component.chain.dependencies.Before; import com.yahoo.concurrent.CopyOnWriteHashMap; +import com.yahoo.container.jdisc.HttpRequest; import com.yahoo.jdisc.Metric; -import com.yahoo.jdisc.http.HttpRequest; import com.yahoo.metrics.simple.MetricReceiver; import com.yahoo.metrics.simple.MetricSettings; import com.yahoo.processing.request.CompoundName; @@ -410,7 +410,6 @@ public class StatisticsSearcher extends Searcher { */ private static long getStartNanoTime(Query query) { return Optional.ofNullable(query.getHttpRequest()) - .flatMap(httpRequest -> Optional.ofNullable(httpRequest.getJDiscRequest())) .map(HttpRequest::relativeCreatedAtNanoTime) .orElseGet(System::nanoTime); } diff --git a/container-search/src/main/java/com/yahoo/search/Query.java b/container-search/src/main/java/com/yahoo/search/Query.java index f38e4d4d1cd..be964081326 100644 --- a/container-search/src/main/java/com/yahoo/search/Query.java +++ b/container-search/src/main/java/com/yahoo/search/Query.java @@ -46,6 +46,7 @@ import com.yahoo.search.yql.VespaSerializer; import com.yahoo.search.yql.YqlParser; import com.yahoo.yolean.Exceptions; +import java.net.URI; import java.nio.ByteBuffer; import java.util.ArrayList; import java.util.Collections; @@ -912,7 +913,9 @@ public class Query extends com.yahoo.processing.Request implements Cloneable { * Return the HTTP request which caused this query. This will never be null * when running with queries from the network. */ - public HttpRequest getHttpRequest() { return httpRequest; } + public HttpRequest getHttpRequest() { return httpRequest; } + + public URI getUri() { return httpRequest != null ? httpRequest.getUri() : null; } /** Returns the session id of this query, or null if none is assigned */ public SessionId getSessionId() { diff --git a/container-search/src/main/java/com/yahoo/search/handler/SearchHandler.java b/container-search/src/main/java/com/yahoo/search/handler/SearchHandler.java index 3da3f57cb21..39721ffab29 100644 --- a/container-search/src/main/java/com/yahoo/search/handler/SearchHandler.java +++ b/container-search/src/main/java/com/yahoo/search/handler/SearchHandler.java @@ -337,7 +337,7 @@ public class SearchHandler extends LoggingRequestHandler { private void traceRequestAttributes(Query query) { int miminumTraceLevel = 7; if (query.getTraceLevel() >= 7) { - query.trace("Request attributes: " + query.getHttpRequest().getJDiscRequest().context(), miminumTraceLevel); + query.trace("Request attributes: " + query.getHttpRequest().context(), miminumTraceLevel); } } diff --git a/container-search/src/main/java/com/yahoo/search/logging/LoggerEntry.java b/container-search/src/main/java/com/yahoo/search/logging/LoggerEntry.java index 8d8afce4f77..ffac8b89860 100644 --- a/container-search/src/main/java/com/yahoo/search/logging/LoggerEntry.java +++ b/container-search/src/main/java/com/yahoo/search/logging/LoggerEntry.java @@ -9,6 +9,7 @@ import com.yahoo.slime.SlimeUtils; import com.yahoo.text.Utf8; import java.io.IOException; import java.io.UncheckedIOException; +import java.net.URI; import java.nio.ByteBuffer; import java.util.Base64; @@ -37,10 +38,11 @@ public class LoggerEntry { public String queryString() { String queryString = null; if (query != null) { - if (query.getHttpRequest() != null && query.getHttpRequest().getUri() != null) { - queryString = query.getHttpRequest().getUri().getPath(); - if (query.getHttpRequest().getUri().getQuery() != null) { - queryString += "?" + query.getHttpRequest().getUri().getRawQuery(); + URI uri = query.getUri(); + if (uri != null) { + queryString = uri.getPath(); + if (uri.getQuery() != null) { + queryString += "?" + uri.getRawQuery(); } } } diff --git a/container-search/src/main/java/com/yahoo/search/searchers/ConnectionControlSearcher.java b/container-search/src/main/java/com/yahoo/search/searchers/ConnectionControlSearcher.java index 15c683ccb10..90cb05be1f8 100644 --- a/container-search/src/main/java/com/yahoo/search/searchers/ConnectionControlSearcher.java +++ b/container-search/src/main/java/com/yahoo/search/searchers/ConnectionControlSearcher.java @@ -1,7 +1,7 @@ // Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.search.searchers; -import com.yahoo.container.jdisc.HttpRequest; +import com.yahoo.component.annotation.Inject; import com.yahoo.processing.request.CompoundName; import com.yahoo.search.Query; import com.yahoo.search.Result; @@ -53,6 +53,7 @@ public class ConnectionControlSearcher extends Searcher { private static final String HTTP_CONNECTION_HEADER_NAME = "Connection"; private static final String HTTP_CONNECTION_CLOSE_ARGUMENT = "Close"; + @Inject public ConnectionControlSearcher() { this(() -> System.currentTimeMillis()); } @@ -100,14 +101,13 @@ public class ConnectionControlSearcher extends Searcher { } private void setCloseIfLifetimeExceeded(Query query, Result result, int maxLifetimeSeconds) { - final HttpRequest httpRequest = query.getHttpRequest(); - if (httpRequest == null) { + if (query.getHttpRequest() == null) { query.trace(false, 5, simpleName, " got max lifetime = ", maxLifetimeSeconds, ", but got no JDisc request. Setting no header."); return; } - final long connectedAtMillis = httpRequest.getJDiscRequest().getConnectedAt(TimeUnit.MILLISECONDS); + final long connectedAtMillis = query.getHttpRequest().getConnectedAt(TimeUnit.MILLISECONDS); final long maxLifeTimeMillis = maxLifetimeSeconds * 1000L; if (connectedAtMillis + maxLifeTimeMillis < clock.getAsLong()) { result.getHeaders(true).put(HTTP_CONNECTION_HEADER_NAME, HTTP_CONNECTION_CLOSE_ARGUMENT); diff --git a/container-search/src/test/java/com/yahoo/prelude/test/QueryTestCase.java b/container-search/src/test/java/com/yahoo/prelude/test/QueryTestCase.java index 06b6eca5f84..d70b42aa36b 100644 --- a/container-search/src/test/java/com/yahoo/prelude/test/QueryTestCase.java +++ b/container-search/src/test/java/com/yahoo/prelude/test/QueryTestCase.java @@ -71,7 +71,7 @@ public class QueryTestCase { + "yahoo+com!253+interest:www+yahoo!138+" + "interest:www+yahoo+com!136" + "&hits=20&offset=0&vectorranking=queryrank"); - assertEquals("/p13n", q.getHttpRequest().getUri().getPath()); + assertEquals("/p13n", q.getUri().getPath()); assertEquals(0, q.getOffset()); assertEquals(20, q.getHits()); assertEquals("queryrank", q.properties().get("vectorranking")); |