| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263 |
- """
- Local Coordinator - Single Node Implementation.
- This is the default implementation that operates in single-node mode.
- All coordination methods are no-ops or return default values
- that work for a single instance.
- """
- import logging
- from typing import Any
- from gpustack.server.coordinator.base import Coordinator, Event
- logger = logging.getLogger(__name__)
- class LocalCoordinator(Coordinator):
- """
- Local (single-node) implementation of Coordinator.
- In this mode:
- - This instance is always the leader
- - Pub/Sub is local only (no distribution)
- - Shared state is in-memory
- """
- def __init__(self, config: Any = None, **kwargs):
- super().__init__(config, **kwargs)
- self._started = False
- async def start(self):
- """Start the local coordinator (no-op)."""
- self._started = True
- self._is_leader = True
- logger.debug("Local coordinator started (single-node mode)")
- async def stop(self):
- """Stop the local coordinator (no-op)."""
- self._started = False
- logger.debug("Local coordinator stopped")
- # Leader Election - Always leader in local mode
- async def acquire_leadership(self, ttl: int) -> bool:
- """Always returns True in local mode."""
- self._is_leader = True
- return True
- async def renew_leadership(self, ttl: int) -> bool:
- """Always returns True in local mode."""
- return True
- async def release_leadership(self):
- """No-op in local mode."""
- self._is_leader = False
- # Pub/Sub - Local only
- async def publish(self, channel: str, event: Event):
- """
- Publish event to local subscribers only.
- In local mode, events don't leave this process.
- """
- self._notify_local_subscribers(channel, event)
|