MT#6975 fixing logic of gerrit ppa repos removal

- all patchesets of the same review send
  'changeset-created' event so we can't just count them
- now We save the param_ppa and gerrit_change to know
  how many reviews a ppa belong
- when no param_ppa is found then trigger jenkins job to remove
  repo

Change-Id: If0c77d2451cab31eb4f650164510794aa78bbe90
changes/53/2253/1
Victor Seva 10 years ago
parent 0f49b45abc
commit 88f3e1ef8f

@ -0,0 +1,33 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import models, migrations
class Migration(migrations.Migration):
dependencies = [
('repoapi', '0003_gerritrepoinfo'),
]
operations = [
migrations.AddField(
model_name='gerritrepoinfo',
name='gerrit_change',
field=models.CharField(default='fake', max_length=50),
preserve_default=False,
),
migrations.AlterField(
model_name='gerritrepoinfo',
name='param_ppa',
field=models.CharField(max_length=50),
),
migrations.AlterUniqueTogether(
name='gerritrepoinfo',
unique_together=set([('param_ppa', 'gerrit_change')]),
),
migrations.RemoveField(
model_name='gerritrepoinfo',
name='count',
),
]

@ -91,35 +91,36 @@ class JenkinsBuildInfo(models.Model):
class GerritRepoInfo(models.Model):
param_ppa = models.CharField(max_length=50, unique=True, null=False)
count = models.IntegerField(default=1)
param_ppa = models.CharField(max_length=50, null=False)
gerrit_change = models.CharField(max_length=50, null=False)
class Meta:
unique_together = ["param_ppa", "gerrit_change"]
def __str__(self):
return "%s:%s" % (self.param_ppa, self.gerrit_change)
def gerrit_repo_add(instance):
gri = GerritRepoInfo.objects
ppa, created = gri.get_or_create(param_ppa=instance.param_ppa)
if not created:
ppa.count = ppa.count + 1
ppa.save()
logging.info("+1")
else:
logging.info("created")
ppa, created = gri.get_or_create(
param_ppa=instance.param_ppa,
gerrit_change=instance.gerrit_change)
if created:
logging.info("%s created" % ppa)
def gerrit_repo_del(instance):
gri = GerritRepoInfo.objects
try:
ppa = gri.get(param_ppa=instance.param_ppa)
ppa.count = ppa.count - 1
if ppa.count > 0:
ppa.save()
logger.info("-1")
else:
ppa.delete()
logger.info("removed")
utils.jenkins_remove_ppa(instance.param_ppa)
ppa = gri.get(param_ppa=instance.param_ppa,
gerrit_change=instance.gerrit_change)
ppa.delete()
logger.info("removed %s" % ppa)
except GerritRepoInfo.DoesNotExist:
pass
if gri.filter(param_ppa=instance.param_ppa).count() == 0:
utils.jenkins_remove_ppa(instance.param_ppa)
def gerrit_repo_manage(sender, **kwargs):

@ -15,14 +15,14 @@
from django.test import TestCase
from repoapi.models import JenkinsBuildInfo, GerritRepoInfo
from mock import patch, Mock
from mock import patch
class GerritRepoInfoTestCase(TestCase):
@patch('urllib2.urlopen', autospec=True)
def test_creation(self, Mockclass):
jbi = JenkinsBuildInfo.objects.create(
@patch('repoapi.utils.jenkins_remove_ppa')
def test_creation(self, utils):
JenkinsBuildInfo.objects.create(
tag="edc90cd9-37f3-4613-9748-ed05a32031c2",
projectname="kamailio",
jobname="kamailio-repos",
@ -38,12 +38,14 @@ class GerritRepoInfoTestCase(TestCase):
param_distribution="wheezy",
param_ppa="gerrit_MT10339_review2054")
gri = GerritRepoInfo.objects.get(param_ppa="gerrit_MT10339_review2054")
self.assertEquals(gri.count, 1)
gri = GerritRepoInfo.objects.filter(
param_ppa="gerrit_MT10339_review2054")
self.assertEquals(gri.count(), 1)
utils.assert_not_called()
@patch('repoapi.utils.jenkins_remove_ppa')
def test_creation_deletion(self, utils):
jbi = JenkinsBuildInfo.objects.create(
JenkinsBuildInfo.objects.create(
tag="edc90cd9-37f3-4613-9748-ed05a32031c2",
projectname="kamailio",
jobname="kamailio-repos",
@ -59,11 +61,12 @@ class GerritRepoInfoTestCase(TestCase):
param_distribution="wheezy",
param_ppa="gerrit_MT10339_review2054")
gri = GerritRepoInfo.objects.get(
gri = GerritRepoInfo.objects.filter(
param_ppa="gerrit_MT10339_review2054")
self.assertEquals(gri.count, 1)
self.assertEquals(gri.count(), 1)
utils.assert_not_called()
jbi = JenkinsBuildInfo.objects.create(
JenkinsBuildInfo.objects.create(
tag="edc90cd9-37f3-4613-9748-ed05a32031c2",
projectname="kamailio",
jobname="kamailio-repos",
@ -84,9 +87,9 @@ class GerritRepoInfoTestCase(TestCase):
self.assertEquals(gri.count(), 0)
utils.assert_called_with("gerrit_MT10339_review2054")
@patch('urllib2.urlopen', autospec=True)
def test_no_creation(self, Mockclass):
jbi = JenkinsBuildInfo.objects.create(
@patch('repoapi.utils.jenkins_remove_ppa')
def test_no_creation(self, utils):
JenkinsBuildInfo.objects.create(
tag="edc90cd9-37f3-4613-9748-ed05a32031c2",
projectname="kamailio",
jobname="kamailio-get-code",
@ -105,3 +108,243 @@ class GerritRepoInfoTestCase(TestCase):
gri = GerritRepoInfo.objects.filter(
param_ppa="gerrit_MT10339_review2054")
self.assertEquals(gri.count(), 0)
utils.assert_not_called()
@patch('repoapi.utils.jenkins_remove_ppa')
def test_creation_review(self, utils):
JenkinsBuildInfo.objects.create(
tag="edc90cd9-37f3-4613-9748-ed05a32031c2",
projectname="kamailio",
jobname="kamailio-repos",
buildnumber=897,
result="SUCCESS",
job_url="https://jenkins.mgm.sipwise.com/job/kamailio-repos/",
gerrit_patchset="1",
gerrit_change="2054",
gerrit_eventtype="patchset-created",
param_tag="none",
param_branch="master",
param_release="none",
param_distribution="wheezy",
param_ppa="gerrit_MT10339_review2054")
gri = GerritRepoInfo.objects.filter(
param_ppa="gerrit_MT10339_review2054")
self.assertEquals(gri.count(), 1)
utils.assert_not_called()
JenkinsBuildInfo.objects.create(
tag="edc90cd9-37f3-4613-9748-ed05a32031c2",
projectname="kamailio",
jobname="kamailio-repos",
buildnumber=898,
result="SUCCESS",
job_url="https://jenkins.mgm.sipwise.com/job/kamailio-repos/",
gerrit_patchset="1",
gerrit_change="2054",
gerrit_eventtype="patchset-created",
param_tag="none",
param_branch="master",
param_release="none",
param_distribution="wheezy",
param_ppa="gerrit_MT10339_review2054")
gri = GerritRepoInfo.objects.filter(
param_ppa="gerrit_MT10339_review2054")
self.assertEquals(gri.count(), 1)
utils.assert_not_called()
@patch('repoapi.utils.jenkins_remove_ppa')
def test_creation_multi_review(self, utils):
JenkinsBuildInfo.objects.create(
tag="edc90cd9-37f3-4613-9748-ed05a32031c2",
projectname="kamailio",
jobname="kamailio-repos",
buildnumber=897,
result="SUCCESS",
job_url="https://jenkins.mgm.sipwise.com/job/kamailio-repos/",
gerrit_patchset="1",
gerrit_change="2054",
gerrit_eventtype="patchset-created",
param_tag="none",
param_branch="master",
param_release="none",
param_distribution="wheezy",
param_ppa="gerrit_MT10339_review2054")
gri = GerritRepoInfo.objects.filter(
param_ppa="gerrit_MT10339_review2054")
self.assertEquals(gri.count(), 1)
utils.assert_not_called()
JenkinsBuildInfo.objects.create(
tag="edc90cd9-37f3-4613-9748-ed05a32031c2",
projectname="fake",
jobname="fake-repos",
buildnumber=8,
result="SUCCESS",
job_url="https://jenkins.mgm.sipwise.com/job/fake-repos/",
gerrit_patchset="1",
gerrit_change="2",
gerrit_eventtype="patchset-created",
param_tag="none",
param_branch="master",
param_release="none",
param_distribution="wheezy",
param_ppa="gerrit_MT10339_review2054")
gri = GerritRepoInfo.objects.filter(
param_ppa="gerrit_MT10339_review2054")
self.assertEquals(gri.count(), 2)
utils.assert_not_called()
@patch('repoapi.utils.jenkins_remove_ppa')
def test_creation_multi_review_no_del(self, utils):
JenkinsBuildInfo.objects.create(
tag="edc90cd9-37f3-4613-9748-ed05a32031c2",
projectname="kamailio",
jobname="kamailio-repos",
buildnumber=897,
result="SUCCESS",
job_url="https://jenkins.mgm.sipwise.com/job/kamailio-repos/",
gerrit_patchset="1",
gerrit_change="2054",
gerrit_eventtype="patchset-created",
param_tag="none",
param_branch="master",
param_release="none",
param_distribution="wheezy",
param_ppa="gerrit_MT10339_review2054")
gri = GerritRepoInfo.objects.filter(
param_ppa="gerrit_MT10339_review2054")
self.assertEquals(gri.count(), 1)
utils.assert_not_called()
JenkinsBuildInfo.objects.create(
tag="edc90cd9-37f3-4613-9748-ed05a32031c2",
projectname="fake",
jobname="fake-repos",
buildnumber=8,
result="SUCCESS",
job_url="https://jenkins.mgm.sipwise.com/job/fake-repos/",
gerrit_patchset="1",
gerrit_change="2",
gerrit_eventtype="patchset-created",
param_tag="none",
param_branch="master",
param_release="none",
param_distribution="wheezy",
param_ppa="gerrit_MT10339_review2054")
gri = GerritRepoInfo.objects.filter(
param_ppa="gerrit_MT10339_review2054")
self.assertEquals(gri.count(), 2)
utils.assert_not_called()
JenkinsBuildInfo.objects.create(
tag="edc90cd9-37f3-4613-9748-ed05a32031c2",
projectname="kamailio",
jobname="kamailio-repos",
buildnumber=898,
result="SUCCESS",
job_url="https://jenkins.mgm.sipwise.com/job/kamailio-repos/",
gerrit_patchset="2",
gerrit_change="2054",
gerrit_eventtype="change-merged",
param_tag="none",
param_branch="master",
param_release="none",
param_distribution="wheezy",
param_ppa="gerrit_MT10339_review2054")
gri = GerritRepoInfo.objects.filter(
param_ppa="gerrit_MT10339_review2054")
self.assertEquals(gri.count(), 1)
utils.assert_not_called()
@patch('repoapi.utils.jenkins_remove_ppa')
def test_creation_multi_review_del(self, utils):
JenkinsBuildInfo.objects.create(
tag="edc90cd9-37f3-4613-9748-ed05a32031c2",
projectname="kamailio",
jobname="kamailio-repos",
buildnumber=897,
result="SUCCESS",
job_url="https://jenkins.mgm.sipwise.com/job/kamailio-repos/",
gerrit_patchset="1",
gerrit_change="2054",
gerrit_eventtype="patchset-created",
param_tag="none",
param_branch="master",
param_release="none",
param_distribution="wheezy",
param_ppa="gerrit_MT10339_review2054")
gri = GerritRepoInfo.objects.filter(
param_ppa="gerrit_MT10339_review2054")
self.assertEquals(gri.count(), 1)
utils.assert_not_called()
JenkinsBuildInfo.objects.create(
tag="edc90cd9-37f3-4613-9748-ed05a32031c2",
projectname="fake",
jobname="fake-repos",
buildnumber=8,
result="SUCCESS",
job_url="https://jenkins.mgm.sipwise.com/job/fake-repos/",
gerrit_patchset="1",
gerrit_change="2",
gerrit_eventtype="patchset-created",
param_tag="none",
param_branch="master",
param_release="none",
param_distribution="wheezy",
param_ppa="gerrit_MT10339_review2054")
gri = GerritRepoInfo.objects.filter(
param_ppa="gerrit_MT10339_review2054")
self.assertEquals(gri.count(), 2)
utils.assert_not_called()
JenkinsBuildInfo.objects.create(
tag="edc90cd9-37f3-4613-9748-ed05a32031c2",
projectname="kamailio",
jobname="kamailio-repos",
buildnumber=898,
result="SUCCESS",
job_url="https://jenkins.mgm.sipwise.com/job/kamailio-repos/",
gerrit_patchset="2",
gerrit_change="2054",
gerrit_eventtype="change-merged",
param_tag="none",
param_branch="master",
param_release="none",
param_distribution="wheezy",
param_ppa="gerrit_MT10339_review2054")
gri = GerritRepoInfo.objects.filter(
param_ppa="gerrit_MT10339_review2054")
self.assertEquals(gri.count(), 1)
utils.assert_not_called()
JenkinsBuildInfo.objects.create(
tag="edc90cd9-37f3-4613-9748-ed05a32031c2",
projectname="fake",
jobname="fake-repos",
buildnumber=9,
result="SUCCESS",
job_url="https://jenkins.mgm.sipwise.com/job/fake-repos/",
gerrit_patchset="2",
gerrit_change="2",
gerrit_eventtype="change-merged",
param_tag="none",
param_branch="master",
param_release="none",
param_distribution="wheezy",
param_ppa="gerrit_MT10339_review2054")
gri = GerritRepoInfo.objects.filter(
param_ppa="gerrit_MT10339_review2054")
self.assertEquals(gri.count(), 0)
utils.assert_called_with("gerrit_MT10339_review2054")

Loading…
Cancel
Save