def on_idle(self): """ On idle, we have 4 cases: 1. We have to commit and also need to merge some commits from remote. In this case, we commit and announce ourself for merging 2. We are behind from remote, so we announce for merging 3. We only need to commit 4. We announced for merging and nobody is writing in this momement. In this case we are safe to merge and push. """ if not syncing.is_set(): log.debug("Set syncing event (%d pending writes)", writers.value) syncing.set() else: log.debug("Idling (%d pending writes)", writers.value) if writers.value == 0: if self.commits: log.info("Get some commits") self.commit(self.commits) self.commits = [] count = 0 log.debug("Start syncing") while not self.sync(): if count < 5: count += 1 fuzz = random.randint(0, 1000) / 1000 wait = 2 ** count + fuzz log.debug("Failed. Going to sleep for %d seconds", wait) time.sleep(wait) log.debug("Retry-ing")
def on_idle(self): """ On idle, we have 4 cases: 1. We have to commit and also need to merge some commits from remote. In this case, we commit and announce ourself for merging 2. We are behind from remote, so we announce for merging 3. We only need to commit 4. We announced for merging and nobody is writing in this momement. In this case we are safe to merge and push. """ if not syncing.is_set(): log.debug("Set syncing event (%d pending writes)", writers.value) syncing.set() else: log.debug("Idling (%d pending writes)", writers.value) if writers.value == 0: if self.commits: log.info("Get some commits") self.commit(self.commits) self.commits = [] count = 0 log.debug("Start syncing") while not self.sync(): if count < 5: count += 1 fuzz = random.randint(0, 1000) / 1000 wait = 2**count + fuzz log.debug("Failed. Going to sleep for %d seconds", wait) time.sleep(wait) log.debug("Retry-ing")
def decorated(*args, **kwargs): if not fetch_successful.is_set() or not push_successful.is_set(): raise FuseOSError(EROFS) global writers writers += 1 if syncing.is_set(): log.debug("WriteOperation: Wait until syncing is done") sync_done.wait() try: result = f(*args, **kwargs) finally: writers -= 1 return result
def on_idle(self): """ On idle, we have 4 cases: 1. We have to commit and also need to merge some commits from remote. In this case, we commit and announce ourself for merging 2. We are behind from remote, so we announce for merging 3. We only need to commit 4. We announced for merging and nobody is writing in this momement. In this case we are safe to merge and push. """ if not syncing.is_set(): log.debug("Set syncing event (%d pending writes)", writers.value) syncing.set() else: log.debug("Idling (%d pending writes)", writers.value) if writers.value == 0: if self.commits: log.info("Get some commits") self.commit(self.commits) self.commits = [] log.debug("Start syncing") self.sync()