Allow the key prefixes in etcd to be configurable.

This commit is contained in:
Jake Moshenko 2015-02-02 12:00:19 -05:00
parent 35ba2a6c1f
commit a4b0c8698d

View file

@ -21,10 +21,9 @@ from util.morecollections import AttrDict
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
ETCD_BUILDER_PREFIX = 'building/'
ETCD_REALM_PREFIX = 'realm/'
ETCD_DISABLE_TIMEOUT = 0 ETCD_DISABLE_TIMEOUT = 0
class EtcdAction(object): class EtcdAction(object):
GET = 'get' GET = 'get'
SET = 'set' SET = 'set'
@ -52,6 +51,9 @@ class EphemeralBuilderManager(BaseManager):
self._async_thread_executor = None self._async_thread_executor = None
self._etcd_client = None self._etcd_client = None
self._etcd_realm_prefix = None
self._etcd_builder_prefix = None
self._component_to_job = {} self._component_to_job = {}
self._job_uuid_to_component = {} self._job_uuid_to_component = {}
self._component_to_builder = {} self._component_to_builder = {}
@ -131,7 +133,7 @@ class EphemeralBuilderManager(BaseManager):
@coroutine @coroutine
def _register_existing_realms(self): def _register_existing_realms(self):
try: try:
all_realms = yield From(self._etcd_client.read(ETCD_REALM_PREFIX, recursive=True)) all_realms = yield From(self._etcd_client.read(self._etcd_realm_prefix, recursive=True))
for realm in all_realms.children: for realm in all_realms.children:
if not realm.dir: if not realm.dir:
self._register_realm(json.loads(realm.value)) self._register_realm(json.loads(realm.value))
@ -161,8 +163,11 @@ class EphemeralBuilderManager(BaseManager):
protocol=etcd_protocol), protocol=etcd_protocol),
executor=self._async_thread_executor) executor=self._async_thread_executor)
self._watch_etcd(ETCD_BUILDER_PREFIX, self._handle_builder_expiration) self._etcd_builder_prefix = self._manager_config.get('ETCD_BUILDER_PREFIX', 'building/')
self._watch_etcd(ETCD_REALM_PREFIX, self._handle_realm_change) self._watch_etcd(self._etcd_builder_prefix, self._handle_builder_expiration)
self._etcd_realm_prefix = self._manager_config.get('ETCD_REALM_PREFIX', 'realm/')
self._watch_etcd(self._etcd_realm_prefix, self._handle_realm_change)
# Load components for all realms currently known to the cluster # Load components for all realms currently known to the cluster
async(self._register_existing_realms()) async(self._register_existing_realms())
@ -192,7 +197,7 @@ class EphemeralBuilderManager(BaseManager):
# Check if there are worker slots avialable by checking the number of jobs in etcd # Check if there are worker slots avialable by checking the number of jobs in etcd
allowed_worker_count = self._manager_config.get('ALLOWED_WORKER_COUNT', 1) allowed_worker_count = self._manager_config.get('ALLOWED_WORKER_COUNT', 1)
try: try:
building = yield From(self._etcd_client.read(ETCD_BUILDER_PREFIX, recursive=True)) building = yield From(self._etcd_client.read(self._etcd_builder_prefix, recursive=True))
workers_alive = sum(1 for child in building.children if not child.dir) workers_alive = sum(1 for child in building.children if not child.dir)
except KeyError: except KeyError:
workers_alive = 0 workers_alive = 0
@ -307,17 +312,15 @@ class EphemeralBuilderManager(BaseManager):
self.job_heartbeat_callback(build_job) self.job_heartbeat_callback(build_job)
@staticmethod def _etcd_job_key(self, build_job):
def _etcd_job_key(build_job):
""" Create a key which is used to track a job in etcd. """ Create a key which is used to track a job in etcd.
""" """
return os.path.join(ETCD_BUILDER_PREFIX, build_job.job_details['build_uuid']) return os.path.join(self._etcd_builder_prefix, build_job.job_details['build_uuid'])
@staticmethod def _etcd_realm_key(self, realm):
def _etcd_realm_key(realm):
""" Create a key which is used to track an incoming connection on a realm. """ Create a key which is used to track an incoming connection on a realm.
""" """
return os.path.join(ETCD_REALM_PREFIX, realm) return os.path.join(self._etcd_realm_prefix, realm)
def num_workers(self): def num_workers(self):
""" Return the number of workers we're managing locally. """ Return the number of workers we're managing locally.