You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2016/05/04 12:08:16 UTC
[7/8] camel git commit: CAMEL-9040: Fixed netty leak in http4 producer
CAMEL-9040: Fixed netty leak in http4 producer
Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/9fc3e436
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/9fc3e436
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/9fc3e436
Branch: refs/heads/master
Commit: 9fc3e436b651bd497ae2415d9606edd7300637bd
Parents: 3563f6e6
Author: Claus Ibsen <da...@apache.org>
Authored: Wed May 4 13:54:56 2016 +0200
Committer: Claus Ibsen <da...@apache.org>
Committed: Wed May 4 14:07:56 2016 +0200
----------------------------------------------------------------------
.../component/netty4/http/DefaultNettyHttpBinding.java | 11 ++++++-----
.../component/netty4/http/NettyHttpConfiguration.java | 8 ++++----
.../component/netty4/handlers/ClientChannelHandler.java | 2 --
3 files changed, 10 insertions(+), 11 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/camel/blob/9fc3e436/components/camel-netty4-http/src/main/java/org/apache/camel/component/netty4/http/DefaultNettyHttpBinding.java
----------------------------------------------------------------------
diff --git a/components/camel-netty4-http/src/main/java/org/apache/camel/component/netty4/http/DefaultNettyHttpBinding.java b/components/camel-netty4-http/src/main/java/org/apache/camel/component/netty4/http/DefaultNettyHttpBinding.java
index f8cf4a3..9f94ea0 100644
--- a/components/camel-netty4-http/src/main/java/org/apache/camel/component/netty4/http/DefaultNettyHttpBinding.java
+++ b/components/camel-netty4-http/src/main/java/org/apache/camel/component/netty4/http/DefaultNettyHttpBinding.java
@@ -16,6 +16,7 @@
*/
package org.apache.camel.component.netty4.http;
+import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.io.ObjectOutputStream;
@@ -49,6 +50,7 @@ import org.apache.camel.StreamCache;
import org.apache.camel.TypeConverter;
import org.apache.camel.component.netty4.NettyConstants;
import org.apache.camel.component.netty4.NettyConverter;
+import org.apache.camel.converter.stream.ByteArrayInputStreamCache;
import org.apache.camel.spi.HeaderFilterStrategy;
import org.apache.camel.util.ExchangeHelper;
import org.apache.camel.util.IOHelper;
@@ -95,7 +97,7 @@ public class DefaultNettyHttpBinding implements NettyHttpBinding, Cloneable {
// keep the body as is, and use type converters
answer.setBody(request.content());
} else {
- // turn the body into stream cached
+ // turn the body into stream cached (on the client/consumer side we can facade the netty stream instead of converting to byte array)
NettyChannelBufferStreamCache cache = new NettyChannelBufferStreamCache(request.content());
// add on completion to the cache which is needed for Camel to keep track of the lifecycle of the cache
exchange.addOnCompletion(new NettyChannelBufferStreamCacheOnCompletion(cache));
@@ -274,13 +276,12 @@ public class DefaultNettyHttpBinding implements NettyHttpBinding, Cloneable {
// keep the body as is, and use type converters
answer.setBody(response.content());
} else {
- // stores as byte array as the netty ByteBuf will be freedy when the producer is done, and then we
- // can no longer access the message body
+ // stores as byte array as the netty ByteBuf will be freed when the producer is done,
+ // and then we can no longer access the message body
response.retain();
try {
byte[] bytes = exchange.getContext().getTypeConverter().convertTo(byte[].class, exchange, response.content());
- answer.setBody(bytes);
- // TODO: use stream caching
+ answer.setBody(new ByteArrayInputStreamCache(new ByteArrayInputStream(bytes)));
} finally {
response.release();
}
http://git-wip-us.apache.org/repos/asf/camel/blob/9fc3e436/components/camel-netty4-http/src/main/java/org/apache/camel/component/netty4/http/NettyHttpConfiguration.java
----------------------------------------------------------------------
diff --git a/components/camel-netty4-http/src/main/java/org/apache/camel/component/netty4/http/NettyHttpConfiguration.java b/components/camel-netty4-http/src/main/java/org/apache/camel/component/netty4/http/NettyHttpConfiguration.java
index 784d007..8202418 100644
--- a/components/camel-netty4-http/src/main/java/org/apache/camel/component/netty4/http/NettyHttpConfiguration.java
+++ b/components/camel-netty4-http/src/main/java/org/apache/camel/component/netty4/http/NettyHttpConfiguration.java
@@ -55,7 +55,7 @@ public class NettyHttpConfiguration extends NettyConfiguration {
private boolean matchOnUriPrefix;
@UriParam
private boolean bridgeEndpoint;
- @UriParam(label = "consumer,advanced")
+ @UriParam(label = "advanced")
private boolean disableStreamCache;
@UriParam(label = "consumer", defaultValue = "true")
private boolean send503whenSuspended = true;
@@ -243,14 +243,14 @@ public class NettyHttpConfiguration extends NettyConfiguration {
}
/**
- * Determines whether or not the raw input stream from Netty HttpRequest#getContent() is cached or not
- * (Camel will read the stream into a in light-weight memory based Stream caching) cache.
+ * Determines whether or not the raw input stream from Netty HttpRequest#getContent() or HttpResponset#getContent()
+ * is cached or not (Camel will read the stream into a in light-weight memory based Stream caching) cache.
* By default Camel will cache the Netty input stream to support reading it multiple times to ensure it Camel
* can retrieve all data from the stream. However you can set this option to true when you for example need to
* access the raw stream, such as streaming it directly to a file or other persistent store. Mind that
* if you enable this option, then you cannot read the Netty stream multiple times out of the box, and you would
* need manually to reset the reader index on the Netty raw stream. Also Netty will auto-close the Netty stream
- * when the Netty HTTP server is done processing, which means that if the asynchronous routing engine is in
+ * when the Netty HTTP server/HTTP client is done processing, which means that if the asynchronous routing engine is in
* use then any asynchronous thread that may continue routing the {@link org.apache.camel.Exchange} may not
* be able to read the Netty stream, because Netty has closed it.
*/
http://git-wip-us.apache.org/repos/asf/camel/blob/9fc3e436/components/camel-netty4/src/main/java/org/apache/camel/component/netty4/handlers/ClientChannelHandler.java
----------------------------------------------------------------------
diff --git a/components/camel-netty4/src/main/java/org/apache/camel/component/netty4/handlers/ClientChannelHandler.java b/components/camel-netty4/src/main/java/org/apache/camel/component/netty4/handlers/ClientChannelHandler.java
index 60db52f..b9a2a17 100644
--- a/components/camel-netty4/src/main/java/org/apache/camel/component/netty4/handlers/ClientChannelHandler.java
+++ b/components/camel-netty4/src/main/java/org/apache/camel/component/netty4/handlers/ClientChannelHandler.java
@@ -94,8 +94,6 @@ public class ClientChannelHandler extends SimpleChannelInboundHandler<Object> {
// signal callback
callback.done(false);
}
-
- super.exceptionCaught(ctx, cause);
}
@Override