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