From a4b0c8698d01baaff0011d862dfae3880b943b13 Mon Sep 17 00:00:00 2001 From: Jake Moshenko Date: Mon, 2 Feb 2015 12:00:19 -0500 Subject: [PATCH] Allow the key prefixes in etcd to be configurable. --- buildman/manager/ephemeral.py | 27 +++++++++++++++------------ 1 file changed, 15 insertions(+), 12 deletions(-) diff --git a/buildman/manager/ephemeral.py b/buildman/manager/ephemeral.py index eb1627a48..cfb52f8ad 100644 --- a/buildman/manager/ephemeral.py +++ b/buildman/manager/ephemeral.py @@ -21,10 +21,9 @@ from util.morecollections import AttrDict logger = logging.getLogger(__name__) -ETCD_BUILDER_PREFIX = 'building/' -ETCD_REALM_PREFIX = 'realm/' ETCD_DISABLE_TIMEOUT = 0 + class EtcdAction(object): GET = 'get' SET = 'set' @@ -52,6 +51,9 @@ class EphemeralBuilderManager(BaseManager): self._async_thread_executor = None self._etcd_client = None + self._etcd_realm_prefix = None + self._etcd_builder_prefix = None + self._component_to_job = {} self._job_uuid_to_component = {} self._component_to_builder = {} @@ -131,7 +133,7 @@ class EphemeralBuilderManager(BaseManager): @coroutine def _register_existing_realms(self): 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: if not realm.dir: self._register_realm(json.loads(realm.value)) @@ -161,8 +163,11 @@ class EphemeralBuilderManager(BaseManager): protocol=etcd_protocol), executor=self._async_thread_executor) - self._watch_etcd(ETCD_BUILDER_PREFIX, self._handle_builder_expiration) - self._watch_etcd(ETCD_REALM_PREFIX, self._handle_realm_change) + self._etcd_builder_prefix = self._manager_config.get('ETCD_BUILDER_PREFIX', 'building/') + 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 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 allowed_worker_count = self._manager_config.get('ALLOWED_WORKER_COUNT', 1) 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) except KeyError: workers_alive = 0 @@ -307,17 +312,15 @@ class EphemeralBuilderManager(BaseManager): self.job_heartbeat_callback(build_job) - @staticmethod - def _etcd_job_key(build_job): + def _etcd_job_key(self, build_job): """ 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(realm): + def _etcd_realm_key(self, 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): """ Return the number of workers we're managing locally.