Ticket #296: idleScheduler-v2.diff

File idleScheduler-v2.diff, 5.1 KB (added by bhearsum, 5 years ago)

idle scheduler

  • buildbot/scheduler.py

    ? build
    ? buildbot.egg-info
    RCS file: /cvsroot/buildbot/buildbot/buildbot/scheduler.py,v
    retrieving revision 1.33
    diff -u -r1.33 scheduler.py
     
    372372        self.submitBuildSet(bs) 
    373373 
    374374 
     375class Idle(Periodic): 
     376    def addChange(self, c): 
     377        if c.branch == self.branch: 
     378            self.timer.stopService() 
     379            self.timer.startService() 
     380 
    375381 
    376382class Nightly(BaseUpstreamScheduler): 
    377383    """Imitate 'cron' scheduling. This can be used to schedule a nightly 
  • buildbot/test/test_scheduler.py

    RCS file: /cvsroot/buildbot/buildbot/buildbot/test/test_scheduler.py,v
    retrieving revision 1.12
    diff -u -r1.12 test_scheduler.py
     
    2121            self.d = None 
    2222        return pb.Referenceable() # makes the cleanup work correctly 
    2323 
     24    def getSetsForBuilder(self, builderName): 
     25        return [set for set in self.sets if builderName in set.builderNames] 
     26 
    2427class Scheduling(unittest.TestCase): 
    2528    def setUp(self): 
    2629        self.master = master = FakeMaster() 
     
    4649        self.failUnlessEqual(s1.builderNames, ["a","b"]) 
    4750        self.failUnlessEqual(s1.reason, "The Periodic scheduler named 'quickly' triggered this build") 
    4851 
     52    # Two builders on different branches, we'll add a change for one to make 
     53    # sure it resets its timer properly, and that the other one doesn't 
     54    # Timeline is like this: 
     55    # (second) : (event) : (function) : (builds running at start of function) 
     56    # 0 : Builds - a,b             : testIdle1      : <none> 
     57    # 1 : <nothing>                : <none>         : <n/a> 
     58    # 2 : addChange - a, Build - a : testIdle1_1    : a: 1, b: 1 
     59    # 3 : <nothing>                : testIdle1_2    : a: 2, b: 1 
     60    # 4 : Build - b                : <none>         : <n/a> 
     61    # 5 : <nothing>                : testIdle1_3    : a: 2, b: 2 
     62    # 6 : Build - a                : <none>         : <n/a> 
     63    # 7 : <nothing>                : testIdle1_4    : a: 3, b: 2 
     64    def testIdle1(self): 
     65        idle = scheduler.Idle("quick", "a", "a", 4) 
     66        idle2 = scheduler.Idle("quick2", "b", "b", 4) 
     67        normal = scheduler.Scheduler("normal", "a", 0, ["0"]) 
     68        self.addScheduler(idle) 
     69        self.addScheduler(idle2) 
     70        self.addScheduler(normal) 
     71        d = defer.Deferred() 
     72        reactor.callLater(2, d.callback, None) 
     73        d.addCallback(self._testIdle1_1, [idle, idle2, normal]) 
     74        return d 
     75 
     76    def _testIdle1_1(self, res, schedulers): 
     77        self.failUnless(len(self.master.getSetsForBuilder('a')) == 1) 
     78        self.failUnless(len(self.master.getSetsForBuilder('b')) == 1) 
     79        c = Change('me', ['foo', 'bar'], 'blah', branch='a') 
     80        for s in schedulers: 
     81            s.addChange(c) 
     82        d = defer.Deferred() 
     83        reactor.callLater(1, d.callback, None) 
     84        d.addCallback(self._testIdle1_2) 
     85        return d 
     86 
     87    def _testIdle1_2(self, res): 
     88        self.failUnless(len(self.master.getSetsForBuilder('a')) == 2) 
     89        self.failUnless(len(self.master.getSetsForBuilder('b')) == 1) 
     90        d = defer.Deferred() 
     91        reactor.callLater(2, d.callback, None) 
     92        d.addCallback(self._testIdle1_3) 
     93        return d 
     94 
     95    def _testIdle1_3(self, res): 
     96        self.failUnless(len(self.master.getSetsForBuilder('a')) == 2) 
     97        self.failUnless(len(self.master.getSetsForBuilder('b')) == 2) 
     98        d = defer.Deferred() 
     99        reactor.callLater(2, d.callback, None) 
     100        d.addCallback(self._testIdle1_4) 
     101        return d 
     102 
     103    def _testIdle1_4(self, res): 
     104        self.failUnless(len(self.master.getSetsForBuilder('a')) == 3) 
     105        self.failUnless(len(self.master.getSetsForBuilder('b')) == 2) 
     106 
    49107    def testNightly(self): 
    50108        # now == 15-Nov-2005, 00:05:36 AM . By using mktime, this is 
    51109        # converted into the local timezone, which happens to match what 
  • docs/buildbot.texinfo

    RCS file: /cvsroot/buildbot/buildbot/docs/buildbot.texinfo,v
    retrieving revision 1.150
    diff -u -r1.150 buildbot.texinfo
     
    22342234* AnyBranchScheduler::           
    22352235* Dependent Scheduler::           
    22362236* Periodic Scheduler::           
     2237* Idle Scheduler:: 
    22372238* Nightly Scheduler::           
    22382239* Try Schedulers::           
    22392240* Triggerable Scheduler::           
     
    24382439could easily wind up a ``daily'' or ``every afternoon'' scheduler 
    24392440depending upon when it was first activated. 
    24402441 
     2442@node Idle Scheduler 
     2443@subsection Idle Scheduler 
     2444@slindex buildbot.scheduler.Idle 
     2445 
     2446This scheduler works exactly like a Peridioc one, but its timer gets reset 
     2447when a change comes in. 
     2448 
    24412449@node Nightly Scheduler 
    24422450@subsection Nightly Scheduler 
    24432451@slindex buildbot.scheduler.Nightly