diff options
author | Bjørn Christian Seime <bjorncs@yahooinc.com> | 2022-12-07 16:42:57 +0100 |
---|---|---|
committer | Bjørn Christian Seime <bjorncs@yahooinc.com> | 2022-12-07 16:42:57 +0100 |
commit | 8e806e8b185d1a75d0f6d0866a3a28a769221f49 (patch) | |
tree | 503894beef558a3230c6ad414efb0d0ced45877b /docproc | |
parent | 94eacd104dcc9922969b3c99764d23059a83d58f (diff) |
Add Processing.timeLeft()
Diffstat (limited to 'docproc')
-rw-r--r-- | docproc/abi-spec.json | 6 | ||||
-rw-r--r-- | docproc/src/main/java/com/yahoo/docproc/Processing.java | 17 | ||||
-rw-r--r-- | docproc/src/main/java/com/yahoo/docproc/jdisc/messagebus/ProcessingFactory.java | 4 |
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; |