This is an automated email from the ASF dual-hosted git repository. btellier pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/james-project.git
commit b3ee4b9e042575c52c9577752467259d295e2b23 Author: Benoit Tellier <[email protected]> AuthorDate: Thu Nov 7 08:59:45 2019 +0700 PROTOCOLS-37 [Refactoring] Remove unnecessary handling of FutureResponse As stated by some comments, FutureResponse support is partially implemented and disabled. As such, we can get rid of it. --- .../protocols/api/AbstractProtocolTransport.java | 37 +++------------------- .../protocols/api/handler/CommandDispatcher.java | 26 ++------------- .../netty/BasicChannelUpstreamHandler.java | 11 ------- 3 files changed, 7 insertions(+), 67 deletions(-) diff --git a/protocols/api/src/main/java/org/apache/james/protocols/api/AbstractProtocolTransport.java b/protocols/api/src/main/java/org/apache/james/protocols/api/AbstractProtocolTransport.java index 8b814bb..aa06d99 100644 --- a/protocols/api/src/main/java/org/apache/james/protocols/api/AbstractProtocolTransport.java +++ b/protocols/api/src/main/java/org/apache/james/protocols/api/AbstractProtocolTransport.java @@ -25,8 +25,6 @@ import java.util.List; import java.util.Queue; import java.util.concurrent.LinkedBlockingQueue; -import org.apache.james.protocols.api.future.FutureResponse; - /** * Abstract base class for {@link ProtocolTransport} implementation which already takes care of all the complex @@ -56,21 +54,14 @@ public abstract class AbstractProtocolTransport implements ProtocolTransport { enqueued = true; } } - - // if we didn't enqueue then we check if the response is writable or we have to - // set us "asynchrnous" and wait for response to be ready. + if (!enqueued) { - if (isResponseWritable(response)) { - writeResponseToClient(response, session); - } else { - addDequeuerListener(response, session); - isAsync = true; - } + writeResponseToClient(response, session); } } /** - * Helper method which tries to write all queued {@link Response}'s to the remote client. This method is aware of {@link FutureResponse} and makes sure the {@link Response}'s are written + * Helper method which tries to write all queued {@link Response}'s to the remote client. This method makes sure the {@link Response}'s are written * in the correct order * * This is related to PROTOCOLS-36 @@ -94,30 +85,10 @@ public abstract class AbstractProtocolTransport implements ProtocolTransport { } } - // if we have something in the queue we continue writing until we - // find something asynchronous. - if (isResponseWritable(queuedResponse)) { - writeResponseToClient(queuedResponse, session); - } else { - addDequeuerListener(queuedResponse, session); - // no changes to isAsync here, because in this method we are always already async. - break; - } + writeResponseToClient(queuedResponse, session); } } - private boolean isResponseWritable(Response response) { - return !(response instanceof FutureResponse) || ((FutureResponse) response).isReady(); - } - - private void addDequeuerListener(Response responseFuture, final ProtocolSession session) { - ((FutureResponse) responseFuture).addListener( - response -> { - writeResponseToClient(response, session); - writeQueuedResponses(session); - }); - } - /** * Write the {@link Response} to the client * diff --git a/protocols/api/src/main/java/org/apache/james/protocols/api/handler/CommandDispatcher.java b/protocols/api/src/main/java/org/apache/james/protocols/api/handler/CommandDispatcher.java index 1c83cfa..90bd4a0 100644 --- a/protocols/api/src/main/java/org/apache/james/protocols/api/handler/CommandDispatcher.java +++ b/protocols/api/src/main/java/org/apache/james/protocols/api/handler/CommandDispatcher.java @@ -33,8 +33,6 @@ import org.apache.james.protocols.api.BaseRequest; import org.apache.james.protocols.api.ProtocolSession; import org.apache.james.protocols.api.Request; import org.apache.james.protocols.api.Response; -import org.apache.james.protocols.api.future.FutureResponse; -import org.apache.james.protocols.api.future.FutureResponseImpl; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -183,28 +181,10 @@ public class CommandDispatcher<SessionT extends ProtocolSession> implements Exte private Response executeResultHandlers(final SessionT session, Response responseFuture, final long executionTime, final CommandHandler<SessionT> cHandler, final Iterator<ProtocolHandlerResultHandler<Response, SessionT>> resultHandlers) { // Check if the there is a ResultHandler left to execute if not just return the response if (resultHandlers.hasNext()) { - // Special handling of FutureResponse - // See PROTOCOLS-37 - if (responseFuture instanceof FutureResponse) { - final FutureResponseImpl futureResponse = new FutureResponseImpl(); - ((FutureResponse) responseFuture).addListener(response -> { - Response r = resultHandlers.next().onResponse(session, response, executionTime, cHandler); + responseFuture = resultHandlers.next().onResponse(session, responseFuture, executionTime, cHandler); - // call the next ResultHandler - r = executeResultHandlers(session, r, executionTime, cHandler, resultHandlers); - - // notify the FutureResponse that we are ready - futureResponse.setResponse(r); - }); - - // just return the new FutureResponse which will get notified once its ready - return futureResponse; - } else { - responseFuture = resultHandlers.next().onResponse(session, responseFuture, executionTime, cHandler); - - // call the next ResultHandler - return executeResultHandlers(session, responseFuture, executionTime, cHandler, resultHandlers); - } + // call the next ResultHandler + return executeResultHandlers(session, responseFuture, executionTime, cHandler, resultHandlers); } return responseFuture; } diff --git a/protocols/netty/src/main/java/org/apache/james/protocols/netty/BasicChannelUpstreamHandler.java b/protocols/netty/src/main/java/org/apache/james/protocols/netty/BasicChannelUpstreamHandler.java index 3b0586a..59b5239 100644 --- a/protocols/netty/src/main/java/org/apache/james/protocols/netty/BasicChannelUpstreamHandler.java +++ b/protocols/netty/src/main/java/org/apache/james/protocols/netty/BasicChannelUpstreamHandler.java @@ -31,7 +31,6 @@ import org.apache.james.protocols.api.ProtocolSession; import org.apache.james.protocols.api.ProtocolSessionImpl; import org.apache.james.protocols.api.ProtocolTransport; import org.apache.james.protocols.api.Response; -import org.apache.james.protocols.api.future.FutureResponse; import org.apache.james.protocols.api.handler.ConnectHandler; import org.apache.james.protocols.api.handler.DisconnectHandler; import org.apache.james.protocols.api.handler.LineHandler; @@ -99,11 +98,6 @@ public class BasicChannelUpstreamHandler extends SimpleChannelUpstreamHandler { long executionTime = System.currentTimeMillis() - start; for (ProtocolHandlerResultHandler resultHandler : resultHandlers) { - // Disable till PROTOCOLS-37 is implemented - if (response instanceof FutureResponse) { - LOGGER.debug("ProtocolHandlerResultHandler are not supported for FutureResponse yet"); - break; - } resultHandler.onResponse(session, response, executionTime, cHandler); } if (response != null) { @@ -156,11 +150,6 @@ public class BasicChannelUpstreamHandler extends SimpleChannelUpstreamHandler { long executionTime = System.currentTimeMillis() - start; for (ProtocolHandlerResultHandler resultHandler : resultHandlers) { - // Disable till PROTOCOLS-37 is implemented - if (response instanceof FutureResponse) { - LOGGER.debug("ProtocolHandlerResultHandler are not supported for FutureResponse yet"); - break; - } response = resultHandler.onResponse(pSession, response, executionTime, lHandler); } if (response != null) { --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
