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