A ServerDB message dropped by the full receive queue never reaches the receive observers and its drop line names no message
Maintainers usually reply within 1 day
Nobody has claimed this yet.
Assessment
- Difficulty
- 2/5
- Estimated time
- 1-3 hours
- Newbie friendliness
- 80/100
Research direction
Start with src/runtime/server/websocket_frame.cpp and src/runtime/server/websocket_client.cpp, then add the falsifier described in the issue: deliver a frame that exceeds the 1024-message receive queue with a receive observer attached. Check that the observer sees the first dropped message and that the warning includes its id and the dropped count; run the relevant GTest to verify.
Written by the indexing model from the issue text.
Description
Evidence at 0c3068d41
src/runtime/server/websocket_frame.cpp:72-79(ParseServerDbFrame): onceresult.messages.size() >= queueLimitit setsWebSocketFrameStatus::QueueLimit, records the first dropped message's id and length, and stops; the later messages of the frame are not parsed intoresult.messages.src/runtime/server/websocket_client.cpp:288-298(OnMessage, Message case):receiveObserver_is called only overparsed.messages, so a message past the limit never reaches the receive observer (the ended-session watchdog and the registration-answer tracker, #2374).src/runtime/server/websocket_client.cpp:332-340: the only record is one WarningReceive queue full (1024) — remaining frame messages dropped, with no message id, no count and no reconnect count; the id and lengthParseServerDbFramerecorded are discarded.
Not shown
That a live server's queue ever fills: the game thread drains it in GameServerLib::Update, and no run has been observed to reach 1024 queued messages.
Falsifier
A GTest that delivers a frame whose first message after the free capacity is a registration refusal (or a session-ended message) to a WebSocketClient whose receive queue holds 1024 messages, with a receive observer attached, and finds the observer called for it and a Warning naming its message id: it fails on 0c3068d41 (the observer is not called, the line names no id) and would pass after the fix.
Work
- Test first, as the falsifier says.
- Run the receive observer over every parsed message including those the queue cannot take (they are still dropped from the game-thread queue), and put the first dropped message's id (
errorMessageId) and the dropped count in the Warning.
- Dominant language
- C++
- Stars
- 2
- Forks
- 5
- Avg merge
- 4h 21m
- Merged PRs (30d)
- 801
Getting set up
- No Dockerfile or Docker Compose file
- Has a pull request template
- Read the contributing guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
More from EchoTools/nevr-runtime
-
backlog
Difficulty 2/5 1-3 hours Newbie friendliness 78/100
EchoTools/nevr-runtime#2385 ·
Maintainers usually reply within 1 day
-
backlog
Difficulty 2/5 1-3 hours Newbie friendliness 78/100
EchoTools/nevr-runtime#2384 ·
Maintainers usually reply within 1 day
-
backlog
Difficulty 1/5 1-3 hours Newbie friendliness 87/100
EchoTools/nevr-runtime#2373 ·
Maintainers usually reply within 1 day
-
backlog documentation
Difficulty 1/5 Under an hour Newbie friendliness 96/100
EchoTools/nevr-runtime#2354 ·
Maintainers usually reply within 1 day
-
backlog bug
Difficulty 2/5 1-3 hours Newbie friendliness 83/100
EchoTools/nevr-runtime#2335 ·
Maintainers usually reply within 1 day
All issues in EchoTools/nevr-runtime
Similar issues
-
bug
Difficulty 2/5 1-3 hours Newbie friendliness 76/100
Maintainers usually reply within 3 days
-
type:bug
Difficulty 2/5 1-3 hours Newbie friendliness 65/100
tensorflow/tflite-micro#3995 ·
Maintainers usually reply within 1 day
-
CPU update 1.31xOpenspeed-report
Difficulty 1/5 Under an hour Newbie friendliness 75/100
mw00/project-maya#961 · 1 comment ·
Maintainers usually reply within 1 day
-
Difficulty 2/5 1-3 hours Newbie friendliness 78/100
-
Difficulty 2/5 1-3 hours Newbie friendliness 72/100
godotengine/godot#125376 ·
Maintainers usually reply within 1 day