RedisArrayAggregator Class — netty Architecture
Architecture documentation for the RedisArrayAggregator class in RedisArrayAggregator.java from the netty codebase.
Entity Profile
Dependency Diagram
graph TD 012bd3a5_4e03_f9eb_6cc8_66f49859fdf6["RedisArrayAggregator"] 7430b3a8_ac7d_9a96_1860_df9731aa4c46["RedisArrayAggregator.java"] 012bd3a5_4e03_f9eb_6cc8_66f49859fdf6 -->|defined in| 7430b3a8_ac7d_9a96_1860_df9731aa4c46 86701e59_5466_bb8d_e87c_68514b4568f0["RedisArrayAggregator()"] 012bd3a5_4e03_f9eb_6cc8_66f49859fdf6 -->|method| 86701e59_5466_bb8d_e87c_68514b4568f0 043bb9bf_1443_0c42_e71e_b66949666a5e["decode()"] 012bd3a5_4e03_f9eb_6cc8_66f49859fdf6 -->|method| 043bb9bf_1443_0c42_e71e_b66949666a5e 36052a91_1ebd_bdfa_c856_32922cf0b94b["RedisMessage()"] 012bd3a5_4e03_f9eb_6cc8_66f49859fdf6 -->|method| 36052a91_1ebd_bdfa_c856_32922cf0b94b
Relationship Graph
Source Code
codec-redis/src/main/java/io/netty/handler/codec/redis/RedisArrayAggregator.java lines 33–97
@UnstableApi
public final class RedisArrayAggregator extends MessageToMessageDecoder<RedisMessage> {
private final Deque<AggregateState> depths = new ArrayDeque<AggregateState>(4);
public RedisArrayAggregator() {
super(RedisMessage.class);
}
@Override
protected void decode(ChannelHandlerContext ctx, RedisMessage msg, List<Object> out) throws Exception {
if (msg instanceof ArrayHeaderRedisMessage) {
msg = decodeRedisArrayHeader((ArrayHeaderRedisMessage) msg);
if (msg == null) {
return;
}
} else {
ReferenceCountUtil.retain(msg);
}
while (!depths.isEmpty()) {
AggregateState current = depths.peek();
current.children.add(msg);
// if current aggregation completed, go to parent aggregation.
if (current.children.size() == current.length) {
msg = new ArrayRedisMessage(current.children);
depths.pop();
} else {
// not aggregated yet. try next time.
return;
}
}
out.add(msg);
}
private RedisMessage decodeRedisArrayHeader(ArrayHeaderRedisMessage header) {
if (header.isNull()) {
return ArrayRedisMessage.NULL_INSTANCE;
} else if (header.length() == 0L) {
return ArrayRedisMessage.EMPTY_INSTANCE;
} else if (header.length() > 0L) {
// Currently, this codec doesn't support `long` length for arrays because Java's List.size() is int.
if (header.length() > Integer.MAX_VALUE) {
throw new CodecException("this codec doesn't support longer length than " + Integer.MAX_VALUE);
}
// start aggregating array
depths.push(new AggregateState((int) header.length()));
return null;
} else {
throw new CodecException("bad length: " + header.length());
}
}
private static final class AggregateState {
private final int length;
private final List<RedisMessage> children;
AggregateState(int length) {
this.length = length;
this.children = new ArrayList<RedisMessage>(length);
}
}
}
Source
Frequently Asked Questions
What is the RedisArrayAggregator class?
RedisArrayAggregator is a class in the netty codebase, defined in codec-redis/src/main/java/io/netty/handler/codec/redis/RedisArrayAggregator.java.
Where is RedisArrayAggregator defined?
RedisArrayAggregator is defined in codec-redis/src/main/java/io/netty/handler/codec/redis/RedisArrayAggregator.java at line 33.
Analyze Your Own Codebase
Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.
Try Supermodel Free