diff --git a/pom.xml b/pom.xml index a5bf570c..e746d569 100644 --- a/pom.xml +++ b/pom.xml @@ -131,7 +131,7 @@ io.netty netty-handler - 4.0.24.Final + 4.1.4.Final org.slf4j diff --git a/xrootd4j-standalone/src/main/java/org/dcache/xrootd/standalone/DataServer.java b/xrootd4j-standalone/src/main/java/org/dcache/xrootd/standalone/DataServer.java index 1683f5d2..39f675f6 100644 --- a/xrootd4j-standalone/src/main/java/org/dcache/xrootd/standalone/DataServer.java +++ b/xrootd4j-standalone/src/main/java/org/dcache/xrootd/standalone/DataServer.java @@ -73,7 +73,6 @@ public void run() { .group(bossGroup, workerGroup) .channel(channelClass) .localAddress(_configuration.port) - .option(ChannelOption.MAX_MESSAGES_PER_READ, 1) .childOption(ChannelOption.TCP_NODELAY, true) .childOption(ChannelOption.SO_KEEPALIVE, true) .childHandler(new DataServerChannelInitializer(_configuration)); diff --git a/xrootd4j/src/main/java/org/dcache/xrootd/protocol/messages/AsyncResponse.java b/xrootd4j/src/main/java/org/dcache/xrootd/protocol/messages/AsyncResponse.java index 9549d8f3..0f174ef8 100644 --- a/xrootd4j/src/main/java/org/dcache/xrootd/protocol/messages/AsyncResponse.java +++ b/xrootd4j/src/main/java/org/dcache/xrootd/protocol/messages/AsyncResponse.java @@ -25,6 +25,7 @@ import io.netty.channel.ChannelPromise; import io.netty.util.AbstractReferenceCounted; import io.netty.util.ReferenceCountUtil; +import io.netty.util.ReferenceCounted; import static org.dcache.xrootd.protocol.XrootdProtocol.kXR_asynresp; import static org.dcache.xrootd.protocol.XrootdProtocol.kXR_attn; @@ -115,6 +116,13 @@ public void operationComplete(ChannelFuture future) throws Exception } } + @Override + public ReferenceCounted touch(Object hint) + { + ReferenceCountUtil.touch(response, hint); + return this; + } + @Override protected void deallocate() { diff --git a/xrootd4j/src/main/java/org/dcache/xrootd/protocol/messages/ReadResponse.java b/xrootd4j/src/main/java/org/dcache/xrootd/protocol/messages/ReadResponse.java index e7ae17f8..fd93a84e 100644 --- a/xrootd4j/src/main/java/org/dcache/xrootd/protocol/messages/ReadResponse.java +++ b/xrootd4j/src/main/java/org/dcache/xrootd/protocol/messages/ReadResponse.java @@ -19,7 +19,6 @@ package org.dcache.xrootd.protocol.messages; import io.netty.buffer.ByteBuf; -import io.netty.buffer.Unpooled; import io.netty.channel.ChannelHandlerContext; import io.netty.channel.ChannelPromise; import io.netty.util.ReferenceCounted; @@ -75,7 +74,7 @@ public void writeTo(ChannelHandlerContext ctx, ChannelPromise promise) public ByteBuf getData() { - return Unpooled.unmodifiableBuffer(data); + return data.asReadOnly(); } @Override @@ -115,4 +114,18 @@ public boolean release(int decrement) { return data.release(decrement); } + + @Override + public ReferenceCounted touch() + { + data.touch(); + return this; + } + + @Override + public ReferenceCounted touch(Object hint) + { + data.touch(hint); + return this; + } } diff --git a/xrootd4j/src/main/java/org/dcache/xrootd/protocol/messages/ReadVResponse.java b/xrootd4j/src/main/java/org/dcache/xrootd/protocol/messages/ReadVResponse.java index 2043baed..23949a65 100644 --- a/xrootd4j/src/main/java/org/dcache/xrootd/protocol/messages/ReadVResponse.java +++ b/xrootd4j/src/main/java/org/dcache/xrootd/protocol/messages/ReadVResponse.java @@ -20,10 +20,10 @@ import io.netty.buffer.ByteBuf; import io.netty.buffer.CompositeByteBuf; -import io.netty.buffer.Unpooled; import io.netty.channel.ChannelHandlerContext; import io.netty.channel.ChannelPromise; import io.netty.util.AbstractReferenceCounted; +import io.netty.util.ReferenceCounted; import java.util.ArrayList; import java.util.List; @@ -85,7 +85,7 @@ public List getSegments() { List chunks = new ArrayList<>(length); for (int i = 0; i < length; i++) { - chunks.add(Unpooled.unmodifiableBuffer(data[index + i])); + chunks.add(data[index + i].asReadOnly()); } return chunks; } @@ -166,6 +166,15 @@ public String toString() return String.format("readv-response[elements=%d,bytes=%d]", length, payload); } + @Override + public ReferenceCounted touch(Object hint) + { + for (int i = 0; i < length; i++) { + data[i + index].touch(hint); + } + return this; + } + @Override protected void deallocate() { diff --git a/xrootd4j/src/main/java/org/dcache/xrootd/protocol/messages/WriteRequest.java b/xrootd4j/src/main/java/org/dcache/xrootd/protocol/messages/WriteRequest.java index 8cfab611..10410bfa 100644 --- a/xrootd4j/src/main/java/org/dcache/xrootd/protocol/messages/WriteRequest.java +++ b/xrootd4j/src/main/java/org/dcache/xrootd/protocol/messages/WriteRequest.java @@ -119,4 +119,18 @@ public WriteRequest retain() data.retain(); return this; } + + @Override + public ReferenceCounted touch() + { + data.touch(); + return this; + } + + @Override + public ReferenceCounted touch(Object hint) + { + data.touch(hint); + return this; + } }