VirtualBox

Changeset 65031 in vbox for trunk


Ignore:
Timestamp:
Dec 29, 2016 10:27:33 PM (8 years ago)
Author:
vboxsync
Message:

testmanager/schedulerbase.py: Fixed problem getting stuck doing nothing when a scheduling group is out of new builds to test.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/ValidationKit/testmanager/core/schedulerbase.py

    r62484 r65031  
    12911291
    12921292    @staticmethod
    1293     def _pickSchedGroup(oTestBoxDataEx, iWorkItem):
     1293    def _pickSchedGroup(oTestBoxDataEx, iWorkItem, dIgnoreSchedGroupIds):
    12941294        """
    12951295        Picks the next scheduling group for the given testbox.
     
    12971297        if len(oTestBoxDataEx.aoInSchedGroups) == 1:
    12981298            oSchedGroup = oTestBoxDataEx.aoInSchedGroups[0].oSchedGroup;
    1299             if oSchedGroup.fEnabled and oSchedGroup.idBuildSrc is not None:
     1299            if    oSchedGroup.fEnabled \
     1300              and oSchedGroup.idBuildSrc is not None \
     1301              and oSchedGroup.idSchedGroup not in dIgnoreSchedGroupIds:
    13001302                return (oSchedGroup, 0);
    13011303
     
    13301332
    13311333            # Pick the next one.
    1332             iWorkItem += 1;
    1333             if iWorkItem >= len(aoFlat):
    1334                 iWorkItem = 0;
    1335             if iWorkItem < len(aoFlat):
    1336                 return (aoFlat[iWorkItem], iWorkItem);
     1334            cLeft = len(aoFlat);
     1335            while cLeft > 0:
     1336                cLeft     -= 1;
     1337                iWorkItem += 1;
     1338                if iWorkItem >= len(aoFlat) or iWorkItem < 0:
     1339                    iWorkItem = 0;
     1340                if aoFlat[iWorkItem].idSchedGroup not in dIgnoreSchedGroupIds:
     1341                    return (aoFlat[iWorkItem], iWorkItem);
    13371342
    13381343        # No active group.
     
    13751380              and oTestBoxDataEx.idGenTestBox == oTestBoxData.idGenTestBox:
    13761381
    1377                 # Now, pick the scheduling group.
    1378                 (oSchedGroup, iWorkItem) = SchedulerBase._pickSchedGroup(oTestBoxDataEx, iWorkItem);
    1379                 if oSchedGroup is not None:
     1382                # We may have to skip scheduling groups that are out of work (e.g. 'No build').
     1383                dIgnoreSchedGroupIds = [];
     1384                while True:
     1385                    # Now, pick the scheduling group.
     1386                    (oSchedGroup, iWorkItem) = SchedulerBase._pickSchedGroup(oTestBoxDataEx, iWorkItem, dIgnoreSchedGroupIds);
     1387                    if oSchedGroup is None:
     1388                        break;
    13801389                    assert oSchedGroup.fEnabled and oSchedGroup.idBuildSrc is not None;
    13811390
    1382                     #
    13831391                    # Instantiate the specified scheduler and let it do the rest.
    1384                     #
    13851392                    oScheduler = SchedulerBase._instantiate(oDb, oSchedGroup, iVerbosity, tsSecStart);
    13861393                    dResponse = oScheduler.scheduleNewTaskWorker(oTestBoxDataEx, tsNow, sBaseUrl);
     
    13891396                        oDb.commit();
    13901397                        return dResponse;
     1398                    dIgnoreSchedGroupIds[oSchedGroup.idSchedGroup] = oSchedGroup;
    13911399        except:
    13921400            oDb.rollback();
Note: See TracChangeset for help on using the changeset viewer.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette