in libmozevent/phabricator.py [0:0]
def update_state(self, build):
"""
Check the visibility of the revision, by retrying N times with an exponential backoff time
This method is executed regularly by the client application to check on the status evolution
as the BMO daemon can take several minutes to update the status
"""
assert isinstance(build, PhabricatorBuild)
# Only when queued
if build.state != PhabricatorBuildState.Queued:
return
# Check this build has some retries left
retries_left, last_try = self.retries[build.target_phid]
if retries_left <= 0:
return
# Check this build has been awaited between tries
exp_backoff = (2 ** (self.max_retries - retries_left)) * self.sleep
now = time.time()
if last_try is not None and now - last_try < exp_backoff:
return
# Now we can check if this revision is public
retries_left -= 1
self.retries[build.target_phid] = (retries_left, now)
logger.info(
"Checking visibility status", build=str(build), retries_left=retries_left
)
if self.is_visible(build):
build.state = PhabricatorBuildState.Public
build.revision_url = self.build_revision_url(build)
logger.info("Revision is public", build=str(build))
# Check if the build has not expired
if self.is_expired_build(build):
build.state = PhabricatorBuildState.Expired
logger.info("Revision has expired", build=str(build))
elif retries_left <= 0:
# Mark as secured when no retries are left
build.state = PhabricatorBuildState.Secured
logger.info("Revision is marked as secure", build=str(build))
else:
# Enqueue back to retry later
build.state = PhabricatorBuildState.Queued