[Bug] Potential NPE in DefaultHAConnection and AutoSwitchHAConnection when getRemoteSocketAddress() returns null
- 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
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