Author: isudana
Date: Tue Dec 27 10:15:38 2016
New Revision: 1776101
URL: http://svn.apache.org/viewvc?rev=1776101&view=rev
Log:
Fix for SYNAPSE-1014
-----------------------
Porting fix from
https://github.com/wso2/wso2-synapse/commit/fbc829ae1e52c552aa348967db929fa21a8cf1f6
by Isuru Ranawaka
Modified:
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/passthru/TargetHandler.java
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/passthru/util/PassThroughTransportUtils.java
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/utils/conn/SynapseNHttpClientConnection.java
Modified:
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/passthru/TargetHandler.java
URL:
http://svn.apache.org/viewvc/synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/passthru/TargetHandler.java?rev=1776101&r1=1776100&r2=1776101&view=diff
==============================================================================
---
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/passthru/TargetHandler.java
(original)
+++
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/passthru/TargetHandler.java
Tue Dec 27 10:15:38 2016
@@ -498,6 +498,15 @@ public class TargetHandler implements NH
}
}
+ /**
+ * Get the associated configuration of the {@code TargetHandler}
+ *
+ * @return associated {@code TargetConfiguration}
+ */
+ public TargetConfiguration getTargetConfiguration() {
+ return targetConfiguration;
+ }
+
private boolean isResponseHaveBodyExpected(
final String method, final HttpResponse response) {
Modified:
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/passthru/util/PassThroughTransportUtils.java
URL:
http://svn.apache.org/viewvc/synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/passthru/util/PassThroughTransportUtils.java?rev=1776101&r1=1776100&r2=1776101&view=diff
==============================================================================
---
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/passthru/util/PassThroughTransportUtils.java
(original)
+++
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/passthru/util/PassThroughTransportUtils.java
Tue Dec 27 10:15:38 2016
@@ -41,6 +41,7 @@ import org.apache.synapse.transport.pass
import org.apache.synapse.transport.passthru.config.TargetConfiguration;
import org.apache.synapse.transport.passthru.connections.SourceConnections;
import org.apache.synapse.transport.passthru.connections.TargetConnections;
+import org.apache.synapse.transport.utils.conn.SynapseNHttpClientConnection;
import java.net.InetAddress;
import java.util.Map;
@@ -262,7 +263,11 @@ public class PassThroughTransportUtils {
TargetContext.updateState(conn, ProtocolState.CLOSING);
connections.closeConnection(conn);
} else {
- connections.releaseConnection(conn);
+ if (conn instanceof SynapseNHttpClientConnection) {
+ ((SynapseNHttpClientConnection) conn).markForRelease();
+ } else {
+ connections.releaseConnection(conn);
+ }
}
}
Modified:
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/utils/conn/SynapseNHttpClientConnection.java
URL:
http://svn.apache.org/viewvc/synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/utils/conn/SynapseNHttpClientConnection.java?rev=1776101&r1=1776100&r2=1776101&view=diff
==============================================================================
---
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/utils/conn/SynapseNHttpClientConnection.java
(original)
+++
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/utils/conn/SynapseNHttpClientConnection.java
Tue Dec 27 10:15:38 2016
@@ -30,6 +30,7 @@ import org.apache.http.nio.NHttpMessageP
import org.apache.http.nio.NHttpMessageWriterFactory;
import org.apache.http.nio.reactor.IOSession;
import org.apache.http.nio.util.ByteBufferAllocator;
+import org.apache.synapse.transport.passthru.TargetHandler;
import java.io.IOException;
import java.nio.charset.CharsetDecoder;
@@ -41,6 +42,8 @@ import java.nio.charset.CharsetEncoder;
*/
public class SynapseNHttpClientConnection extends DefaultNHttpClientConnection
{
+ private boolean markedForRelease = false;
+
public SynapseNHttpClientConnection(IOSession session,
int bufferSize,
int fragmentSizeHint,
@@ -75,10 +78,30 @@ public class SynapseNHttpClientConnectio
@Override
public void consumeInput(final NHttpClientEventHandler handler) {
super.consumeInput(handler);
+ if (markedForRelease) {
+ if (handler instanceof TargetHandler) {
+ resetState();
+ ((TargetHandler)
handler).getTargetConfiguration().getConnections().releaseConnection(this);
+ }
+ }
}
@Override
public void produceOutput(final NHttpClientEventHandler handler) {
super.produceOutput(handler);
}
+
+ /**
+ * Mark this connection to be released to the pool.
+ * <p>
+ * This needs to be called after finishing work related to a particular
request/response,
+ * and only when keep-alive is enabled
+ */
+ public void markForRelease() {
+ this.markedForRelease = true;
+ }
+
+ private void resetState() {
+ markedForRelease = false;
+ }
}