diff --git a/jetty-core/jetty-client/src/main/java/org/eclipse/jetty/client/transport/HttpSender.java b/jetty-core/jetty-client/src/main/java/org/eclipse/jetty/client/transport/HttpSender.java index c60607572a7f..551a210ae0e7 100644 --- a/jetty-core/jetty-client/src/main/java/org/eclipse/jetty/client/transport/HttpSender.java +++ b/jetty-core/jetty-client/src/main/java/org/eclipse/jetty/client/transport/HttpSender.java @@ -543,7 +543,7 @@ protected Action process() throws Throwable } @Override - public void succeeded() + protected void onSuccess() { boolean proceed = true; if (committed) @@ -588,8 +588,6 @@ else if (expect100) // There was some concurrent error, terminate. complete = true; } - - super.succeeded(); } @Override diff --git a/jetty-core/jetty-client/src/main/java/org/eclipse/jetty/client/transport/internal/HttpSenderOverHTTP.java b/jetty-core/jetty-client/src/main/java/org/eclipse/jetty/client/transport/internal/HttpSenderOverHTTP.java index 8fff51d6454e..1f6bc4a3f756 100644 --- a/jetty-core/jetty-client/src/main/java/org/eclipse/jetty/client/transport/internal/HttpSenderOverHTTP.java +++ b/jetty-core/jetty-client/src/main/java/org/eclipse/jetty/client/transport/internal/HttpSenderOverHTTP.java @@ -235,17 +235,9 @@ protected Action process() throws Exception } @Override - public void succeeded() + protected void onSuccess() { release(); - super.succeeded(); - } - - @Override - public void failed(Throwable x) - { - release(); - super.failed(x); } @Override @@ -259,6 +251,7 @@ protected void onCompleteSuccess() protected void onCompleteFailure(Throwable cause) { super.onCompleteFailure(cause); + release(); callback.failed(cause); } diff --git a/jetty-core/jetty-fcgi/jetty-fcgi-client/src/main/java/org/eclipse/jetty/fcgi/generator/Flusher.java b/jetty-core/jetty-fcgi/jetty-fcgi-client/src/main/java/org/eclipse/jetty/fcgi/generator/Flusher.java index 0093517653a0..9c64ffb77943 100644 --- a/jetty-core/jetty-fcgi/jetty-fcgi-client/src/main/java/org/eclipse/jetty/fcgi/generator/Flusher.java +++ b/jetty-core/jetty-fcgi/jetty-fcgi-client/src/main/java/org/eclipse/jetty/fcgi/generator/Flusher.java @@ -101,12 +101,11 @@ protected void onCompleteSuccess() } @Override - public void succeeded() + protected void onSuccess() { if (active != null) active.succeeded(); active = null; - super.succeeded(); } @Override diff --git a/jetty-core/jetty-http2/jetty-http2-common/src/main/java/org/eclipse/jetty/http2/internal/HTTP2Flusher.java b/jetty-core/jetty-http2/jetty-http2-common/src/main/java/org/eclipse/jetty/http2/internal/HTTP2Flusher.java index b7a67c9fbe30..36b11c794dde 100644 --- a/jetty-core/jetty-http2/jetty-http2-common/src/main/java/org/eclipse/jetty/http2/internal/HTTP2Flusher.java +++ b/jetty-core/jetty-http2/jetty-http2-common/src/main/java/org/eclipse/jetty/http2/internal/HTTP2Flusher.java @@ -294,7 +294,7 @@ protected Action process() throws Throwable } @Override - public void succeeded() + protected void onSuccess() { if (LOG.isDebugEnabled()) LOG.debug("Written {} buffers - entries processed/pending {}/{}: {}/{}", @@ -304,7 +304,6 @@ public void succeeded() processedEntries, pendingEntries); finish(); - super.succeeded(); } private void finish() diff --git a/jetty-core/jetty-http2/jetty-http2-tests/src/test/java/org/eclipse/jetty/http2/tests/RawHTTP2ProxyTest.java b/jetty-core/jetty-http2/jetty-http2-tests/src/test/java/org/eclipse/jetty/http2/tests/RawHTTP2ProxyTest.java index 711e705ba55d..1e80868ab610 100644 --- a/jetty-core/jetty-http2/jetty-http2-tests/src/test/java/org/eclipse/jetty/http2/tests/RawHTTP2ProxyTest.java +++ b/jetty-core/jetty-http2/jetty-http2-tests/src/test/java/org/eclipse/jetty/http2/tests/RawHTTP2ProxyTest.java @@ -515,17 +515,15 @@ public void failed(Throwable failure) } @Override - public void succeeded() + protected void onSuccess() { frameInfo.callback.succeeded(); - super.succeeded(); } @Override - public void failed(Throwable failure) + protected void onCompleteFailure(Throwable cause) { - frameInfo.callback.failed(failure); - super.failed(failure); + frameInfo.callback.failed(cause); } @Override @@ -671,17 +669,16 @@ protected Action process() } @Override - public void succeeded() + protected void onSuccess() { frameInfo.callback.succeeded(); super.succeeded(); } @Override - public void failed(Throwable failure) + protected void onCompleteFailure(Throwable cause) { - frameInfo.callback.failed(failure); - super.failed(failure); + frameInfo.callback.failed(cause); } private void offer(Stream stream, Frame frame, Callback callback) diff --git a/jetty-core/jetty-http3/jetty-http3-common/src/main/java/org/eclipse/jetty/http3/ControlFlusher.java b/jetty-core/jetty-http3/jetty-http3-common/src/main/java/org/eclipse/jetty/http3/ControlFlusher.java index 3e4aa1ca1956..deee66c03b7f 100644 --- a/jetty-core/jetty-http3/jetty-http3-common/src/main/java/org/eclipse/jetty/http3/ControlFlusher.java +++ b/jetty-core/jetty-http3/jetty-http3-common/src/main/java/org/eclipse/jetty/http3/ControlFlusher.java @@ -108,7 +108,7 @@ protected Action process() } @Override - public void succeeded() + protected void onSuccess() { if (LOG.isDebugEnabled()) LOG.debug("succeeded to write {} on {}", entries, this); @@ -119,8 +119,6 @@ public void succeeded() entries.clear(); invocationType = InvocationType.NON_BLOCKING; - - super.succeeded(); } @Override diff --git a/jetty-core/jetty-http3/jetty-http3-common/src/main/java/org/eclipse/jetty/http3/InstructionFlusher.java b/jetty-core/jetty-http3/jetty-http3-common/src/main/java/org/eclipse/jetty/http3/InstructionFlusher.java index 304d24975ed9..6c826c707a4b 100644 --- a/jetty-core/jetty-http3/jetty-http3-common/src/main/java/org/eclipse/jetty/http3/InstructionFlusher.java +++ b/jetty-core/jetty-http3/jetty-http3-common/src/main/java/org/eclipse/jetty/http3/InstructionFlusher.java @@ -104,14 +104,12 @@ protected Action process() } @Override - public void succeeded() + protected void onSuccess() { if (LOG.isDebugEnabled()) LOG.debug("succeeded to write {} buffers on {}", accumulator.getByteBuffers().size(), this); accumulator.release(); - - super.succeeded(); } @Override diff --git a/jetty-core/jetty-http3/jetty-http3-common/src/main/java/org/eclipse/jetty/http3/MessageFlusher.java b/jetty-core/jetty-http3/jetty-http3-common/src/main/java/org/eclipse/jetty/http3/MessageFlusher.java index 59427685526c..8f0ae115d815 100644 --- a/jetty-core/jetty-http3/jetty-http3-common/src/main/java/org/eclipse/jetty/http3/MessageFlusher.java +++ b/jetty-core/jetty-http3/jetty-http3-common/src/main/java/org/eclipse/jetty/http3/MessageFlusher.java @@ -89,7 +89,7 @@ protected Action process() } @Override - public void succeeded() + protected void onSuccess() { if (LOG.isDebugEnabled()) LOG.debug("succeeded to write {} on {}", entry, this); @@ -98,19 +98,17 @@ public void succeeded() entry.callback.succeeded(); entry = null; - - super.succeeded(); } @Override - public void failed(Throwable x) + protected void onCompleteFailure(Throwable cause) { if (LOG.isDebugEnabled()) - LOG.debug("failed to write {} on {}", entry, this, x); + LOG.debug("failed to write {} on {}", entry, this, cause); accumulator.release(); - entry.callback.failed(x); + entry.callback.failed(cause); entry = null; // Continue the iteration. diff --git a/jetty-core/jetty-io/src/main/java/org/eclipse/jetty/io/content/BufferedContentSink.java b/jetty-core/jetty-io/src/main/java/org/eclipse/jetty/io/content/BufferedContentSink.java index 26a0d972395b..3035cd3c8f47 100644 --- a/jetty-core/jetty-io/src/main/java/org/eclipse/jetty/io/content/BufferedContentSink.java +++ b/jetty-core/jetty-io/src/main/java/org/eclipse/jetty/io/content/BufferedContentSink.java @@ -287,13 +287,12 @@ protected Action process() } @Override - public void succeeded() + protected void onSuccess() { _buffer = null; Callback callback = _callback; _callback = null; callback.succeeded(); - super.succeeded(); } @Override diff --git a/jetty-core/jetty-quic/jetty-quic-common/src/main/java/org/eclipse/jetty/quic/common/QuicConnection.java b/jetty-core/jetty-quic/jetty-quic-common/src/main/java/org/eclipse/jetty/quic/common/QuicConnection.java index c5ff003db1b0..722d494dbead 100644 --- a/jetty-core/jetty-quic/jetty-quic-common/src/main/java/org/eclipse/jetty/quic/common/QuicConnection.java +++ b/jetty-core/jetty-quic/jetty-quic-common/src/main/java/org/eclipse/jetty/quic/common/QuicConnection.java @@ -372,17 +372,9 @@ protected Action process() } @Override - public void succeeded() + protected void onSuccess() { entry.callback.succeeded(); - super.succeeded(); - } - - @Override - public void failed(Throwable x) - { - entry.callback.failed(x); - super.failed(x); } @Override @@ -394,10 +386,11 @@ public InvocationType getInvocationType() @Override protected void onCompleteFailure(Throwable cause) { + entry.callback.failed(cause); QuicConnection.this.close(); } - private class Entry + private static class Entry { private final Callback callback; private final SocketAddress address; diff --git a/jetty-core/jetty-quic/jetty-quic-common/src/main/java/org/eclipse/jetty/quic/common/QuicSession.java b/jetty-core/jetty-quic/jetty-quic-common/src/main/java/org/eclipse/jetty/quic/common/QuicSession.java index 8f998fa8743b..75ee111e659a 100644 --- a/jetty-core/jetty-quic/jetty-quic-common/src/main/java/org/eclipse/jetty/quic/common/QuicSession.java +++ b/jetty-core/jetty-quic/jetty-quic-common/src/main/java/org/eclipse/jetty/quic/common/QuicSession.java @@ -521,12 +521,11 @@ protected Action process() throws IOException } @Override - public void succeeded() + protected void onSuccess() { if (LOG.isDebugEnabled()) LOG.debug("written cipher bytes on {}", QuicSession.this); cipherBuffer.release(); - super.succeeded(); } @Override diff --git a/jetty-core/jetty-server/src/main/java/org/eclipse/jetty/server/handler/ConnectHandler.java b/jetty-core/jetty-server/src/main/java/org/eclipse/jetty/server/handler/ConnectHandler.java index 76082dbba5f4..51fdb7e10117 100644 --- a/jetty-core/jetty-server/src/main/java/org/eclipse/jetty/server/handler/ConnectHandler.java +++ b/jetty-core/jetty-server/src/main/java/org/eclipse/jetty/server/handler/ConnectHandler.java @@ -760,17 +760,11 @@ else if (filled == 0) } @Override - public void succeeded() + protected void onSuccess() { if (LOG.isDebugEnabled()) LOG.debug("Wrote {} bytes {}", filled, TunnelConnection.this); buffer.release(); - super.succeeded(); - } - - @Override - protected void onCompleteSuccess() - { } @Override diff --git a/jetty-core/jetty-tests/jetty-test-client-transports/src/test/java/org/eclipse/jetty/test/client/transport/CustomTransportTest.java b/jetty-core/jetty-tests/jetty-test-client-transports/src/test/java/org/eclipse/jetty/test/client/transport/CustomTransportTest.java index ed8e2b9c4837..a3a7ecf9a464 100644 --- a/jetty-core/jetty-tests/jetty-test-client-transports/src/test/java/org/eclipse/jetty/test/client/transport/CustomTransportTest.java +++ b/jetty-core/jetty-tests/jetty-test-client-transports/src/test/java/org/eclipse/jetty/test/client/transport/CustomTransportTest.java @@ -237,7 +237,8 @@ public void onConnect(EndPoint endPoint) channels.put(channel.id, channel); // Register for read interest with the EndPoint. - endPoint.fillInterested(new EndPointToChannelCallback(channel)); + EndPointToChannelCallback endPointToChannelCallback = new EndPointToChannelCallback(channel); + endPoint.fillInterested(Callback.from(endPointToChannelCallback::iterate)); } // Called when there data to read from the Gateway on the given Channel. @@ -322,18 +323,10 @@ protected Action process() throws Throwable endPoint.fillInterested(this); return Action.IDLE; } - channel.write(this, buffer); + channel.write(Callback.from(this::iterate), buffer); return Action.SCHEDULED; } - @Override - public void succeeded() - { - // There is data to read from the EndPoint. - // Iterate to read it and send it to the Gateway. - iterate(); - } - @Override protected void onCompleteSuccess() { diff --git a/jetty-core/jetty-util/src/main/java/org/eclipse/jetty/util/IteratingCallback.java b/jetty-core/jetty-util/src/main/java/org/eclipse/jetty/util/IteratingCallback.java index 9ada006fab62..6fc58187dbb7 100644 --- a/jetty-core/jetty-util/src/main/java/org/eclipse/jetty/util/IteratingCallback.java +++ b/jetty-core/jetty-util/src/main/java/org/eclipse/jetty/util/IteratingCallback.java @@ -167,6 +167,13 @@ protected IteratingCallback(boolean needReset) */ protected abstract Action process() throws Throwable; + /** + * Invoked when one task has completed successfully. + */ + protected void onSuccess() + { + } + /** * Invoked when the overall task has completed successfully. * @@ -239,6 +246,7 @@ private void processing() boolean notifyCompleteSuccess = false; Throwable notifyCompleteFailure = null; + boolean callOnSuccess = false; // While we are processing processing: while (true) @@ -247,6 +255,11 @@ private void processing() Action action = null; try { + if (callOnSuccess) + { + onSuccess(); + callOnSuccess = false; + } action = process(); } catch (Throwable x) @@ -309,6 +322,7 @@ private void processing() throw new IllegalStateException(String.format("%s[action=%s]", this, action)); // we lost the race, so we have to keep processing _state = State.PROCESSING; + callOnSuccess = true; continue; } @@ -342,7 +356,7 @@ else if (notifyCompleteFailure != null) * to call {@code super.succeeded()}. */ @Override - public void succeeded() + public final void succeeded() { boolean process = false; try (AutoLock ignored = _lock.lock()) @@ -374,7 +388,10 @@ public void succeeded() } } if (process) + { + onSuccess(); processing(); + } } /** @@ -392,7 +409,7 @@ public void succeeded() * @see #isFailed() */ @Override - public void failed(Throwable x) + public final void failed(Throwable x) { boolean failure = false; try (AutoLock ignored = _lock.lock()) diff --git a/jetty-ee10/jetty-ee10-proxy/src/main/java/org/eclipse/jetty/ee10/proxy/AsyncProxyServlet.java b/jetty-ee10/jetty-ee10-proxy/src/main/java/org/eclipse/jetty/ee10/proxy/AsyncProxyServlet.java index 3a4558e8b1d4..11e048ac8236 100644 --- a/jetty-ee10/jetty-ee10-proxy/src/main/java/org/eclipse/jetty/ee10/proxy/AsyncProxyServlet.java +++ b/jetty-ee10/jetty-ee10-proxy/src/main/java/org/eclipse/jetty/ee10/proxy/AsyncProxyServlet.java @@ -192,10 +192,9 @@ protected void onRequestContent(HttpServletRequest request, Request proxyRequest } @Override - public void failed(Throwable x) + protected void onCompleteFailure(Throwable cause) { - super.failed(x); - onError(x); + onError(cause); } } diff --git a/jetty-ee9/jetty-ee9-proxy/src/main/java/org/eclipse/jetty/ee9/proxy/AsyncProxyServlet.java b/jetty-ee9/jetty-ee9-proxy/src/main/java/org/eclipse/jetty/ee9/proxy/AsyncProxyServlet.java index 9c9f87e82553..321da55fd150 100644 --- a/jetty-ee9/jetty-ee9-proxy/src/main/java/org/eclipse/jetty/ee9/proxy/AsyncProxyServlet.java +++ b/jetty-ee9/jetty-ee9-proxy/src/main/java/org/eclipse/jetty/ee9/proxy/AsyncProxyServlet.java @@ -192,10 +192,9 @@ protected void onRequestContent(HttpServletRequest request, Request proxyRequest } @Override - public void failed(Throwable x) + protected void onCompleteFailure(Throwable cause) { - super.failed(x); - onError(x); + onError(cause); } }