summaryrefslogtreecommitdiffstats
path: root/docproc
diff options
context:
space:
mode:
authorBjørn Christian Seime <bjorncs@yahooinc.com>2022-12-07 16:42:57 +0100
committerBjørn Christian Seime <bjorncs@yahooinc.com>2022-12-07 16:42:57 +0100
commit8e806e8b185d1a75d0f6d0866a3a28a769221f49 (patch)
tree503894beef558a3230c6ad414efb0d0ced45877b /docproc
parent94eacd104dcc9922969b3c99764d23059a83d58f (diff)
Add Processing.timeLeft()
Diffstat (limited to 'docproc')
-rw-r--r--docproc/abi-spec.json6
-rw-r--r--docproc/src/main/java/com/yahoo/docproc/Processing.java17
-rw-r--r--docproc/src/main/java/com/yahoo/docproc/jdisc/messagebus/ProcessingFactory.java4
3 files changed, 25 insertions, 2 deletions
diff --git a/docproc/abi-spec.json b/docproc/abi-spec.json
index 43e54a517ba..61ec10b57ab 100644
--- a/docproc/abi-spec.json
+++ b/docproc/abi-spec.json
@@ -209,9 +209,13 @@
"public void addDocumentOperation(com.yahoo.document.DocumentOperation)",
"public java.util.List getDocumentOperations()",
"public com.yahoo.docproc.CallStack callStack()",
+ "public void setExpiresAt(java.time.Instant)",
+ "public java.time.Duration timeLeft()",
"public java.lang.String toString()"
],
- "fields" : [ ]
+ "fields" : [
+ "public static final java.time.Duration NO_TIMEOUT"
+ ]
},
"com.yahoo.docproc.SimpleDocumentProcessor" : {
"superClass" : "com.yahoo.docproc.DocumentProcessor",
diff --git a/docproc/src/main/java/com/yahoo/docproc/Processing.java b/docproc/src/main/java/com/yahoo/docproc/Processing.java
index 24eb4f42762..3b7558ba7e1 100644
--- a/docproc/src/main/java/com/yahoo/docproc/Processing.java
+++ b/docproc/src/main/java/com/yahoo/docproc/Processing.java
@@ -1,16 +1,20 @@
// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
package com.yahoo.docproc;
+import com.yahoo.concurrent.SystemTimer;
import com.yahoo.docproc.impl.ProcessingAccess;
import com.yahoo.docproc.impl.ProcessingEndpoint;
import com.yahoo.document.DocumentOperation;
+import java.time.Duration;
+import java.time.Instant;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
+import java.util.Optional;
/**
* A document processing. This contains the document(s) or document update(s) to process,
@@ -45,6 +49,8 @@ public final class Processing extends ProcessingAccess {
private boolean operationsGotten = false;
+ private Instant expiresAt = Instant.MAX;
+
/**
* Create a Processing with no documents. Useful with DocprocService.process(Processing).
* Note that the callstack is initially empty when using this constructor (but it is
@@ -217,6 +223,17 @@ public final class Processing extends ProcessingAccess {
return getDocumentOperations();
}
+ public void setExpiresAt(Instant i) { this.expiresAt = i; }
+
+ public static final Duration NO_TIMEOUT = Duration.ofDays(10);
+ /** @return time left or {@link #NO_TIMEOUT} if processing has no timeout */
+ public Duration timeLeft() {
+ Instant now = SystemTimer.INSTANCE.instant();
+ if (expiresAt == Instant.MAX) return NO_TIMEOUT;
+ if (now.isAfter(expiresAt)) return Duration.ZERO;
+ return Duration.between(now, expiresAt);
+ }
+
@Override
public String toString() {
String previousCall = "";
diff --git a/docproc/src/main/java/com/yahoo/docproc/jdisc/messagebus/ProcessingFactory.java b/docproc/src/main/java/com/yahoo/docproc/jdisc/messagebus/ProcessingFactory.java
index 52f112f9b43..592e201e33f 100644
--- a/docproc/src/main/java/com/yahoo/docproc/jdisc/messagebus/ProcessingFactory.java
+++ b/docproc/src/main/java/com/yahoo/docproc/jdisc/messagebus/ProcessingFactory.java
@@ -1,11 +1,13 @@
// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
package com.yahoo.docproc.jdisc.messagebus;
+import java.time.Instant;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Logger;
import com.yahoo.component.ComponentId;
import com.yahoo.component.provider.ComponentRegistry;
+import com.yahoo.concurrent.SystemTimer;
import com.yahoo.container.core.document.ContainerDocumentConfig;
import com.yahoo.docproc.AbstractConcreteDocumentFactory;
import com.yahoo.docproc.Processing;
@@ -98,7 +100,7 @@ class ProcessingFactory {
Processing processing = new Processing();
processing.addDocumentOperation(documentOperation);
processing.setServiceName(serviceName);
-
+ processing.setExpiresAt(SystemTimer.INSTANCE.instant().plusMillis(message.getTimeRemainingNow()));
processing.setVariable("route", message.getRoute());
processing.setVariable("timeout", message.getTimeRemaining());
return processing;