aws / aws/aws-sdk-java-v2

Add support for Netty 4.2.x

Open
#6,757 12 comments 38 reactions 0 assignees View on GitHub
bug p2
Dominant language
Java
Stars
2.6k
Forks
1k
Avg merge
2d 9h
Merged PRs (30d)
51

Description

### Describe the bug

When upgrading an application stack to Netty 4.2.x and Reactor Netty 1.3.x, the AWS SDK v2 `netty-nio-client` fails when providing a Netty 4.2-style `EventLoopGroup` (e.g. `MultiThreadIoEventLoopGroup`).

The failure occurs because `SdkEventLoopGroup` create does not recognize `MultiThreadIoEventLoopGroup` (Netty 4.2 model) and throws:

```
IllegalArgumentException: Unknown event loop group : class io.netty.channel.MultiThreadIoEventLoopGroup
```

This suggests that netty-nio-client still expects 4.1-style `EpollEventLoopGroup` or `NioEventLoopGroup`.

So few Key Questions
- Does AWS SDK v2 officially support Netty 4.2.x?
- If not:
- Is there a roadmap to support 4.2?
- Is there an estimated release version?
- If yes:
- Which AWS SDK version should be used?
- What is the correct way to provide a 4.2-style IoEventLoopGroup?
- Is there a recommended compatibility matrix between:
- AWS SDK v2
- Netty

### Regression Issue

- [ ] Select this option if this issue appears to be a regression.

### Expected Behavior

If AWS SDK v2 supports Netty 4.2.x:
- `SdkEventLoopGroup` create should accept `IoEventLoopGroup` / `MultiThreadIoEventLoopGroup`
- OR documentation should clearly state that Netty 4.2.x is not supported

### Current Behavior

Only 4.1-style groups are supported:
- EpollEventLoopGroup
- KQueueEventLoopGroup
- NioEventLoopGroup

IoEventLoopGroup (4.2 model) is not recognized.

### Reproduction Steps

- Create Netty 4.2 EventLoopGroup
```
@Bean
public EventLoopGroup eventLoopGroup() {
return new MultiThreadIoEventLoopGroup(
8,
NioIoHandler.newFactory()
);
}
```

- Provide it to AWS SDK
```
@Bean
public SdkEventLoopGroup sdkEventLoopGroup(EventLoopGroup eventLoopGroup) {
return SdkEventLoopGroup.create(
eventLoopGroup,
NioSocketChannel::new
);
}
```
- Result
```
IllegalArgumentException:
Unknown event loop group :
class io.netty.channel.MultiThreadIoEventLoopGroup
```

### Possible Solution

- Add support for Netty 4.2 `IoEventLoopGroup`
- Detect `IoEventLoopGroup` / `MultiThreadIoEventLoopGroup`
- Allow user-provided `ChannelFactory` without strict type checking
- Avoid instanceof checks tied to 4.1-only classes

- Provide explicit documentation
- Clearly state that Netty 4.2.x is not supported
- Provide an official compatibility matrix

- Introduce version-aware factory logic
- If Netty 4.2 detected, use generic `ChannelFactory`
- Avoid relying on concrete `EventLoopGroup` subclass checks

At minimum, clarification on official Netty 4.2 support status would help users avoid runtime incompatibilities during upgrades.

### Additional Information/Context

Netty 4.2 introduces the new IoHandler model and deprecates:
EpollEventLoopGroup, KQueueEventLoopGroup, NioEventLoopGroup
Frameworks such as Reactor Netty 1.3.x are beginning to align with 4.2 APIs.

This creates a compatibility gap for applications using: Spring WebFlux / Reactor Netty, AWS SDK v2 async clients, Shared EventLoopGroups for IO optimization

Currently, users must either - Downgrade Netty to 4.1.x Or use deprecated EventLoopGroup implementations

Clarification on official support would help prevent production incompatibilities.

The incompatibility appears to stem from `SdkEventLoopGroup` performing instance checks against legacy EventLoopGroup types.

### AWS Java SDK version used

V2 SDK (group ID `software.amazon.awssdk`) - 2.42.4

### JDK version used

Java 21

### Operating System and version

Linux (Epoll available)

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.