[PR #30695] fix(web): resolve chat message loading race conditions and infinite loops #32927

Closed
opened 2026-02-21 20:52:20 -05:00 by yindo · 0 comments
Owner

Original Pull Request: https://github.com/langgenius/dify/pull/30695

State: closed
Merged: Yes


Summary

Fix chat message loading race conditions, log disorder, and infinite loops in the app log panel.

Fixes #30259

Changes:

  • Add AbortController to cancel in-flight requests on new scroll
  • Add requestIdRef to ignore stale responses
  • Add oldestAnswerIdRef to store pagination anchor in ref (avoids stale closures)
  • Add lastLoadTimeRef for throttling that persists across effect re-runs
  • Add retryCountRef with MAX_RETRY_COUNT=3 to prevent infinite retry loops
  • Remove duplicate scroll listener that was firing both fetchData and loadMoreMessages
  • Use functional state updates in setAllChatItems to avoid stale state issues

Checklist

  • This change requires a documentation update, included: Dify Document
  • I understand that this PR may be closed in case there was no previous discussion or issues. (This doesn't apply to typos!)
  • I've added a test for each change that was introduced, and I tried as much as possible to make a single atomic change.
  • I've updated the documentation accordingly.
  • I ran make lint and make type-check (backend) and cd web && npx lint-staged (frontend) to appease the lint gods

Contribution by Gittensor, see my contribution statistics at https://gittensor.io/miners/details?githubId=94194147

**Original Pull Request:** https://github.com/langgenius/dify/pull/30695 **State:** closed **Merged:** Yes --- ## Summary Fix chat message loading race conditions, log disorder, and infinite loops in the app log panel. Fixes #30259 ### Changes: - Add `AbortController` to cancel in-flight requests on new scroll - Add `requestIdRef` to ignore stale responses - Add `oldestAnswerIdRef` to store pagination anchor in ref (avoids stale closures) - Add `lastLoadTimeRef` for throttling that persists across effect re-runs - Add `retryCountRef` with `MAX_RETRY_COUNT=3` to prevent infinite retry loops - Remove duplicate scroll listener that was firing both `fetchData` and `loadMoreMessages` - Use functional state updates in `setAllChatItems` to avoid stale state issues ## Checklist - [ ] This change requires a documentation update, included: [Dify Document](https://github.com/langgenius/dify-docs) - [x] I understand that this PR may be closed in case there was no previous discussion or issues. (This doesn't apply to typos!) - [x] I've added a test for each change that was introduced, and I tried as much as possible to make a single atomic change. - [x] I've updated the documentation accordingly. - [x] I ran `make lint` and `make type-check` (backend) and `cd web && npx lint-staged` (frontend) to appease the lint gods --- Contribution by Gittensor, see my contribution statistics at https://gittensor.io/miners/details?githubId=94194147
yindo added the pull-request label 2026-02-21 20:52:20 -05:00
yindo closed this issue 2026-02-21 20:52:20 -05:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: langgenius/dify#32927