hashgraph / hashgraph/pbj

PBJ http/2 stream state transition breaks Helidon connection idle management

Open
#888 0 comments 0 reactions 0 assignees View on GitHub
Bug
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

Open the contributing 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

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.