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)
def txn(): """ lock in transaction to avoid races between Tasks """ key = db.Key.from_path(_FantasmTaskSemaphore.kind(), self.semaphoreKey, namespace='') entity = db.get(key) if not entity: _FantasmTaskSemaphore(key=key, payload=payload).put() memcache.set(self.semaphoreKey, payload, namespace=None) self.logger.debug('Setting run-once semaphore. Semaphore key: "%s", payload: "%s".', self.semaphoreKey, payload) return (True, payload) else: if entity.payload != payload: self.logger.critical("Run-once semaphore datastore payload write error. Semaphore key: '%s', actual payload: '%s', expected payload: '%s'.", self.semaphoreKey, entity.payload, payload) memcache.set(self.semaphoreKey, entity.payload, namespace=None) # maybe reduces chance of ejection??? return (False, entity.payload)
def txn(): """ lock in transaction to avoid races between Tasks """ key = db.Key.from_path(_FantasmTaskSemaphore.kind(), self.semaphoreKey, namespace='') entity = db.get(key) if not entity: _FantasmTaskSemaphore(key=key, payload=payload).put() memcache.set(self.semaphoreKey, payload, namespace=None) self.logger.debug( 'Setting run-once semaphore. Semaphore key: "%s", payload: "%s".', self.semaphoreKey, payload) return (True, payload) else: if entity.payload != payload: self.logger.critical( "Run-once semaphore datastore payload write error. Semaphore key: '%s', actual payload: '%s', expected payload: '%s'.", self.semaphoreKey, entity.payload, payload) memcache.set( self.semaphoreKey, entity.payload, namespace=None) # maybe reduces chance of ejection??? return (False, entity.payload)