diff options
3 files changed, 63 insertions, 10 deletions
diff --git a/vespaclient-container-plugin/src/test/java/com/yahoo/feedhandler/VespaFeedHandlerTestCase.java b/vespaclient-container-plugin/src/test/java/com/yahoo/feedhandler/VespaFeedHandlerTestCase.java index 823f4b6f568..d1ed02209b2 100755 --- a/vespaclient-container-plugin/src/test/java/com/yahoo/feedhandler/VespaFeedHandlerTestCase.java +++ b/vespaclient-container-plugin/src/test/java/com/yahoo/feedhandler/VespaFeedHandlerTestCase.java @@ -640,7 +640,7 @@ public class VespaFeedHandlerTestCase { @Test public void testOverrides() throws Exception { setup(null); - Result res = testFeed(xmlFilesPath + "test10b.xml", "feed?timeout=2.222&route=storage&priority=HIGH_2"); + Result res = testFeed(xmlFilesPath + "test10b.xml", "feed?timeout=2.222&route=storage&priority=HIGH_2&totaltimeout=-1"); assertEquals(2, res.messages.size()); @@ -652,6 +652,54 @@ public class VespaFeedHandlerTestCase { } @Test + public void testTimeoutWithNoUpperBound() throws Exception { + setup(null); + Result res = testFeed(xmlFilesPath + "test10b.xml", "feed?timeout=2.222&totaltimeout=-1"); + + assertEquals(2, res.messages.size()); + + for (Message m : res.messages) { + assertEquals(2222, m.getTimeRemaining()); + } + } + + @Test + public void testTimeout() throws Exception { + setup(null); + Result res = testFeed(xmlFilesPath + "test10b.xml", "feed?timeout=2.222"); + + assertEquals(2, res.messages.size()); + + for (Message m : res.messages) { + assertTrue(2222 >= m.getTimeRemaining()); + } + } + + @Test + public void testTotalTimeout() throws Exception { + setup(null); + Result res = testFeed(xmlFilesPath + "test10b.xml", "feed?totaltimeout=2.222"); + + assertEquals(2, res.messages.size()); + + for (Message m : res.messages) { + assertTrue(2222 >= m.getTimeRemaining()); + } + } + + @Test + public void testTotalTimeoutAndNormalTimeout() throws Exception { + setup(null); + Result res = testFeed(xmlFilesPath + "test10b.xml", "feed?totaltimeout=1000&timeout=2.222"); + + assertEquals(2, res.messages.size()); + + for (Message m : res.messages) { + assertEquals(2222, m.getTimeRemaining()); + } + } + + @Test public void testBogusPriority() throws Exception { try { setup(null); diff --git a/vespaclient-core/src/main/java/com/yahoo/feedapi/MessagePropertyProcessor.java b/vespaclient-core/src/main/java/com/yahoo/feedapi/MessagePropertyProcessor.java index 017525ef1c2..3897f1d7d2a 100644 --- a/vespaclient-core/src/main/java/com/yahoo/feedapi/MessagePropertyProcessor.java +++ b/vespaclient-core/src/main/java/com/yahoo/feedapi/MessagePropertyProcessor.java @@ -107,7 +107,7 @@ public class MessagePropertyProcessor implements ConfigSubscriber.SingleSubscrib String loadTypeStr = null; String traceStr = null; String createIfNonExistentParam = null; - boolean useConstantTimeout = false; + Double totalTimeoutParam = null; if (request != null) { routeParam = request.getProperty("route"); @@ -116,7 +116,10 @@ public class MessagePropertyProcessor implements ConfigSubscriber.SingleSubscrib if (timeoutStr != null) { timeoutParam = Double.parseDouble(timeoutStr); } - useConstantTimeout = request.getBooleanProperty("useconstanttimeout"); + timeoutStr = request.getProperty("totaltimeout"); + if (timeoutStr != null) { + totalTimeoutParam = Double.parseDouble(timeoutStr); + } priorityParam = request.getProperty("priority"); traceStr = request.getProperty("tracelevel"); @@ -143,6 +146,8 @@ public class MessagePropertyProcessor implements ConfigSubscriber.SingleSubscrib abortOnFeedError = (abortOnFeedErrorParam == null ? defaultAbortOnSendError : (!"false".equals(abortOnFeedErrorParam))); createIfNonExistent = (createIfNonExistentParam == null ? defaultCreateIfNonExistent : ("true".equals(createIfNonExistentParam))); } + long totalTimeout = (totalTimeoutParam == null) ? timeout : (long)(totalTimeoutParam*1000); + DocumentProtocol.Priority priority = null; if (priorityParam != null) { priority = DocumentProtocol.getPriorityByName(priorityParam); @@ -157,7 +162,7 @@ public class MessagePropertyProcessor implements ConfigSubscriber.SingleSubscrib loadType = LoadType.DEFAULT; } - return new PropertySetter(useConstantTimeout, route, timeout, priority, loadType, retry, abortOnDocumentError, abortOnFeedError, createIfNonExistent, traceStr != null ? Integer.parseInt(traceStr) : 0); + return new PropertySetter(route, timeout, totalTimeout, priority, loadType, retry, abortOnDocumentError, abortOnFeedError, createIfNonExistent, traceStr != null ? Integer.parseInt(traceStr) : 0); } public long getDefaultTimeoutMillis() { return defaultTimeoutMillis; } @@ -220,8 +225,8 @@ public class MessagePropertyProcessor implements ConfigSubscriber.SingleSubscrib private Route route; /** Timeout (in milliseconds) */ private long timeout; + private long totalTimeout; private long startTime; - boolean useConstantTimeout; /** Explicit priority set. May be null */ private DocumentProtocol.Priority priority; private boolean retryEnabled; @@ -231,12 +236,12 @@ public class MessagePropertyProcessor implements ConfigSubscriber.SingleSubscrib private LoadType loadType; private int traceLevel; - public PropertySetter(boolean useConstantTimeout, Route route, long timeout, DocumentProtocol.Priority priority, LoadType loadType, + public PropertySetter(Route route, long timeout, long totalTimeout, DocumentProtocol.Priority priority, LoadType loadType, boolean retryEnabled, boolean abortOnDocumentError, boolean abortOnFeedError, boolean createIfNonExistent, int traceLevel) { - this.useConstantTimeout = useConstantTimeout; this.route = route; this.timeout = timeout; + this.totalTimeout = totalTimeout; this.priority = priority; this.loadType = loadType; this.retryEnabled = retryEnabled; @@ -248,9 +253,9 @@ public class MessagePropertyProcessor implements ConfigSubscriber.SingleSubscrib } private long getTimeRemaining() { - return useConstantTimeout + return (totalTimeout < 0L) ? timeout - : timeout - (SystemTimer.INSTANCE.milliTime() - startTime); + : Math.min(timeout, totalTimeout - (SystemTimer.INSTANCE.milliTime() - startTime)); } public Route getRoute() { diff --git a/vespaclient-java/src/main/java/com/yahoo/vespafeeder/VespaFeeder.java b/vespaclient-java/src/main/java/com/yahoo/vespafeeder/VespaFeeder.java index 4cbb3a45298..0d70f03014e 100755 --- a/vespaclient-java/src/main/java/com/yahoo/vespafeeder/VespaFeeder.java +++ b/vespaclient-java/src/main/java/com/yahoo/vespafeeder/VespaFeeder.java @@ -113,7 +113,7 @@ public class VespaFeeder { setPriority(req); setCreateIfNonExistent(req); setJsonInput(req, input); - req.setProperty("useconstanttimeout", "true"); + req.setProperty("totaltimeout", "-1"); } private void setPriority(InputStreamRequest req) { |