def txn(): """ lock in transaction to avoid races between Tasks """ entity = _FantasmTaskSemaphore.get_by_key_name(self.semaphoreKey) if entity: if entity.payload != payload: self.logger.critical("Run-once semaphore datastore payload read error.") return entity.payload
def __isFirstExecution(self, taskName, retryCount): """ Ensures that the task has not been executed before. Meant to be run in a transaction. """ firstExecution = False keyName = '%s--%s' % (taskName, retryCount) existingTaskName = _FantasmTaskSemaphore.get_by_key_name(keyName) if not existingTaskName: _FantasmTaskSemaphore(key_name=keyName).put() firstExecution = True return firstExecution
def txn(): """ lock in transaction to avoid races between Tasks """ entity = _FantasmTaskSemaphore.get_by_key_name(self.semaphoreKey) if not entity: _FantasmTaskSemaphore(key_name=self.semaphoreKey, payload=payload).put() memcache.set(self.semaphoreKey, payload) return (True, payload) else: if entity.payload != payload: self.logger.critical("Run-once semaphore datastore payload write error.") memcache.set(self.semaphoreKey, entity.payload) # maybe reduces chance of ejection??? return (False, entity.payload)