summaryrefslogtreecommitdiffstats
path: root/container-core
diff options
context:
space:
mode:
authorHenning Baldersheim <balder@yahoo-inc.com>2021-02-17 19:23:28 +0100
committerHenning Baldersheim <balder@yahoo-inc.com>2021-02-17 19:23:28 +0100
commitbce9c8f91e00c084aa935bddfc3d29ddee21746f (patch)
tree8301f04f31e17c28182060446a17fb3bc455357c /container-core
parent6856c7448dcdae692f60aa65a79ec34c984b0586 (diff)
Add proper excetion handling ensuring we are tracking pending bytes correctly.
Diffstat (limited to 'container-core')
-rw-r--r--container-core/src/main/java/com/yahoo/container/handler/LogHandler.java26
-rw-r--r--container-core/src/main/java/com/yahoo/container/handler/LogReader.java2
2 files changed, 19 insertions, 9 deletions
diff --git a/container-core/src/main/java/com/yahoo/container/handler/LogHandler.java b/container-core/src/main/java/com/yahoo/container/handler/LogHandler.java
index ad03f8405ac..29528f9c23a 100644
--- a/container-core/src/main/java/com/yahoo/container/handler/LogHandler.java
+++ b/container-core/src/main/java/com/yahoo/container/handler/LogHandler.java
@@ -16,6 +16,7 @@ import java.nio.ByteBuffer;
import java.time.Instant;
import java.util.Optional;
import java.util.concurrent.Executor;
+import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.atomic.AtomicLong;
import java.util.logging.Level;
@@ -62,14 +63,12 @@ public class LogHandler extends ThreadedHttpRequestHandler {
private static class MaxPendingContentChannelOutputStream extends ContentChannelOutputStream {
- private final ContentChannel channel;
private final long maxPending;
- private AtomicLong sent = new AtomicLong(0);
- private AtomicLong acked = new AtomicLong(0);
+ private final AtomicLong sent = new AtomicLong(0);
+ private final AtomicLong acked = new AtomicLong(0);
public MaxPendingContentChannelOutputStream(ContentChannel endpoint, long maxPending) {
super(endpoint);
- this.channel = endpoint;
this.maxPending = maxPending;
}
@@ -78,19 +77,24 @@ public class LogHandler extends ThreadedHttpRequestHandler {
}
private class TrackCompletition implements CompletionHandler {
- final long written;
+ private final long written;
+ private final AtomicBoolean replied = new AtomicBoolean(false);
TrackCompletition(long written) {
this.written = written;
sent.addAndGet(written);
}
@Override
public void completed() {
- acked.addAndGet(written);
+ if (!replied.getAndSet(true)) {
+ acked.addAndGet(written);
+ }
}
@Override
public void failed(Throwable t) {
- acked.addAndGet(written);
+ if (!replied.getAndSet(true)) {
+ acked.addAndGet(written);
+ }
}
}
@Override
@@ -98,7 +102,13 @@ public class LogHandler extends ThreadedHttpRequestHandler {
try {
stallWhilePendingAbove(maxPending);
} catch (InterruptedException e) {}
- send(src, new TrackCompletition(src.remaining()));
+ CompletionHandler pendingTracker = new TrackCompletition(src.remaining());
+ try {
+ send(src, pendingTracker);
+ } catch (Throwable throwable) {
+ pendingTracker.failed(throwable);
+ throw throwable;
+ }
}
private void stallWhilePendingAbove(long pending) throws InterruptedException {
diff --git a/container-core/src/main/java/com/yahoo/container/handler/LogReader.java b/container-core/src/main/java/com/yahoo/container/handler/LogReader.java
index af83f97fd9b..5b6a87d02df 100644
--- a/container-core/src/main/java/com/yahoo/container/handler/LogReader.java
+++ b/container-core/src/main/java/com/yahoo/container/handler/LogReader.java
@@ -43,13 +43,13 @@ import static java.nio.charset.StandardCharsets.UTF_8;
* @author jonmv
*/
class LogReader {
-
static final Pattern logArchivePathPattern = Pattern.compile("(\\d{4})/(\\d{2})/(\\d{2})/(\\d{2})-\\d+(.gz)?");
static final Pattern vespaLogPathPattern = Pattern.compile("vespa\\.log(?:-(\\d{4})-(\\d{2})-(\\d{2})\\.(\\d{2})-(\\d{2})-(\\d{2})(?:.gz)?)?");
private final Path logDirectory;
private final Pattern logFilePattern;
+
LogReader(String logDirectory, String logFilePattern) {
this(Paths.get(Defaults.getDefaults().underVespaHome(logDirectory)), Pattern.compile(logFilePattern));
}