Exemplo n.º 1
0
class QueueGlobals(object):
    """Queue state objects along with disk serialization mechanisms for them."""

    def __init__(self, shelve):
        self.shelve          = shelve
        self.shelveLock      = threading.RLock() 
        self.idLock          = threading.RLock()
        self.taskQueue       = TaskQueue()
        self.confirmationMap = ConfirmationMap()
        if shelve.has_key("idCounter"):
            self.idCounter = shelve["idCounter"]
        else:
            self.idCounter = 0

        self.loadDiskTaskQueue()
        self.loadConfirmationMap()
        self.expireWorkerTaskThread = ExpireWorkerTaskThread(self.taskQueue)
        self.lastWorkerCheckin = datetime(1,1,1)

    def loadDiskTaskQueue(self):
        """Load task queue from disk using the shelve reserved for the queue."""

        if not self.shelve.has_key("taskQueue"):
            logging.info("Unable to read task queue from disk db, starting fresh")
            return

        logging.info("Reading task queue from disk")
        readTasks   = 0
        failedTasks = 0
        taskDicts = self.shelve["taskQueue"]
        for taskDict in taskDicts:
            try:
                task = modelManager.getModelFromTaskDict(taskDict)
            except model_manager.InvalidModelError, e:
                emailAddress = taskDict["emailAddress"]
                subject = config.lostTaskEmailSubject.generate(full_name=taskDict["modelFullName"], 
                        visibleId=taskDict["visibleId"])
                body = config.lostTaskEmailTemplate.generate()
                emailObject = Email(emailAddress, subject, body)
                logging.info("Invalid model-version pair, notifying %s", emailAddress)
                npsgd.email_manager.backgroundEmailSend(Email(emailAddress, subject, body))
                failedTasks += 1
                continue
            
            readTasks += 1
            self.taskQueue.putTask(task)

        logging.info("Read %s tasks, failed while reading %s tasks", readTasks, failedTasks)
Exemplo n.º 2
0
    def __init__(self, shelve):
        self.shelve          = shelve
        self.shelveLock      = threading.RLock() 
        self.idLock          = threading.RLock()
        self.taskQueue       = TaskQueue()
        self.confirmationMap = ConfirmationMap()
        if shelve.has_key("idCounter"):
            self.idCounter = shelve["idCounter"]
        else:
            self.idCounter = 0

        self.loadDiskTaskQueue()
        self.loadConfirmationMap()
        self.expireWorkerTaskThread = ExpireWorkerTaskThread(self.taskQueue)
        self.lastWorkerCheckin = datetime(1,1,1)