Skip to content

Race: concurrent discovery can overwrite fresher registry for same context #76

@ndenev

Description

@ndenev

Summary

Concurrent resource discovery for the same context can race and overwrite fresher registry data with older results.

Affected code

  • src/kubernetes/client.rs (discover_resources_for_context)

Root cause

discover_resources_for_context has no per-context synchronization.
Multiple in-flight discoveries for same context can run concurrently and each performs a blind final write:

  • registries.insert(context, CachedRegistry::new(registry))

The last finisher wins, regardless of freshness/force intent.

Impact

  • Potential stale/older registry replacing fresher one.
  • Non-deterministic table metadata under concurrent operations.
  • Correctness/freshness issue (higher priority).

Proposed fix

  1. Serialize discovery per context using per-context async mutex/lock.
  2. Or apply generation/epoch guard so older discovery results cannot overwrite newer ones.
  3. Keep cross-context discovery parallel (only serialize within each context key).

Tests to add

  1. Simulate concurrent force and non-force discovery for same context; ensure final registry corresponds to freshest/force result.
  2. Regression test for deterministic final registry under concurrent discovery calls.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions