diff options
author | Henning Baldersheim <balder@yahoo-inc.com> | 2018-10-29 15:36:44 +0100 |
---|---|---|
committer | Henning Baldersheim <balder@yahoo-inc.com> | 2018-10-29 15:37:57 +0100 |
commit | 866b9fab0caa41276fd6e79a2e27bdb3287fa79d (patch) | |
tree | ee7059e0f7f30e30bda8372afdad90773d9bad72 /vespaclient-core | |
parent | 58a26cf97e7b787f843587f5189cbbfce244fcb6 (diff) |
Also obey the timeout.
Diffstat (limited to 'vespaclient-core')
6 files changed, 23 insertions, 10 deletions
diff --git a/vespaclient-core/src/main/java/com/yahoo/feedapi/Feeder.java b/vespaclient-core/src/main/java/com/yahoo/feedapi/Feeder.java index e354cba141d..a1440a1ff32 100644 --- a/vespaclient-core/src/main/java/com/yahoo/feedapi/Feeder.java +++ b/vespaclient-core/src/main/java/com/yahoo/feedapi/Feeder.java @@ -78,7 +78,7 @@ public abstract class Feeder { return errors; } - while (!sender.isAborted()) { + while (!sender.isAborted() && !sender.hasTimedOut()) { try { VespaXMLFeedReader.Operation op = new VespaXMLFeedReader.Operation(); reader.read(op); @@ -92,10 +92,7 @@ public abstract class Feeder { } else { sender.sendOperation(op); } - } catch (XMLStreamException e) { - addException(e); - break; - } catch (NullPointerException e) { + } catch (XMLStreamException | NullPointerException e) { addException(e); break; } catch (Exception e) { diff --git a/vespaclient-core/src/main/java/com/yahoo/feedapi/SimpleFeedAccess.java b/vespaclient-core/src/main/java/com/yahoo/feedapi/SimpleFeedAccess.java index 98609650432..c4fb9a1e04a 100755 --- a/vespaclient-core/src/main/java/com/yahoo/feedapi/SimpleFeedAccess.java +++ b/vespaclient-core/src/main/java/com/yahoo/feedapi/SimpleFeedAccess.java @@ -14,6 +14,7 @@ public interface SimpleFeedAccess { void put(Document doc, TestAndSetCondition condition); void remove(DocumentId docId, TestAndSetCondition condition); void update(DocumentUpdate update, TestAndSetCondition condition); + boolean hasTimedOut(); boolean isAborted(); void close(); } diff --git a/vespaclient-core/src/main/java/com/yahoo/feedapi/SingleSender.java b/vespaclient-core/src/main/java/com/yahoo/feedapi/SingleSender.java index e0e12b26ae6..6f9d539855e 100755 --- a/vespaclient-core/src/main/java/com/yahoo/feedapi/SingleSender.java +++ b/vespaclient-core/src/main/java/com/yahoo/feedapi/SingleSender.java @@ -19,16 +19,18 @@ public class SingleSender implements SimpleFeedAccess { private final SharedSender.ResultCallback owner; private final SharedSender sender; private final List<MessageProcessor> messageProcessors = new ArrayList<>(); + private final long timeofDoom; private boolean blockingQueue; - public SingleSender(SharedSender.ResultCallback owner, SharedSender sender, boolean blockingQueue) { + public SingleSender(SharedSender.ResultCallback owner, SharedSender sender, long timeoutMS, boolean blockingQueue) { this.owner = owner; this.sender = sender; + timeofDoom = System.currentTimeMillis() + timeoutMS; this.blockingQueue = blockingQueue; } - public SingleSender(SharedSender.ResultCallback owner, SharedSender sender) { - this(owner, sender, true); + public SingleSender(SharedSender.ResultCallback owner, int timeoutMS, SharedSender sender) { + this(owner, sender, timeoutMS, true); } @Override @@ -103,4 +105,9 @@ public class SingleSender implements SimpleFeedAccess { @Override public void close() { } + + @Override + boolean hasTimedOut() { + return System.currentTimeMillis() > timeofDoom; + } } diff --git a/vespaclient-core/src/main/java/com/yahoo/feedapi/VespaFeedSender.java b/vespaclient-core/src/main/java/com/yahoo/feedapi/VespaFeedSender.java index b441e81a829..a5042e91ef0 100755 --- a/vespaclient-core/src/main/java/com/yahoo/feedapi/VespaFeedSender.java +++ b/vespaclient-core/src/main/java/com/yahoo/feedapi/VespaFeedSender.java @@ -17,6 +17,9 @@ public class VespaFeedSender { public boolean isAborted() { return sender.isAborted(); } + boolean hasTimedOut() { + return sender.hasTimedOut(); + } public void sendOperation(VespaXMLFeedReader.Operation op) { switch (op.getType()) { diff --git a/vespaclient-core/src/main/java/com/yahoo/feedhandler/ThreadedFeedAccess.java b/vespaclient-core/src/main/java/com/yahoo/feedhandler/ThreadedFeedAccess.java index 3ad3e0b7f42..f09e9ae7662 100644 --- a/vespaclient-core/src/main/java/com/yahoo/feedhandler/ThreadedFeedAccess.java +++ b/vespaclient-core/src/main/java/com/yahoo/feedhandler/ThreadedFeedAccess.java @@ -79,4 +79,8 @@ final class ThreadedFeedAccess implements SimpleFeedAccess { executorService.shutdown(); } } + @Override + public boolean hasTimedOut() { + return simpleFeedAccess.hasTimedOut(); + } } diff --git a/vespaclient-core/src/main/java/com/yahoo/feedhandler/VespaFeedHandler.java b/vespaclient-core/src/main/java/com/yahoo/feedhandler/VespaFeedHandler.java index 4adfe3ebe1d..27904b5369c 100755 --- a/vespaclient-core/src/main/java/com/yahoo/feedhandler/VespaFeedHandler.java +++ b/vespaclient-core/src/main/java/com/yahoo/feedhandler/VespaFeedHandler.java @@ -80,10 +80,12 @@ public final class VespaFeedHandler extends VespaFeedHandlerBase { MessagePropertyProcessor.PropertySetter properties = getPropertyProcessor().buildPropertySetter(request); + long millis = getTimeoutMillis(request); + String route = properties.getRoute().toString(); FeedResponse response = new FeedResponse(new RouteMetricSet(route, callback)); - SingleSender sender = new SingleSender(response, getSharedSender(route), !asynchronous); + SingleSender sender = new SingleSender(response, getSharedSender(route), millis, !asynchronous); sender.addMessageProcessor(properties); sender.addMessageProcessor(new DocprocMessageProcessor(getDocprocChain(request), getDocprocServiceRegistry(request))); ThreadedFeedAccess feedAccess = new ThreadedFeedAccess(numThreads, sender); @@ -106,7 +108,6 @@ public final class VespaFeedHandler extends VespaFeedHandlerBase { if (asynchronous) { return response; } - long millis = getTimeoutMillis(request); boolean completed = sender.waitForPending(millis); if (!completed) { response.addError(Error.TIMEOUT, "Timed out after " + millis + " ms waiting for responses"); |