async _createSequentialRetriesForTestGroup()

in resources/perf.webkit.org/public/v3/models/test-group.js [381:408]


    async _createSequentialRetriesForTestGroup(repetitionLimit)
    {
        const lastItem = (array) => array[array.length - 1];
        const commitSets = this.requestedCommitSets();
        console.assert(commitSets.every((currentSet, index) =>
            !index || lastItem(this.requestsForCommitSet(commitSets[index - 1])).order() < this.requestsForCommitSet(currentSet)[0].order()));

        const allTestRequestsHaveFailedForSomeCommitSet = commitSets.some(commitSet =>
            this.requestsForCommitSet(commitSet).every(request => !request.isTest() || request.hasFailed()));

        if (allTestRequestsHaveFailedForSomeCommitSet)
            return {retryCount: 0, stopFutureRetries: true};

        for (const commitSet of commitSets) {
            if (this.successfulTestCount(commitSet) >= this.initialRepetitionCount())
                continue;

            const additionalRepetition = this.additionalRepetitionNeededToReachInitialRepetitionCount(commitSet);
            const retryCount = Math.min(Math.floor(repetitionLimit - this.repetitionCountForCommitSet(commitSet)), additionalRepetition);
            if (retryCount <= 0)
                continue;

            await this.addMoreBuildRequests(retryCount, commitSet);
            return {retryCount, stopFutureRetries: false};
        }

        return {retryCount: 0, stopFutureRetries: true};
    }