Lock Coordination & Safe Rollout Boundaries

Open
#126 0 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Assessment

Difficulty
4/5
Estimated time
3-5 days
Newbie friendliness
38/100
Issue type
Feature
Clarity
Mostly clear
Activity status
Quiet
Tech stack
typescript

Research direction

Start by reviewing blocked issue #125, then trace the SDK's initial configuration fetch and continuous polling paths that detect ETag changes. Identify where onChange is invoked and where LockCoordinator should sit; done means boot bypasses locking, hot reload acquires the rollout lock, defaults rolloutKey to os.hostname(), and re-fetches configuration before onChange.

Written by the indexing model from the issue text.

Description

enhancement
Description

Implement the LockCoordinator to enforce safe rollout boundaries across the cluster. Before the SDK applies a newly detected ETag, it must acquire a distributed semaphore lock based on the rolloutLimit and rolloutKey (defaulting to os.hostname()). Critically, the SDK must completely bypass this locking mechanism during the initial application boot to prevent deployment deadlocks. Furthermore, once a lock is successfully acquired during a hot-reload phase, the SDK must perform a fresh re-fetch of the configuration to ensure it does not apply a stale payload that was superseded while it was waiting in the lock queue.

Acceptance criteria
  • The initial configuration fetch during application boot completely bypasses lock acquisition.

  • Detecting a change during continuous polling triggers an attempt to acquire a distributed lock before executing onChange.

  • If no rolloutKey is provided, the lock defaults to os.hostname().

  • Immediately after acquiring a lock, the SDK successfully re-fetches the configuration before passing it to onChange.

Blocked by

Issue #125

User stories covered: 4, 5, 11

Dominant language
TypeScript
Stars
0
Forks
0
PR merge metrics
No merged PRs in 30d

Contributor guide

No contributing guide indexed for this repository

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

More from MapColonies/config

All issues in MapColonies/config

Similar issues

More TypeScript issues

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.