apache / apache/rocketmq

[Bug] Potential NPE in DefaultHAConnection and AutoSwitchHAConnection when getRemoteSocketAddress() returns null

Open Beginner friendly
#10,207 2 comments 0 reactions 0 assignees View on GitHub
Dominant language
Java
Stars
22.6k
Forks
12k
Avg merge
2d 20h
Merged PRs (30d)
26

Description

### Before Creating the Bug Report

- [x] I found a bug, not just asking a question, which should be created in [GitHub Discussions](https://github.com/apache/rocketmq/discussions).
- [x] I have searched the [GitHub Issues](https://github.com/apache/rocketmq/issues) and [GitHub Discussions](https://github.com/apache/rocketmq/discussions) of this repository and believe that this is not a duplicate.
- [x] I have confirmed that this bug belongs to the current repository, not other repositories of RocketMQ.

### Runtime platform environment

All platforms

### RocketMQ version

develop branch (latest)

### JDK Version

All

### Describe the Bug

In `DefaultHAConnection` (line 64) and `AutoSwitchHAConnection` (line 109), `.toString()` is called directly on the return value of `getRemoteSocketAddress()` without a null check:

```java
this.clientAddress = this.socketChannel.socket().getRemoteSocketAddress().toString();
```

According to the Java documentation, `Socket.getRemoteSocketAddress()` returns `null` if the socket is not connected. In edge cases (e.g., the socket is accepted but the remote peer disconnects before the HA connection constructor completes), this can throw a `NullPointerException`, which would crash the HA connection setup.

### Steps to Reproduce

1. Under network instability, a slave connects and immediately disconnects
2. The master accepts the socket channel
3. `DefaultHAConnection` constructor is called
4. `getRemoteSocketAddress()` returns null because the peer has already disconnected
5. `.toString()` on null throws NPE

### What Did You Expect to See?

The HA connection should handle null remote address gracefully.

### What Did You See Instead?

NullPointerException in the HA connection constructor.

### Additional Context

Affected files:
- `store/src/main/java/org/apache/rocketmq/store/ha/DefaultHAConnection.java:64`
- `store/src/main/java/org/apache/rocketmq/store/ha/autoswitch/AutoSwitchHAConnection.java:109`

Contributor guide

Open the contributing guide

Research direction

Start with the constructor code at store/src/main/java/org/apache/rocketmq/store/ha/DefaultHAConnection.java:64 and store/src/main/java/org/apache/rocketmq/store/ha/autoswitch/AutoSwitchHAConnection.java:109. Review how getRemoteSocketAddress() is used when the peer disconnects before construction completes, then verify that HA connection setup no longer throws a NullPointerException for a null remote address.

Written by the indexing model from the issue text.

Assessment

Tech stack
java
Domain
backend, distributed-systems, networking
Issue type
Bug
Difficulty
2/5
Estimated time
1-3 hours
Activity status
Active
Clarity
Clearly specified
Newbie friendliness
78/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.