Skip to content

[FEATURE] Make Redis optional when author attribution is disabled #204

Closed

Description

@consooo

the problem
When running in committer-only mode (--author-attribution=false), Redis should not be a required dependency as the watch cursor store already handles a nil store gracefully. Running and maintaining a redis instance is unnecessary work if the performance drawbacks on restarts are unimportant

the solution

  • If --redis-addr is empty, skip all Redis wiring entirely
  • The operator starts and watches function normally; on restart, each watch replays from scratch instead of resuming from a cursor
  • If --author-attribution=true is requested without a Redis address, fail fast with a clear error (attribution requires Redis)
  • The readiness gate is skipped when no Redis is configured (already nil-safe)

What do you think @sunib ? This would make running it for us much easier and wouldn't be a big change in the code.

Activity

  1. sunib commented on Jul 7, 2026

    @sunib
    Contributor

    Thanks, good one. Before I add a second wiring path I want to poke at it a bit,
    because a couple of things might make the whole burden go away.

    For gitops-reverser, Valkey is just a small throwaway cache:

    • watch cursors (1h TTL)
    • audit attribution facts (15m TTL)
    • planned: 'durable' queue for BranchWorker, so that we can 'survive' a GitHub outage (without missing a beat).

    And I'm happy to put this in writing: in gitops-reverser Valkey stays a cache
    and nothing more. It never holds the only copy of anything, it never needs
    persistence or backups, and I'm not going to grow a durable / long term storage
    requirement into it. Git is the source of truth, Valkey is disposable. Lose the
    lot and you just cold-replay from the cluster.

    That lets me bundle it into the helm chart sized to what you actually run:

    Mode Replicas Valkey Holds On restart
    Committer-only, minimal 1 none nothing cold replay (full relist + diff)
    Committer-only, default 1 1 pod, no persistence cursors (1h TTL) warm resume
    Attributed 1 1 pod, no persistence cursors + audit facts (15m) warm resume
    HA 2+ 3 pods, no persistence cursors + facts (+ future queue) warm resume, failover-safe

    The "minimal" row is basically what you're asking for. So the real question is
    where the pain sits for you once Valkey is one small no-persistence pod:

    • resource footprint?
    • operational surface (another image to scan / upgrade / patch)?
    • a hard rule in your environment (no stateful workloads, air-gapped
      mirroring, per-dependency review)?

    The other side to weigh: the minimal row cold-replays on every restart and
    rolling deploy, so a full relist plus diff of your whole watched set with no
    resume cursor. Cheap on a small cluster, less so on a big or busy one. So:

    • how big is the set you'd be watching?
    • are you running (or planning) more than one replica?

    I'm really trying to be open minded btw. But I'm also a bit hesitant because I would like to avoid to many different options.

  2. consooo commented on Jul 7, 2026

    @consooo
    ContributorAuthor

    Thanks for the quick answer! Yes, I'm all for keeping options few and simple. The reason I'm asking is precisely because we want to keep the tooling as simple as possible too.

    As you said, it's only used for caching. For us, there will probably be only very few special kinds we would like to watch, with maybe 2000 objects in total. Performance is not really a concern. It's okay if it takes a few minutes for a commit to come through if the pod happens to be restarted. And the traffic should also not be too much of a concern as the objects are not that big.

    The reason why it would be much easier for us without valkey is simply that it will be yet another pod to manage within the cluster. Security is a real concern so we need to monitor valkey for vulnerabilities, handle patching etc in an air-gapped cluster. If, for instance, there is a huge problem with it and we need to get rid of it, we would lose the reverser too. Or if a security relevant release is not yet supported by reverser.

    So in the spirit of minimising risk and maintenance effort, it would be much better if we could run reverser without redis/valkey.

  3. sunib commented on Jul 8, 2026

    @sunib
    Contributor

    I understand: thanks for your quick follow-up. I'll try to implement this by the end of the week.

    If you feel up to it you can also create a PR perhaps? It does help the project to have more different contributors.

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions