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__)
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.