summaryrefslogtreecommitdiffstats
path: root/container-search
diff options
context:
space:
mode:
authorjonmv <venstad@gmail.com>2023-10-02 14:31:09 +0200
committerjonmv <venstad@gmail.com>2023-10-02 14:31:09 +0200
commit28bd83e8c7629a0558ca092424fbe8deda879728 (patch)
treee18fb700a5f695e34655cdd408a6546b34a31e62 /container-search
parent5706d89036798a37025409a70dfdded8c6545a9a (diff)
Check query timeout in SearchHandler
Diffstat (limited to 'container-search')
-rw-r--r--container-search/src/main/java/com/yahoo/search/handler/SearchHandler.java3
-rw-r--r--container-search/src/main/java/com/yahoo/search/result/ErrorMessage.java2
-rw-r--r--container-search/src/test/java/com/yahoo/search/handler/SearchHandlerTest.java14
3 files changed, 17 insertions, 2 deletions
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 ecce5ddd740..9e60a720020 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
@@ -261,6 +261,9 @@ public class SearchHandler extends LoggingRequestHandler {
} else if (searchChain == null) {
result = new Result(query,
ErrorMessage.createInvalidQueryParameter("No search chain named '" + searchChainName + "' was found"));
+ } else if (query.getTimeLeft() <= 0) {
+ result = new Result(query,
+ ErrorMessage.createTimeout("No time left after waiting for " + query.getDurationTime() + "ms to execute query"));
} else {
String pathAndQuery = UriTools.rawRequest(request.getUri());
result = search(pathAndQuery, query, searchChain);
diff --git a/container-search/src/main/java/com/yahoo/search/result/ErrorMessage.java b/container-search/src/main/java/com/yahoo/search/result/ErrorMessage.java
index b7f7150f209..10b191cc20f 100644
--- a/container-search/src/main/java/com/yahoo/search/result/ErrorMessage.java
+++ b/container-search/src/main/java/com/yahoo/search/result/ErrorMessage.java
@@ -114,7 +114,7 @@ public class ErrorMessage extends com.yahoo.processing.request.ErrorMessage {
public static final int timeoutCode = Error.TIMEOUT.code;
/** Creates an error indicating that a request to a backend timed out. */
public static ErrorMessage createTimeout(String detailedMessage) {
- return new ErrorMessage(timeoutCode, "Timed out",detailedMessage);
+ return new ErrorMessage(timeoutCode, "Timed out", detailedMessage);
}
public static final int emptyDocsumsCode = Error.EMPTY_DOCUMENTS.code;
diff --git a/container-search/src/test/java/com/yahoo/search/handler/SearchHandlerTest.java b/container-search/src/test/java/com/yahoo/search/handler/SearchHandlerTest.java
index eb461d6211f..9d45e75f333 100644
--- a/container-search/src/test/java/com/yahoo/search/handler/SearchHandlerTest.java
+++ b/container-search/src/test/java/com/yahoo/search/handler/SearchHandlerTest.java
@@ -36,7 +36,13 @@ import java.net.URI;
import java.util.concurrent.Executors;
import static com.yahoo.yolean.Exceptions.uncheckInterrupted;
-import static org.junit.jupiter.api.Assertions.*;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertNotSame;
+import static org.junit.jupiter.api.Assertions.assertNull;
+import static org.junit.jupiter.api.Assertions.assertSame;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.junit.jupiter.api.Assertions.fail;
/**
* @author bratseth
@@ -109,6 +115,12 @@ public class SearchHandlerTest {
}
@Test
+ void testTimeout() {
+ // 1µs is truncated to 0ms, so this will always time out.
+ assertTrue(driver.sendRequest("http://localhost?query=test&timeout=1µs").readAll().contains("Timed out"));
+ }
+
+ @Test
synchronized void testPluginError() {
assertTrue(driver.sendRequest("http://localhost?query=test&searchChain=exceptionInPlugin").readAll().contains("NullPointerException"));
}