Tencent/WeKnora · critical · PartialFetchError
all feeds failed: %s
Error message
all feeds failed: %s
What it means
Returned by the connector's walk when every configured feed failed to fetch or parse during a sync AND no items were produced. If only some feeds failed, the walk returns a PartialFetchError with the per-feed details instead; this hard error fires only when the entire feed list failed and output is empty, indicating a systemic problem rather than individual bad feeds.
Source
Thrown at internal/datasource/connector/rss/connector.go:279
resolved := c.resolveItem(ctx, cli, feed, item, feedURL, itemID, feedContent)
newCursor.FeedItems[feedURL][itemID] = resolved.fingerprint
newCursor.FeedSignals[feedURL][itemID] = feedSig
if incremental && prevItems != nil && prevItems[itemID] == resolved.fingerprint {
skipped++
continue
}
kept++
out = append(out, resolved.item)
}
logger.Infof(ctx, "[RSS] feed %s: items=%d fetched=%d skipped=%d",
feedURL, len(feed.Items), kept, skipped)
}
if len(feedErrors) > 0 {
if len(out) == 0 && len(feedErrors) == len(feedURLs) {
return nil, newCursor, fmt.Errorf("all feeds failed: %s", strings.Join(feedErrors, "; "))
}
return out, newCursor, &datasource.PartialFetchError{Details: feedErrors}
}
return out, newCursor, nil
}
type resolvedFeedItem struct {
item types.FetchedItem
fingerprint string
}
// resolveItem assembles a FetchedItem for a single feed entry, resolving the
// best available content (full-text article > feed content) and converting it
// to Markdown.
func (c *Connector) resolveItem(
ctx context.Context,
cli *client,View on GitHub (pinned to 988cbb0330)
Solutions
- Inspect the joined per-feed messages — if every error is identical (e.g. all DNS failures), fix the shared root cause (DNS, proxy, egress rules) rather than individual feeds.
- Retry the sync after restoring connectivity; this error is usually transient infrastructure-wide.
- If auth headers expired across all feeds, update the datasource config credentials.
- Reduce polling frequency or add jitter if rate limiting caused a synchronized ban across feeds.
Example fix
// before
res, cur, err := connector.Walk(ctx, cfg, oldCursor)
if err != nil {
return err
}
// after
res, cur, err := connector.Walk(ctx, cfg, oldCursor)
var pfe *datasource.PartialFetchError
if errors.As(err, &pfe) {
log.Warnf("partial sync: %v", err) // keep partial results
}
if err != nil && !errors.As(err, &pfe) {
scheduleRetryWithBackoff(err)
} Defensive patterns
Strategy: try-catch
Try / catch
out, cursor, err := connector.Walk(ctx, cfg, prevCursor)
var pfe *datasource.PartialFetchError
switch {
case err == nil:
commit(out, cursor)
case errors.As(err, &pfe):
log.Warnf("partial sync, some feeds failed: %v", err)
commit(out, cursor) // keep what we got
default:
log.Errorf("full sync failure: %v", err)
scheduleRetryWithBackoff(5*time.Minute)
} Prevention
- Distinguish PartialFetchError from total failure and keep partial results whenever possible.
- Monitor egress connectivity (DNS, proxy) from the connector host — total failures are usually environmental.
- Rotate feed credentials proactively so all feeds don't 401 at once.
- Add jitter and backoff to polling so rate-limit bans don't hit every feed simultaneously.
When it happens
Trigger: All feed URLs in the config fail on the same walk: the network egress is down, a shared proxy/DNS is broken, all feeds share one host that is down, or configured auth headers expired and every token-gated feed now returns 401. It is joined with per-feed error strings separated by "; ".
Common situations: Corporate proxy or firewall change blocking egress from the connector host; certificate expiry on a single host serving all feeds; synchronized rate-limit bans after too-aggressive polling; an infrastructure outage affecting all monitored blogs at once.
Understand the failure class
Background: 'Something went wrong' / 'Request failed (500)' / 'HTTP error! status: 404' — what failed HTTP requests actually mean and how to find the real cause — this error's family across 28 libraries.
Related errors
AI-assisted analysis of Tencent/WeKnora@988cbb0330 (2026-09-02).
Data as JSON: /api/errors/11c896fe8f60d074.
Report an issue: GitHub.