RSS Feed Fetch Timeout #583

Closed
opened 2026-09-18 14:47:14 +01:00 by Smithy-bot · 2 comments
Member

Epic: #528
Story Points:


Add a timeout to RSS feed fetches so a hung or slow URL cannot stall the polling loop.

Follow-up from the review on #579 / #530: FetchFeed currently calls rss-parser with no timeout.

Acceptance Criteria

GIVEN a valid http or https feed URL
WHEN RssFeedHelper.FetchFeed is called and the feed responds within the timeout
THEN the parsed feed is returned as today

GIVEN a valid http or https feed URL
WHEN the remote does not respond within 10 seconds
THEN FetchFeed throws a descriptive error (Failed to fetch or parse RSS feed: ...)
AND the call does not hang indefinitely

GIVEN an invalid URL
WHEN FetchFeed is called
THEN it still throws Invalid RSS feed URL before attempting a network request

Subtasks

  • Pass a timeout into rss-parser (or equivalent abort) from RssFeedHelper.FetchFeed
  • Default timeout to 10 seconds
  • Keep parse/network failures wrapped in the existing descriptive error
  • Update tests to cover timeout (or aborted fetch) behaviour

Notes

  • Raised in the #579 review: consider a fetch timeout when this is wired into a polling loop
  • Intended for use by the RSS timer (#534) so one slow feed cannot block the rest of a 15-minute tick
  • Suggested default: 10 seconds
Epic: #528 Story Points: --- Add a timeout to RSS feed fetches so a hung or slow URL cannot stall the polling loop. Follow-up from the review on #579 / #530: `FetchFeed` currently calls `rss-parser` with no timeout. ## Acceptance Criteria GIVEN a valid http or https feed URL WHEN `RssFeedHelper.FetchFeed` is called and the feed responds within the timeout THEN the parsed feed is returned as today GIVEN a valid http or https feed URL WHEN the remote does not respond within 10 seconds THEN `FetchFeed` throws a descriptive error (`Failed to fetch or parse RSS feed: ...`) AND the call does not hang indefinitely GIVEN an invalid URL WHEN `FetchFeed` is called THEN it still throws `Invalid RSS feed URL` before attempting a network request ## Subtasks - [ ] Pass a timeout into `rss-parser` (or equivalent abort) from `RssFeedHelper.FetchFeed` - [ ] Default timeout to 10 seconds - [ ] Keep parse/network failures wrapped in the existing descriptive error - [ ] Update tests to cover timeout (or aborted fetch) behaviour ## Notes - Raised in the #579 review: consider a fetch timeout when this is wired into a polling loop - Intended for use by the RSS timer (#534) so one slow feed cannot block the rest of a 15-minute tick - Suggested default: 10 seconds
Smithy-bot added this to the 3.4.0 milestone 2026-09-18 14:47:14 +01:00
Vylpes added this to the 3.3 Sprint 9 project 2026-09-23 18:39:13 +01:00
Smithy-bot removed their assignment 2026-10-09 12:06:12 +01:00
Author
Member

Implemented fetch timeout for #583 on branch cursor/583-rss-feed-fetch-timeout.

PR: #588 (ready for review; targets feature/epic-528-rss-feeds).

  • RssFeedHelper.FetchFeed now constructs rss-parser with a 10s timeout
  • Unit tests cover the timeout option and timed-out fetch error wrapping
  • Local yarn build / yarn test PASS (65 tests)

Moved to step/review and assigned to @Vylpes for approval.

Implemented fetch timeout for #583 on branch `cursor/583-rss-feed-fetch-timeout`. PR: https://git.vylpes.xyz/RabbitLabs/vylbot-app/pulls/588 (ready for review; targets `feature/epic-528-rss-feeds`). - `RssFeedHelper.FetchFeed` now constructs `rss-parser` with a 10s timeout - Unit tests cover the timeout option and timed-out fetch error wrapping - Local `yarn build` / `yarn test` PASS (65 tests) Moved to `step/review` and assigned to @Vylpes for approval.
Vylpes removed their assignment 2026-10-09 13:55:15 +01:00
Smithy-bot removed their assignment 2026-10-10 12:04:01 +01:00
Author
Member

QA results — PASS

Tested on feature/epic-528-rss-feeds @ 24f39c9 (PR #588 merged 2026-10-09 into the epic branch; not on release/3.4.0 yet).

Acceptance criteria

  • Valid feed URL → parsed feed returned; rss-parser constructed with { timeout: 10000 }
  • Timed-out / aborted fetch → Failed to fetch or parse RSS feed: ... (covered by unit test)
  • Invalid URL → Invalid RSS feed URL before network

Checks

  • yarn install --frozen-lockfile PASS
  • yarn build PASS
  • yarn test PASS — 5 suites / 70 tests / 2 snapshots
  • RssFeedHelper suite 18/18 PASS (timeout option + timeout error wrapping)

Moved step/testing → step/uat and assigned @Vylpes for UAT.
Live hung-URL smoke against a real slow feed left for human UAT when the RSS timer (#534) is wired.

## QA results — PASS Tested on `feature/epic-528-rss-feeds` @ `24f39c9` (PR #588 merged 2026-10-09 into the epic branch; not on `release/3.4.0` yet). ### Acceptance criteria - Valid feed URL → parsed feed returned; `rss-parser` constructed with `{ timeout: 10000 }` - Timed-out / aborted fetch → `Failed to fetch or parse RSS feed: ...` (covered by unit test) - Invalid URL → `Invalid RSS feed URL` before network ### Checks - `yarn install --frozen-lockfile` PASS - `yarn build` PASS - `yarn test` PASS — 5 suites / 70 tests / 2 snapshots - `RssFeedHelper` suite 18/18 PASS (timeout option + timeout error wrapping) Moved `step/testing` → `step/uat` and assigned @Vylpes for UAT. Live hung-URL smoke against a real slow feed left for human UAT when the RSS timer (#534) is wired.
Vylpes 2026-10-10 12:40:55 +01:00
  • closed this issue
  • removed the
    step
    uat
    label
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
RabbitLabs/vylbot-app#583
No description provided.