def determine_revlist(repo_url, buildername, rev, back_revisions, delta, from_rev, backfill, skips, max_revisions): """Determine which revisions we need to trigger.""" if back_revisions: revlist = query_revisions_range_from_revision_before_and_after( repo_url=repo_url, revision=rev, before=back_revisions, after=0) elif delta: revlist = query_revisions_range_from_revision_before_and_after( repo_url=repo_url, revision=rev, before=delta, after=delta) elif from_rev: revlist = query_revisions_range(repo_url, to_revision=rev, from_revision=from_rev) elif backfill: revlist = find_backfill_revlist( buildername=buildername, revision=rev, max_revisions=max_revisions, ) else: revlist = [rev] if skips: revlist = revlist[::skips] return revlist
def on_event(data, message, dry_run): """Automatically backfill failed jobs.""" # Cleaning mozci caches buildjson.BUILDS_CACHE = {} query_jobs.JOBS_CACHE = {} payload = data["payload"] status = payload["status"] buildername = payload["buildername"] # Backfill a failed job if status in [FAILURE, WARNING]: buildername = filter_invalid_builders(buildername) # Treeherder can send us invalid builder names # https://bugzilla.mozilla.org/show_bug.cgi?id=1242038 if buildername is None: if not dry_run: # We need to ack the message to remove it from our queue message.ack() return revision = payload["revision"] LOG.info("**") # visual separator LOG.info("Failed job found at revision %s. Buildername: %s", revision, buildername) try: # We want to ensure 1 appearance of the job on every revision revlist = find_backfill_revlist( revision=revision, max_revisions=get_maxRevisions(buildername), buildername=buildername) trigger_range( buildername=buildername, revisions=revlist[1:], times=1, dry_run=dry_run, trigger_build_if_missing=False ) if not dry_run: # We need to ack the message to remove it from our queue message.ack() except ConnectionError: # The message has not been acked so we will try again LOG.warning("Connection error. Trying again") except PushlogError, e: # Unable to retrieve pushlog data. Please check repo_url and revision specified. LOG.warning(str(e)) except Exception, e: # The message has not been acked so we will try again LOG.warning(str(e)) raise
def on_event(data, message, dry_run, acknowledge): """Automatically backfill failed jobs.""" # Cleaning mozci caches buildjson.BUILDS_CACHE = {} query_jobs.JOBS_CACHE = {} payload = data["payload"] status = payload["status"] buildername = payload["buildername"] # Backfill a failed job if status in [FAILURE, WARNING]: buildername = filter_invalid_builders(buildername) # Treeherder can send us invalid builder names # https://bugzilla.mozilla.org/show_bug.cgi?id=1242038 if buildername is None: if acknowledge: # We need to ack the message to remove it from our queue message.ack() return revision = payload["revision"] LOG.info("**") # visual separator LOG.info("Failed job found at revision %s. Buildername: %s", revision, buildername) try: # We want to ensure 1 appearance of the job on every revision revlist = find_backfill_revlist(buildername=buildername, revision=revision) trigger_range(buildername=buildername, revisions=revlist[1:], times=1, dry_run=dry_run, trigger_build_if_missing=False) if acknowledge: # We need to ack the message to remove it from our queue message.ack() except ConnectionError: # The message has not been acked so we will try again LOG.warning("Connection error. Trying again") except PushlogError, e: # Unable to retrieve pushlog data. Please check repo_url and revision specified. LOG.warning(str(e)) except Exception, e: # The message has not been acked so we will try again LOG.warning(str(e)) raise
def on_event(data, message, dry_run): """Automatically backfill failed jobs.""" # We need to ack the message to remove it from our queue message.ack() # Cleaning mozci caches buildjson.BUILDS_CACHE = {} query_jobs.JOBS_CACHE = {} payload = data["payload"] status = payload["status"] buildername = payload["buildername"] # Backfill a failed job if status in [FAILURE, WARNING]: revision = payload["revision"] LOG.info("**") # visual separator LOG.info("Failed job found at revision %s. Buildername: %s", revision, buildername) # We want to assure 1 appearance of the job on each of the revisions repo_url = query_repo_url_from_buildername(buildername) revlist = find_backfill_revlist( repo_url=repo_url, revision=revision, max_revisions=MAX_REVISIONS, buildername=buildername) trigger_range( buildername=buildername, revisions=revlist[1:], times=1, dry_run=dry_run, trigger_build_if_missing=False ) else: # TODO: change this to debug after a testing period LOG.info("'%s' with status %i. Nothing to be done.", buildername, status)
def determine_revlist(repo_url, buildername, rev, back_revisions, delta, from_rev, backfill, skips, max_revisions): """Determine which revisions we need to trigger.""" if back_revisions: revlist = query_pushes_by_specified_revision_range( repo_url=repo_url, revision=rev, before=back_revisions, after=0, return_revision_list=True) elif delta: revlist = query_pushes_by_specified_revision_range( repo_url=repo_url, revision=rev, before=delta, after=delta, return_revision_list=True) elif from_rev: revlist = query_pushes_by_revision_range( repo_url=repo_url, to_revision=rev, from_revision=from_rev, return_revision_list=True) elif backfill: revlist = find_backfill_revlist( buildername=buildername, revision=rev, max_pushes=max_revisions, ) else: revlist = [rev] if skips: revlist = revlist[::skips] return revlist
def determine_revlist(repo_url, buildername, rev, back_revisions, delta, from_rev, backfill, skips, max_revisions): """Determine which revisions we need to trigger.""" if back_revisions: revlist = query_revisions_range_from_revision_before_and_after( repo_url=repo_url, revision=rev, before=back_revisions, after=0) elif delta: revlist = query_revisions_range_from_revision_before_and_after( repo_url=repo_url, revision=rev, before=delta, after=delta) elif from_rev: revlist = query_revisions_range( repo_url, to_revision=rev, from_revision=from_rev) elif backfill: revlist = find_backfill_revlist( repo_url=repo_url, revision=rev, max_revisions=max_revisions, buildername=buildername) else: revlist = [rev] if skips: revlist = revlist[::skips] return revlist