[Libreoffice-commits] buildbot.git: 7 commits - tb3/dist-packages tb3/tb3 tb3/tests
Bjoern Michaelsen
bjoern.michaelsen at canonical.com
Fri Jul 26 15:05:53 PDT 2013
tb3/dist-packages/tb3/repostate.py | 2 -
tb3/dist-packages/tb3/scheduler.py | 19 ++++++----
tb3/tb3 | 7 ++-
tb3/tests/tb3/repostate.py | 14 +++++++
tb3/tests/tb3/scheduler.py | 68 +++++++++++++++++++++++++++++++------
5 files changed, 88 insertions(+), 22 deletions(-)
New commits:
commit 0aea4f950ef89ee77c47fb17ac3c9d026daefdc3
Author: Bjoern Michaelsen <bjoern.michaelsen at canonical.com>
Date: Fri Jul 26 23:44:34 2013 +0200
tweaking the scoring
diff --git a/tb3/dist-packages/tb3/scheduler.py b/tb3/dist-packages/tb3/scheduler.py
index 474eecd..c2164ba 100644
--- a/tb3/dist-packages/tb3/scheduler.py
+++ b/tb3/dist-packages/tb3/scheduler.py
@@ -39,21 +39,25 @@ class Scheduler:
if len(commit) == 40:
commits.append( (len(commits), commit, self.repohistory.get_commit_state(commit)) )
return commits
- def norm_results(self, proposals):
+ def norm_results(self, proposals, offset):
maxscore = 0
#maxscore = functools.reduce( lambda x,y: max(x.score, y.score), proposals)
for proposal in proposals:
maxscore = max(maxscore, proposal.score)
+ multiplier = (len(proposals) + offset) / maxscore
if maxscore > 0:
for proposal in proposals:
- proposal.score = proposal.score / maxscore * len(proposals)
+ proposal.score = proposal.score * multiplier
def dampen_running_commits(self, commits, proposals, time):
+ reduce_all = 0
for commit in commits:
if commit[2].state == 'RUNNING':
running_time = max(datetime.timedelta(), time - commit[2].started)
timedistance = running_time.total_seconds() / commit[2].estimated_duration.total_seconds()
for idx in range(len(proposals)):
- proposals[idx].score *= 1-1/((commit[0]-idx+timedistance)**2+1)
+ proposals[idx].score *= 1-1/((abs(commit[0]-idx)+timedistance)**2+1)
+ reduce_all -= math.exp(-(timedistance**2))
+ return reduce_all
def get_proposals(self, time):
return [(0, None, self.__class__.__name__)]
@@ -62,14 +66,15 @@ class HeadScheduler(Scheduler):
head = self.repostate.get_head()
last_build = self.repostate.get_last_build()
proposals = []
+ reduce_all = 0
if not last_build is None:
commits = self.get_commits(last_build, head)
for commit in commits:
proposals.append(self.make_proposal(1-1/((len(commits)-float(commit[0]))**2+1), commit[1]))
- self.dampen_running_commits(commits, proposals, time)
+ reduce_all = self.dampen_running_commits(commits, proposals, time)
else:
proposals.append(self.make_proposal(float(1), head))
- self.norm_results(proposals)
+ self.norm_results(proposals, reduce_all)
return proposals
class BisectScheduler(Scheduler):
@@ -86,8 +91,8 @@ class BisectScheduler(Scheduler):
proposals.append(self.make_proposal(1.0, commit[1]))
for idx in range(len(proposals)):
proposals[idx].score *= (1-1/(float(idx)**2+1)) * (1-1/((float(idx-len(proposals)))**2+1))
- self.dampen_running_commits(commits, proposals, time)
- self.norm_results(proposals)
+ reduce_all = self.dampen_running_commits(commits, proposals, time)
+ self.norm_results(proposals, reduce_all)
return proposals
class MergeScheduler(Scheduler):
diff --git a/tb3/tests/tb3/scheduler.py b/tb3/tests/tb3/scheduler.py
index 17870c6..bf0e328 100755
--- a/tb3/tests/tb3/scheduler.py
+++ b/tb3/tests/tb3/scheduler.py
@@ -21,6 +21,14 @@ import tb3.repostate
class TestScheduler(unittest.TestCase):
def __resolve_ref(self, refname):
return self.git('show-ref', refname).split(' ')[0]
+ def _show_log(self, commit):
+ for line in self.git("log", "--pretty=oneline", commit):
+ sys.stdout.write(line)
+ print
+ def _show_proposals(self, proposals):
+ for proposal in proposals:
+ sys.stdout.write("%f %s" %(proposal.score, self.git("log", "-1", "--pretty=oneline", proposal.commit)))
+ print
def setUp(self):
(self.testdir, self.git) = helpers.createTestRepo()
self.state = tb3.repostate.RepoState('linux', 'master', self.testdir)
@@ -36,30 +44,70 @@ class TestScheduler(unittest.TestCase):
sh.rm('-r', self.testdir)
class TestHeadScheduler(TestScheduler):
- def test_get_proposals(self):
+ def test_with_running(self):
+ #self._show_log(self.head)
self.scheduler = tb3.scheduler.HeadScheduler('linux', 'master', self.testdir)
self.state.set_last_good(self.preb1)
proposals = self.scheduler.get_proposals(datetime.datetime.now())
self.assertEqual(len(proposals), 9)
+ proposals = sorted(proposals, key = lambda proposal: -proposal.score)
+ #self._show_proposals(proposals)
best_proposal = proposals[0]
- for proposal in proposals:
- if proposal.score > best_proposal.score:
- best_proposal = proposal
- self.assertEqual(proposal.scheduler, 'HeadScheduler')
+ self.assertEqual(best_proposal.scheduler, 'HeadScheduler')
self.assertEqual(best_proposal.commit, self.head)
self.assertEqual(best_proposal.score, 9)
+ for idx in range(len(proposals)-1):
+ self.assertEqual(self.git('merge-base', '--is-ancestor', proposals[idx+1].commit, proposals[idx].commit, _ok_code=[0,1]).exit_code, 0)
self.updater.set_scheduled(self.head, 'box', datetime.timedelta(hours=2))
proposals = self.scheduler.get_proposals(datetime.datetime.now())
self.assertEqual(len(proposals), 9)
- proposal = proposals[0]
+ #self._show_proposals(proposals)
+ proposals = sorted(proposals, key = lambda proposal: -proposal.score)
best_proposal = proposals[0]
- for proposal in proposals:
- if proposal.score > best_proposal.score:
- best_proposal = proposal
- self.assertEqual(proposal.scheduler, 'HeadScheduler')
+ self.assertEqual(best_proposal.scheduler, 'HeadScheduler')
+ precommits = self.scheduler.count_commits(self.preb1, best_proposal.commit)
+ postcommits = self.scheduler.count_commits(best_proposal.commit, self.head)
+ self.assertLessEqual(abs(precommits-postcommits),1)
+ self.updater.set_scheduled(best_proposal.commit, 'box', datetime.timedelta(hours=2))
+ last_proposal = best_proposal
+ proposals = self.scheduler.get_proposals(datetime.datetime.now())
+ self.assertEqual(len(proposals), 9)
+ #self._show_proposals(proposals)
+ proposals = sorted(proposals, key = lambda proposal: -proposal.score)
+ best_proposal = proposals[0]
+ self.assertEqual(best_proposal.scheduler, 'HeadScheduler')
+ def test_with_should_have_finished(self):
+ #self._show_log(self.head)
+ self.scheduler = tb3.scheduler.HeadScheduler('linux', 'master', self.testdir)
+ self.state.set_last_good(self.preb1)
+ proposals = self.scheduler.get_proposals(datetime.datetime.now())
+ self.assertEqual(len(proposals), 9)
+ proposals = sorted(proposals, key = lambda proposal: -proposal.score)
+ #self._show_proposals(proposals)
+ best_proposal = proposals[0]
+ self.assertEqual(best_proposal.scheduler, 'HeadScheduler')
+ self.assertEqual(best_proposal.commit, self.head)
+ self.assertEqual(best_proposal.score, 9)
+ for idx in range(len(proposals)-1):
+ self.assertEqual(self.git('merge-base', '--is-ancestor', proposals[idx+1].commit, proposals[idx].commit, _ok_code=[0,1]).exit_code, 0)
+ self.updater.set_scheduled(self.head, 'box', datetime.timedelta(hours=4))
+ proposals = self.scheduler.get_proposals(datetime.datetime.now()+datetime.timedelta(hours=2))
+ self.assertEqual(len(proposals), 9)
+ #self._show_proposals(proposals)
+ proposals = sorted(proposals, key = lambda proposal: -proposal.score)
+ best_proposal = proposals[0]
+ self.assertEqual(best_proposal.scheduler, 'HeadScheduler')
precommits = self.scheduler.count_commits(self.preb1, best_proposal.commit)
postcommits = self.scheduler.count_commits(best_proposal.commit, self.head)
self.assertLessEqual(abs(precommits-postcommits),1)
+ self.updater.set_scheduled(best_proposal.commit, 'box', datetime.timedelta(hours=4))
+ last_proposal = best_proposal
+ proposals = self.scheduler.get_proposals(datetime.datetime.now()+datetime.timedelta(hours=2))
+ self.assertEqual(len(proposals), 9)
+ #self._show_proposals(proposals)
+ proposals = sorted(proposals, key = lambda proposal: -proposal.score)
+ best_proposal = proposals[0]
+ self.assertEqual(best_proposal.scheduler, 'HeadScheduler')
class TestBisectScheduler(TestScheduler):
def test_get_proposals(self):
commit 0f9f3bedf75acb6e7ffdcbf87b85cb5bbb8f150f
Author: Bjoern Michaelsen <bjoern.michaelsen at canonical.com>
Date: Fri Jul 26 19:46:45 2013 +0200
test time storage too
diff --git a/tb3/tests/tb3/repostate.py b/tb3/tests/tb3/repostate.py
index c40c60c..436c3f3 100755
--- a/tb3/tests/tb3/repostate.py
+++ b/tb3/tests/tb3/repostate.py
@@ -70,6 +70,13 @@ class TestRepoHistory(unittest.TestCase):
self.history.set_commit_state(self.head, commitstate)
commitstate = self.history.get_commit_state(self.head)
self.assertEqual(commitstate.estimated_duration, datetime.timedelta(hours=3, minutes=14))
+ def test_times(self):
+ now = datetime.datetime.now()
+ commitstate = tb3.repostate.CommitState(started=now, finished=now)
+ self.history.set_commit_state(self.head, commitstate)
+ commitstate = self.history.get_commit_state(self.head)
+ self.assertEqual(commitstate.started, now)
+ self.assertEqual(commitstate.finished, now)
class TestRepoUpdater(unittest.TestCase):
def __resolve_ref(self, refname):
commit aa78bf36c75d2002b61d6a4d6e046a07cdf56b09
Author: Bjoern Michaelsen <bjoern.michaelsen at canonical.com>
Date: Fri Jul 26 19:31:23 2013 +0200
test duration store
diff --git a/tb3/tests/tb3/repostate.py b/tb3/tests/tb3/repostate.py
index f69c372..c40c60c 100755
--- a/tb3/tests/tb3/repostate.py
+++ b/tb3/tests/tb3/repostate.py
@@ -65,7 +65,12 @@ class TestRepoHistory(unittest.TestCase):
self.assertEqual(self.history.get_commit_state(self.head), commitstate)
with self.assertRaises(AttributeError):
self.history.set_commit_state(self.head, tb3.repostate.CommitState('foo!'))
-
+ def test_duration(self):
+ commitstate = tb3.repostate.CommitState(estimated_duration=datetime.timedelta(hours=3, minutes=14))
+ self.history.set_commit_state(self.head, commitstate)
+ commitstate = self.history.get_commit_state(self.head)
+ self.assertEqual(commitstate.estimated_duration, datetime.timedelta(hours=3, minutes=14))
+
class TestRepoUpdater(unittest.TestCase):
def __resolve_ref(self, refname):
return self.git('show-ref', refname).split(' ')[0]
commit 80c0ea235f2d6130b98ce4fff7e7e7d602df8fd1
Author: Bjoern Michaelsen <bjoern.michaelsen at canonical.com>
Date: Fri Jul 26 19:12:35 2013 +0200
fix timing
diff --git a/tb3/dist-packages/tb3/repostate.py b/tb3/dist-packages/tb3/repostate.py
index dd4e877..aee3061 100644
--- a/tb3/dist-packages/tb3/repostate.py
+++ b/tb3/dist-packages/tb3/repostate.py
@@ -27,7 +27,7 @@ class StateDecoder(json.JSONDecoder):
if value[0] == '__datetime__':
obj[key] = datetime.datetime.utcfromtimestamp(value[1])
elif value[0] == '__timedelta__':
- obj[key] = datetime.timedelta(float(value[1]))
+ obj[key] = datetime.timedelta(0, float(value[1]))
return obj
class RepoState:
commit 801ba10d0c4dc3aa30d4edf8787291dfed9965a0
Author: Bjoern Michaelsen <bjoern.michaelsen at canonical.com>
Date: Thu Jul 25 22:31:02 2013 +0200
handle tb3-show-history command name
diff --git a/tb3/tb3 b/tb3/tb3
index 9ad22a6..10ccf6f 100755
--- a/tb3/tb3
+++ b/tb3/tb3
@@ -134,6 +134,7 @@ if __name__ == '__main__':
if not fullcommand:
args['sync'] = commandname == 'tb3-sync'
args['show_proposals'] = commandname == 'tb3-show-proposals'
+ args['show_history'] = commandname == 'tb3-show-history'
args['show_state'] = commandname == 'tb3-show-state'
execute(args)
commit d21f797943805467a7151bfb3a0063ceb13738f5
Author: Bjoern Michaelsen <bjoern.michaelsen at canonical.com>
Date: Thu Jul 25 22:21:44 2013 +0200
fix proposal printer
diff --git a/tb3/tb3 b/tb3/tb3
index cabd1cd..9ad22a6 100755
--- a/tb3/tb3
+++ b/tb3/tb3
@@ -60,7 +60,7 @@ def show_proposals(parms):
print('')
print('Proposals:')
for proposal in proposals:
- print(proposals)
+ print(proposal)
else:
print(json.dumps([p.__dict__ for p in proposals]))
commit 7cfeccc863df394aceb7bb92b4d97cdabf032d63
Author: Bjoern Michaelsen <bjoern.michaelsen at canonical.com>
Date: Thu Jul 25 22:20:59 2013 +0200
check for existance of key
diff --git a/tb3/tb3 b/tb3/tb3
index 52df868..cabd1cd 100755
--- a/tb3/tb3
+++ b/tb3/tb3
@@ -40,12 +40,12 @@ def set_commit_running(parms):
get_updater(parms).set_scheduled(parms['set_commit_running'], parms['builder'], parms['estimated_duration'])
def show_state(parms):
- if parms['format'] == 'json':
+ if parms.has_key('format') and parms['format'] == 'json':
raise NotImplementedError
print(get_repostate(parms))
def show_history(parms):
- if parms['format'] == 'json':
+ if parms.has_key('format') and parms['format'] == 'json':
raise NotImplementedError
history = tb3.repostate.RepoHistory(parms['platform'], parms['repo'])
for (commit, state) in history.get_recent_commit_states(parms['branch'], parms['history_count']):
More information about the Libreoffice-commits
mailing list