aboutsummaryrefslogtreecommitdiffstats
path: root/vespaclient-core
diff options
context:
space:
mode:
authorHenning Baldersheim <balder@yahoo-inc.com>2018-10-29 15:36:44 +0100
committerHenning Baldersheim <balder@yahoo-inc.com>2018-10-29 15:37:57 +0100
commit866b9fab0caa41276fd6e79a2e27bdb3287fa79d (patch)
treeee7059e0f7f30e30bda8372afdad90773d9bad72 /vespaclient-core
parent58a26cf97e7b787f843587f5189cbbfce244fcb6 (diff)
Also obey the timeout.
Diffstat (limited to 'vespaclient-core')
-rw-r--r--vespaclient-core/src/main/java/com/yahoo/feedapi/Feeder.java7
-rwxr-xr-xvespaclient-core/src/main/java/com/yahoo/feedapi/SimpleFeedAccess.java1
-rwxr-xr-xvespaclient-core/src/main/java/com/yahoo/feedapi/SingleSender.java13
-rwxr-xr-xvespaclient-core/src/main/java/com/yahoo/feedapi/VespaFeedSender.java3
-rw-r--r--vespaclient-core/src/main/java/com/yahoo/feedhandler/ThreadedFeedAccess.java4
-rwxr-xr-xvespaclient-core/src/main/java/com/yahoo/feedhandler/VespaFeedHandler.java5
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");