GV

GeezerVison

The World Wide Web, restored to 800 pixels of glory.

Home|About|Gaming cabinet|Archives|How it works|Starter sites

On this site

  • Sign in
  • ActionsCI/CD and automation
  • CodespacesCloud development environments
  • All Features
  • Documentation
  • Training
  • Certifications
  • Build with Copilot
  • Customize Copilot
  • Integrations
  • Trending repos
  • GitHub Sponsors
  • Developer articles
  • Enterprises

This view

  • Original page
  • New address

GeezerVison is showing github.com — Iceberg input: one transient error while refreshing the table makes the input permanently FATAL · Issue #7900 · feldera/feldera

Iceberg input: one transient error while refreshing the table makes the input permanently FATAL #7900

New issue
Copy link
New issue
Copy link
Open
Bug
Open
Iceberg input: one transient error while refreshing the table makes the input permanently FATAL#7900
Bug
Copy link
Assignees
swanandx
Labels
connectorsIssues related to the adapters/connectors crateIssues related to the adapters/connectors cratehigh priorityTask should be tackled first, added in the current sprint if necessaryTask should be tackled first, added in the current sprint if necessaryuser-reportedReported by a user or customerReported by a user or customer

Description

@fritzpaz
fritzpaz
opened on Nov 9, 2026
Issue body actions
I ran into this while working on a test environment and new connectors with Claude Code. I had it write the report below, so excuse if it's very AI-ey. I read the full thing, and worked with it to do a draft PR I'd be happy to share if useful. Did not put as much work into the work vs validating the bug.

There is a change this is by design (quick failures), but I do think there should be a way to handle this more gracefully. Let me know how I can further help this.

Problem

On v0.377.0, an iceberg_input connector in snapshot_and_follow mode reopens the table on every poll. Only throttling errors are retried. Any other error while reopening the table ends the follow loop, and the input stays FATAL until the pipeline restarts.

That includes errors that clear within seconds: a credentials endpoint restarting, an instance-metadata timeout, or a proxy in front of the REST catalog being recreated. Meanwhile health.status stays Healthy, and new snapshots go unread with no visible signal.

We hit this three times on our deployment. Each time a short outage of 20-35 s left the input FATAL:

error refreshing the Iceberg table: ... DispatchFailure ... TimedOutError(5s)
error refreshing the Iceberg table: ... CredentialsNotLoaded("no providers in chain provided credentials")
error refreshing the Iceberg table: ... Failed to execute http request ... /v1/config?warehouse=...

Reproduction

These steps use the stock v0.377.0 image, a Glue catalog on moto, and credentials from AWS_CONTAINER_CREDENTIALS_FULL_URI:

  1. Start following the table.
  2. Stop the credentials server for 35 s.

The input goes FATAL within about 3 s while health still reads Healthy. After the server returns, the next append is never read: still not read after 180 s.

Proposal

Add an opt-in per-connector option, retry_transient_errors (default false), next to max_retries.

  • Off: exactly today's behaviour.
  • On:
    • Transient errors on open or refresh are retried with the existing backoff, like throttling. These are credential-load failures, timeouts, connection refused or reset, DNS failures, and HTTP 5xx, 429 and 503.
    • While it retries, the connector reports itself unhealthy.
    • The first open retries a bounded number of times, so a wrong endpoint still fails the pipeline start.
    • Permanent errors stay fatal: access denied, table or namespace not found, invalid metadata.

Open errors would stay text-matched, as the existing is_retryable_open_error does.

Status

We have a draft implementation on current main. It was generated with AI tools (Claude Code and OpenAI Codex) and reviewed by us. It includes unit tests, regenerated OpenAPI and TypeScript types, and docs. We also ran it end to end against the reproduction above.

We will open the PR only if you agree with this approach.

Activity

  1. ryzhyk
    assigned
    swanandx
    on Nov 9, 2026
  2. ryzhyk
    added the
    Bug
    issue type on Nov 9, 2026
  3. ryzhyk
    added
    high priorityTask should be tackled first, added in the current sprint if necessaryTask should be tackled first, added in the current sprint if necessary
    user-reportedReported by a user or customerReported by a user or customer
    connectorsIssues related to the adapters/connectors crateIssues related to the adapters/connectors crate
    on Nov 9, 2026
  4. swanandx commented on Nov 9, 2026

    @swanandx
    swanandx
    on Nov 9, 2026
    Member
    More actions

    hey @fritzpaz , thanks for reporting this!

    I was just wondering why this should be opt-in / an option? can't we just retry these errors the same way data reads are retried: with backoff, reporting the connector as unhealthy, and capped at max_retries?

    also, didn't check in depth, but instead of opening new client on every poll, reusing one client would help reduce such cases?

  5. fritzpaz commented on Nov 10, 2026

    @fritzpaz
    fritzpaz
    on Nov 10, 2026
    Author
    More actions

    Hey @swanandx

    My thought was in case this was desired behavior in any way, but certainly agree with you that keeping it simple and consistent would be best. Thoughts on the plan:

    • Refresh/retry transient errors with the existing backoff, the same way data reads are handled.
    • Reporting the connector as unhealthy while it retries. Note: I am not sure on this one... what do you think?
    • Capping retries at max_retries. Note: max_retries defaults to unlimited, do we need to add a bound for this case?
    • Keep permanent errors as fatal

    Re: reusing one client, I think it would cut the per-poll connections and DNS lookups. I don't think it would eliminate the need for a rety, since the failures we hit seem to happen regardless. Should I make it a follow-up or the same PR?

    Let me know what you think and I can open the PR, or share anything that is useful. (The implementation was drafted with AI tools: Claude Code and OpenAI Codex)

  6. swanandx commented on Nov 12, 2026

    @swanandx
    swanandx
    on Nov 12, 2026
    Member
    More actions

    Should I make it a follow-up or the same PR?

    depends on how small it is / how much it helps. but ig follow-up would work best. Feel free to open PR! thanks!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

  • @swanandx
    swanandx

Labels

connectorsIssues related to the adapters/connectors crateIssues related to the adapters/connectors cratehigh priorityTask should be tackled first, added in the current sprint if necessaryTask should be tackled first, added in the current sprint if necessaryuser-reportedReported by a user or customerReported by a user or customer

Type

Bug

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions

    You are visitor 01402503 — GeezerVison does not store the pages you look up.
    Best viewed with Netscape Navigator 4.7 or Internet Explorer 6 at 800×600. No cookies required.