We have to serialize our build data before sending it to etc.

This commit is contained in:
Jake Moshenko 2014-12-23 14:09:04 -05:00
parent 709e571b78
commit 4e22e22ba1
2 changed files with 15 additions and 11 deletions

View file

@ -3,6 +3,7 @@ import etcd
import uuid
import calendar
import os.path
import json
from datetime import datetime, timedelta
from trollius import From, coroutine, Return, async
@ -74,7 +75,8 @@ class EphemeralBuilderManager(BaseManager):
if etcd_result.action == ETCD_EXPIRE_RESULT:
# Handle the expiration
logger.debug('Builder expired, clean up the old build node')
async(self._clean_up_old_builder(etcd_result.key, etcd_result._prev_node.value))
job_metadata = json.loads(etcd_result._prev_node.value)
async(self._clean_up_old_builder(etcd_result.key, job_metadata))
def initialize(self, manager_config):
logger.debug('Calling initialize')
@ -149,7 +151,7 @@ class EphemeralBuilderManager(BaseManager):
}
try:
yield From(self._etcd_client.write(job_key, payload, prevExist=False, ttl=ttl))
yield From(self._etcd_client.write(job_key, json.dumps(payload), prevExist=False, ttl=ttl))
component = self.register_component(realm, BuildComponent, token=token)
self._component_to_job[component] = build_job
except KeyError:
@ -163,7 +165,7 @@ class EphemeralBuilderManager(BaseManager):
# Store the builder in etcd associated with the job id
payload['builder_id'] = builder_id
yield From(self._etcd_client.write(job_key, payload, prevExist=True, ttl=ttl))
yield From(self._etcd_client.write(job_key, json.dumps(payload), prevExist=True, ttl=ttl))
raise Return(True)
@ -199,9 +201,10 @@ class EphemeralBuilderManager(BaseManager):
def job_heartbeat(self, build_job):
# Extend the deadline in etcd
job_key = self._etcd_job_key(build_job)
build_job_response = yield From(self._etcd_client.read(job_key))
build_job_metadata_response = yield From(self._etcd_client.read(job_key))
build_job_metadata = json.loads(build_job_metadata_response.value)
max_expiration = datetime.utcfromtimestamp(build_job_response.value['max_expiration'])
max_expiration = datetime.utcfromtimestamp(build_job_metadata['max_expiration'])
max_expiration_remaining = max_expiration - datetime.utcnow()
max_expiration_sec = max(0, int(max_expiration_remaining.total_seconds()))
@ -210,11 +213,11 @@ class EphemeralBuilderManager(BaseManager):
payload = {
'expiration': calendar.timegm(new_expiration.timetuple()),
'builder_id': build_job_response.value['builder_id'],
'max_expiration': build_job_response.value['max_expiration'],
'builder_id': build_job_metadata['builder_id'],
'max_expiration': build_job_metadata['max_expiration'],
}
yield From(self._etcd_client.write(job_key, payload, ttl=ttl))
yield From(self._etcd_client.write(job_key, json.dumps(payload), ttl=ttl))
self.job_heartbeat_callback(build_job)