From fbf6edf62b7b105abb467ef5cb9254eb8f5396c6 Mon Sep 17 00:00:00 2001 From: "Chris St. Pierre" Date: Thu, 13 Jun 2013 12:44:55 -0400 Subject: Probes: reduce race condition that can result in multiple probe groups --- src/lib/Bcfg2/Server/Plugins/Probes.py | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) (limited to 'src/lib/Bcfg2/Server/Plugins/Probes.py') diff --git a/src/lib/Bcfg2/Server/Plugins/Probes.py b/src/lib/Bcfg2/Server/Plugins/Probes.py index f8baddb4b..1a199d056 100644 --- a/src/lib/Bcfg2/Server/Plugins/Probes.py +++ b/src/lib/Bcfg2/Server/Plugins/Probes.py @@ -252,12 +252,15 @@ class Probes(Bcfg2.Server.Plugin.Probing, for group in self.cgroups[client.hostname]: try: - ProbesGroupsModel.objects.get(hostname=client.hostname, - group=group) - except ProbesGroupsModel.DoesNotExist: - grp = ProbesGroupsModel(hostname=client.hostname, - group=group) - grp.save() + ProbesGroupsModel.objects.get_or_create( + hostname=client.hostname, + group=group).save() + except ProbesGroupsModel.MultipleObjectsReturned: + ProbesGroupsModel.objects.filter(hostname=client.hostname, + group=group).delete() + ProbesGroupsModel.objects.get_or_create( + hostname=client.hostname, + group=group).save() ProbesGroupsModel.objects.filter( hostname=client.hostname).exclude( group__in=self.cgroups[client.hostname]).delete() -- cgit v1.2.3-1-g7c22 From fcde897e8bf1ba97838677c6f5c4db43bbaf6aeb Mon Sep 17 00:00:00 2001 From: "Chris St. Pierre" Date: Fri, 14 Jun 2013 10:58:43 -0400 Subject: Probes: no need to .save() after .get_or_create() --- src/lib/Bcfg2/Server/Plugins/Probes.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/lib/Bcfg2/Server/Plugins/Probes.py') diff --git a/src/lib/Bcfg2/Server/Plugins/Probes.py b/src/lib/Bcfg2/Server/Plugins/Probes.py index 1a199d056..20e366523 100644 --- a/src/lib/Bcfg2/Server/Plugins/Probes.py +++ b/src/lib/Bcfg2/Server/Plugins/Probes.py @@ -254,7 +254,7 @@ class Probes(Bcfg2.Server.Plugin.Probing, try: ProbesGroupsModel.objects.get_or_create( hostname=client.hostname, - group=group).save() + group=group) except ProbesGroupsModel.MultipleObjectsReturned: ProbesGroupsModel.objects.filter(hostname=client.hostname, group=group).delete() -- cgit v1.2.3-1-g7c22 From ba133d1e5289a71ba1f312e582a62ca83f9085f9 Mon Sep 17 00:00:00 2001 From: "Chris St. Pierre" Date: Mon, 17 Jun 2013 08:49:50 -0400 Subject: Probes: no need to .save() after .get_or_create() --- src/lib/Bcfg2/Server/Plugins/Probes.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/lib/Bcfg2/Server/Plugins/Probes.py') diff --git a/src/lib/Bcfg2/Server/Plugins/Probes.py b/src/lib/Bcfg2/Server/Plugins/Probes.py index 20e366523..8937e4740 100644 --- a/src/lib/Bcfg2/Server/Plugins/Probes.py +++ b/src/lib/Bcfg2/Server/Plugins/Probes.py @@ -260,7 +260,7 @@ class Probes(Bcfg2.Server.Plugin.Probing, group=group).delete() ProbesGroupsModel.objects.get_or_create( hostname=client.hostname, - group=group).save() + group=group) ProbesGroupsModel.objects.filter( hostname=client.hostname).exclude( group__in=self.cgroups[client.hostname]).delete() -- cgit v1.2.3-1-g7c22 From 9b7317bb94dec3235207598f85f34b1c01cae4f4 Mon Sep 17 00:00:00 2001 From: Jason Kincl Date: Fri, 14 Jun 2013 14:02:48 -0400 Subject: Probes: Fixing Django exception import --- src/lib/Bcfg2/Server/Plugins/Probes.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'src/lib/Bcfg2/Server/Plugins/Probes.py') diff --git a/src/lib/Bcfg2/Server/Plugins/Probes.py b/src/lib/Bcfg2/Server/Plugins/Probes.py index 8937e4740..0974184b4 100644 --- a/src/lib/Bcfg2/Server/Plugins/Probes.py +++ b/src/lib/Bcfg2/Server/Plugins/Probes.py @@ -12,6 +12,7 @@ import Bcfg2.Server.Plugin try: from django.db import models + from django.core.exceptions import MultipleObjectsReturned HAS_DJANGO = True class ProbesDataModel(models.Model, @@ -255,7 +256,7 @@ class Probes(Bcfg2.Server.Plugin.Probing, ProbesGroupsModel.objects.get_or_create( hostname=client.hostname, group=group) - except ProbesGroupsModel.MultipleObjectsReturned: + except MultipleObjectsReturned: ProbesGroupsModel.objects.filter(hostname=client.hostname, group=group).delete() ProbesGroupsModel.objects.get_or_create( -- cgit v1.2.3-1-g7c22