blob: ebe14942aa89fcf1d01da5901be85d4669af7bfc [file] [log] [blame]
# Copyright (C) 2014 Apple Inc. All rights reserved.
#
# Redistribution and use in source and binary forms, with or without modification, are
# permitted provided that the following conditions are met:
#
# 1. Redistributions of source code must retain the above copyright notice, this list of
# conditions and the following disclaimer.
#
# 2. Redistributions in binary form must reproduce the above copyright notice, this list
# of conditions and the following disclaimer in the documentation and/or other materials
# provided with the distribution.
#
# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
# APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
# TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
from google.appengine.ext import webapp, db
from google.appengine.ext.webapp import template
from config.queues import work_item_lock_timeout
from handlers.updatebase import UpdateBase
from model.queues import Queue
class ReleaseLock(UpdateBase):
def get(self):
self.response.out.write(template.render("templates/releaselock.html", {"timeout": work_item_lock_timeout}))
def post(self):
queue_name = self.request.get("queue_name")
# FIXME: This queue lookup should be shared between handlers.
queue = Queue.queue_with_name(queue_name)
if not queue:
self.error(404)
return
attachment_id = self._int_from_request("attachment_id")
queue.active_work_items().expire_item(attachment_id)
# ReleaseLock is used when a queue neither succeeded nor failed, so it silently releases the patch.
# Let's try other patches before retrying this one, in the interest of fairness, and also because
# another patch could be posted to address queue problems.
queue.work_items().move_to_end(attachment_id)