From 2fcd8df42baffcc78d2cd4a4160476b9afeee5e1 Mon Sep 17 00:00:00 2001 From: yackob03 Date: Fri, 18 Oct 2013 17:27:09 -0400 Subject: [PATCH] Get the worker and the registry playing nice together. --- data/queue.py | 5 ++++- endpoints/registry.py | 21 +++++++++++++++++++++ workers/diffsworker.py | 9 +++++---- 3 files changed, 30 insertions(+), 5 deletions(-) diff --git a/data/queue.py b/data/queue.py index 9ebf9c659..d69596306 100644 --- a/data/queue.py +++ b/data/queue.py @@ -52,4 +52,7 @@ class WorkQueue(object): return None def complete(self, completed_item): - item.delete_instance() + completed_item.delete_instance() + + +image_diff_queue = WorkQueue('imagediff') diff --git a/endpoints/registry.py b/endpoints/registry.py index 8bbb347d8..c7b22a487 100644 --- a/endpoints/registry.py +++ b/endpoints/registry.py @@ -7,6 +7,7 @@ from datetime import datetime from time import time import storage +from data.queue import image_diff_queue from app import app from auth.auth import process_auth, extract_namespace_repo_from_session @@ -142,6 +143,16 @@ def put_image_layer(namespace, repository, image_id): abort(400) # 'Checksum mismatch, ignoring the layer') # Checksum is ok, we remove the marker store.remove(mark_path) + + # The layer is ready for download, send a job to the work queue to + # process it. + logger.debug('Queing diffs job for image: %s' % image_id) + image_diff_queue.put(json.dumps({ + 'namespace': namespace, + 'repository': repository, + 'image_id': image_id, + })) + return make_response('true', 200) @@ -173,6 +184,16 @@ def put_image_checksum(namespace, repository, image_id): abort(400) # 'Checksum mismatch') # Checksum is ok, we remove the marker store.remove(mark_path) + + # The layer is ready for download, send a job to the work queue to + # process it. + logger.debug('Queing diffs job for image: %s' % image_id) + image_diff_queue.put(json.dumps({ + 'namespace': namespace, + 'repository': repository, + 'image_id': image_id, + })) + return make_response('true', 200) diff --git a/workers/diffsworker.py b/workers/diffsworker.py index 024aa0d89..84d595d30 100644 --- a/workers/diffsworker.py +++ b/workers/diffsworker.py @@ -5,14 +5,12 @@ import time from apscheduler.scheduler import Scheduler -from data.queue import WorkQueue +from data.queue import image_diff_queue from endpoints.registry import process_image_changes logger = logging.getLogger(__name__) -image_diff_queue = WorkQueue('imagediff') - def process_work_items(): logger.debug('Getting work item from queue.') @@ -23,8 +21,11 @@ def process_work_items(): logger.debug('Queue gave us some work: %s' % item.body) request = json.loads(item.body) - process_image_changes(request['namepspace'], request['repository'], + process_image_changes(request['namespace'], request['repository'], request['image_id']) + + image_diff_queue.complete(item) + else: logger.debug('No work today.')