PBJ http/2 stream state transition breaks Helidon connection idle management
- Dominant language
- Java
- Stars
- 44
- Forks
- 15
- Avg merge
- 1d 15h
- Merged PRs (30d)
- 12
Description
### Description
PBJ overrides Helidon http/2 stream state transition to mark a stream as `CLOSED` unconditionally when a DATA frame with `endOfStream` set is received from the peer (in PbjProtocolHandler.data(), line 468-476).
In terms of block-node server streaming to a client, this would cause Helidon to immediately remove the stream from its `activeStreamIds`. This in turn disables the Helidon idle time refresh logic when later a good `WINDOW_UPDATE` frame is received for the affected stream from the peer. The consequence is Helidon will always close the HTTP/2 connection per the configured `idleConnectionTimeout`.
### Steps to reproduce
Run MN to stream blocks from BN, check MN / BN logs for the pattern that the connection is always closed by the server around 30-minutes mark. Note BN's default `idleConnectionTimeoutMinutes` is 30.
### Additional context
_No response_
### Hedera network
_No response_
### Version
N/A
### Operating system
None
Contributor guide
Research direction
Start in PbjProtocolHandler.data(), around lines 468-476, and trace how an endOfStream DATA frame changes Helidon’s stream state and activeStreamIds. Reproduce the block-node to mirror-node streaming case and inspect logs around the 30-minute idleConnectionTimeout; done means later WINDOW_UPDATE frames keep the connection’s idle management effective instead of causing premature closure.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- java
- Domain
- networking
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Quiet
- Clarity
- Mostly clear
- Newbie friendliness
- 48/100