TT#43813 properly do steps for POOL_SIZE

Change-Id: I6a67c23c2ebbcc0c4b26d41190b150b69641733e
changes/81/38381/2
Victor Seva 5 years ago
parent 9ef5a238a3
commit 87eff997b0

@ -0,0 +1,20 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.11.28 on 2020-03-09 17:11
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
("build", "0002_smart_build"),
]
operations = [
migrations.AddField(
model_name="buildrelease",
name="triggered_projects",
field=models.TextField(editable=False, null=True),
),
]

@ -86,10 +86,10 @@ def jbi_manage(sender, **kwargs):
"trigger:%s for BuildRelease:%s", params["project"], br
)
trigger_build(**params)
br.pool_size += 1
br.save(update_fields=["pool_size"])
br.append_triggered(prj)
else:
logger.debug("BuildRelease:%s has no next", br)
break
post_save = signals.post_save.connect

@ -88,6 +88,7 @@ class BuildRelease(models.Model):
distribution = models.CharField(max_length=50, null=False, editable=False)
projects = models.TextField(null=False, editable=False)
built_projects = models.TextField(null=True, editable=False)
triggered_projects = models.TextField(null=True, editable=False)
failed_projects = models.TextField(null=True, editable=False)
pool_size = models.SmallIntegerField(default=0, editable=False)
objects = BuildReleaseManager()
@ -117,6 +118,23 @@ class BuildRelease(models.Model):
return [x.strip() for x in self.failed_projects.split(",")]
return []
@property
def triggered_projects_list(self):
if self.triggered_projects is not None:
return [x.strip() for x in self.triggered_projects.split(",")]
return []
def append_triggered(self, value):
if value in self.triggered_projects_list:
return False
if self.triggered_projects is None:
self.triggered_projects = value
else:
self.triggered_projects += ",{}".format(value)
self.pool_size += 1
self.save()
return True
def _append_falied(self, value):
if value in self.failed_projects_list:
return False
@ -149,8 +167,21 @@ class BuildRelease(models.Model):
self.save()
return True
def remove_triggered(self, jbi):
value = jbi.projectname
triggered_list = self.triggered_projects_list
if value in triggered_list:
triggered_list.remove(value)
tl = ",".join(triggered_list)
if len(tl) > 0:
self.triggered_projects = tl
else:
self.triggered_projects = None
self.save()
def append_built(self, jbi):
jobname = jbi.jobname
self.remove_triggered(jbi)
if jbi.result == "FAILURE":
if jobname.endswith("-piuparts"):
return False
@ -173,13 +204,14 @@ class BuildRelease(models.Model):
release_jobs_len = len(",".join(settings.RELEASE_JOBS))
if built_len == release_jobs_len + 1 + len(self.projects):
return
t_list = self.triggered_projects_list
built_list = self.built_projects_list
for grp in self.build_deps:
for prj in grp:
if prj not in built_list:
if prj not in built_list and prj not in t_list:
return prj
for prj in self.projects_list:
if prj not in built_list:
if prj not in built_list and prj not in t_list:
return prj
@property

@ -12,6 +12,7 @@
#
# You should have received a copy of the GNU General Public License along
# with this program. If not, see <http://www.gnu.org/licenses/>.
from unittest.mock import call
from unittest.mock import MagicMock
from unittest.mock import patch
@ -344,14 +345,16 @@ class JBIManageTest(TestCase):
}
tb.assert_called_once_with(**params)
self.assertEqual(br.pool_size, 1)
self.assertEqual(br.triggered_projects, "data-hal")
@patch("build.models.trigger_build")
def test_jbi_manage_skip(self, tb, dl):
br = BuildRelease.objects.create_build_release("UUID_mr8.1", "mr8.1")
br.pool_size = 1
br.triggered_projects = "kamailio"
br.save()
jbi = JenkinsBuildInfo.objects.create(
job_url="http://fake.local/job/release-copy-debs-yml/",
job_url="http://fake.local/job/kamailio-get-code/",
projectname="kamailio",
jobname="kamailio-get-code",
tag="UUIDA",
@ -366,6 +369,67 @@ class JBIManageTest(TestCase):
jbi_manage(JenkinsBuildInfo, **params)
tb.assert_not_called()
self.assertEqual(br.pool_size, 1)
self.assertEqual(br.triggered_projects, "kamailio")
@override_settings(BUILD_POOL=2)
@patch("build.models.trigger_build")
def test_jbi_manage_pool(self, tb, dl):
br = BuildRelease.objects.create_build_release("UUID_mr8.1", "mr8.1")
self.assertEqual(br.pool_size, 0)
JenkinsBuildInfo.objects.create(
job_url="http://fake.local/job/release-copy-debs-yml/",
projectname="release-copy-debs-yml",
jobname="release-copy-debs-yml",
tag="UUIDA",
param_release="mr8.1",
param_release_uuid="UUID_mr8.1",
buildnumber=1,
result="SUCCESS",
)
br = BuildRelease.objects.get(pk=br.pk)
self.assertEqual(br.built_projects, "release-copy-debs-yml")
params = {
"project": "data-hal-get-code",
"release_uuid": br.uuid,
"trigger_release": br.release,
"trigger_branch_or_tag": br.branch_or_tag,
"trigger_distribution": br.distribution,
}
calls = [call(**params)]
params["project"] = "libinewrate-get-code"
calls.append(call(**params))
tb.assert_has_calls(calls)
self.assertEqual(br.pool_size, 2)
self.assertEqual(br.triggered_projects, "data-hal,libinewrate")
@override_settings(BUILD_POOL=2)
@patch("build.models.trigger_build")
def test_jbi_manage_pool_next(self, tb, dl):
self.test_jbi_manage_pool()
br = BuildRelease.objects.first()
self.assertEqual(br.pool_size, 2)
JenkinsBuildInfo.objects.create(
job_url="http://fake.local/job/data-hal-repos/",
projectname="data-hal",
jobname="data-hal-repos",
tag="UUIDA",
param_release="release-mr8.1",
param_release_uuid="UUID_mr8.1",
buildnumber=1,
result="SUCCESS",
)
br = BuildRelease.objects.get(pk=br.pk)
self.assertEqual(br.built_projects, "release-copy-debs-yml,data-hal")
params = {
"project": "libswrate-get-code",
"release_uuid": br.uuid,
"trigger_release": br.release,
"trigger_branch_or_tag": br.branch_or_tag,
"trigger_distribution": br.distribution,
}
tb.assert_called_once_with(**params)
self.assertEqual(br.pool_size, 2)
self.assertEqual(br.triggered_projects, "libinewrate,libswrate")
@override_settings(

Loading…
Cancel
Save