Fix sql reporting start/end times

* Always send a build start event for noop jobs so that we get
  start and end times for them
* Handle builds without start or end times in the sql reporter.
  These should no longer include noop builds, but may still include
  SKIPPED builds.

Test both.

Change-Id: I73eb6bda482ebb515d231492c0769d49cf6ff28a
This commit is contained in:
James E. Blair
2017-09-28 17:10:25 -07:00
parent c8a0f94ac2
commit 66e0413803
5 changed files with 30 additions and 9 deletions

View File

@@ -0,0 +1,2 @@
- hosts: all
tasks: []

View File

@@ -27,6 +27,9 @@
- job:
name: project-test2
- job:
name: project-test3
- project:
name: org/project
check:
@@ -36,3 +39,9 @@
dependencies: project-merge
- project-test2:
dependencies: project-merge
# Make sure we have a "SKIPPED" result
- project-test3:
dependencies: project-test1
# The noop job can have timing quirks
- noop:
dependencies: project-test2

View File

@@ -74,6 +74,7 @@ class TestSQLConnection(ZuulDBTestCase):
def test_sql_results(self):
"Test results are entered into an sql table"
self.executor_server.hold_jobs_in_build = True
# Grab the sa tables
tenant = self.sched.abide.tenants.get('tenant-one')
reporter = _get_reporter_from_connection_name(
@@ -85,6 +86,8 @@ class TestSQLConnection(ZuulDBTestCase):
A = self.fake_gerrit.addFakeChange('org/project', 'master', 'A')
self.fake_gerrit.addEvent(A.getPatchsetCreatedEvent(1))
self.waitUntilSettled()
self.orderedRelease()
self.waitUntilSettled()
# Add a failed result
B = self.fake_gerrit.addFakeChange('org/project', 'master', 'B')
@@ -92,6 +95,8 @@ class TestSQLConnection(ZuulDBTestCase):
self.executor_server.failJob('project-test1', B)
self.fake_gerrit.addEvent(B.getPatchsetCreatedEvent(1))
self.waitUntilSettled()
self.orderedRelease()
self.waitUntilSettled()
conn = self.connections.connections['resultsdb'].engine.connect()
result = conn.execute(
@@ -141,15 +146,15 @@ class TestSQLConnection(ZuulDBTestCase):
)
).fetchall()
# Check the second last result, which should be the project-test1 job
# Check the second result, which should be the project-test1 job
# which failed
self.assertEqual('project-test1', buildset1_builds[-2]['job_name'])
self.assertEqual("FAILURE", buildset1_builds[-2]['result'])
self.assertEqual('project-test1', buildset1_builds[1]['job_name'])
self.assertEqual("FAILURE", buildset1_builds[1]['result'])
self.assertEqual(
'finger://{hostname}/{uuid}'.format(
hostname=self.executor_server.hostname,
uuid=buildset1_builds[-2]['uuid']),
buildset1_builds[-2]['log_url'])
uuid=buildset1_builds[1]['uuid']),
buildset1_builds[1]['log_url'])
def test_multiple_sql_connections(self):
"Test putting results in different databases"

View File

@@ -61,15 +61,19 @@ class SQLReporter(BaseReporter):
(result, url) = item.formatJobResult(job)
start = end = None
if build.start_time:
start = datetime.datetime.fromtimestamp(build.start_time)
if build.end_time:
end = datetime.datetime.fromtimestamp(build.end_time)
build_inserts.append({
'buildset_id': buildset_ins_result.inserted_primary_key,
'uuid': build.uuid,
'job_name': build.job.name,
'result': result,
'start_time': datetime.datetime.fromtimestamp(
build.start_time),
'end_time': datetime.datetime.fromtimestamp(
build.end_time),
'start_time': start,
'end_time': end,
'voting': build.job.voting,
'log_url': url,
'node_name': build.node_name,

View File

@@ -282,6 +282,7 @@ class ExecutorClient(object):
build.parameters = params
if job.name == 'noop':
self.sched.onBuildStarted(build)
self.sched.onBuildCompleted(build, 'SUCCESS', {})
return build