You are viewing a plain text version of this content. The canonical link for it is here.
Posted to server-dev@james.apache.org by bt...@apache.org on 2019/11/08 03:12:05 UTC

[james-project] 18/36: PROTOCOLS-37 [Refactoring] Remove unnecessary handling of FutureResponse

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 <bt...@linagora.com>
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: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org