Ejemplo n.º 1
0
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
Ejemplo n.º 2
0
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
Ejemplo n.º 4
0
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)
Ejemplo n.º 5
0
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
Ejemplo n.º 6
0
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
Ejemplo n.º 7
0
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