Skip to content

Commit adfcdf4

Browse files
author
Matthew Fisher
committed
Merge pull request #890 from deis/769-unique-process-counter
fix(controller): give processes unique counters
2 parents d9b257a + c510fc5 commit adfcdf4

2 files changed

Lines changed: 5 additions & 3 deletions

File tree

controller/api/models.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
from django.conf import settings
1616
from django.contrib.auth.models import User
1717
from django.db import models
18+
from django.db.models import Max
1819
from django.db.models.signals import post_delete
1920
from django.db.models.signals import post_save
2021
from django.utils.encoding import python_2_unicode_compatible
@@ -141,16 +142,16 @@ def scale(self, **kwargs):
141142
"""Scale containers up or down to match requested."""
142143
requested_containers = self.structure.copy()
143144
release = self.release_set.latest()
144-
# increment new container nums off the most recent container
145-
all_containers = self.container_set.all().order_by('-created')
146-
container_num = 1 if not all_containers else all_containers[0].num + 1
147145
msg = 'Containers scaled ' + ' '.join(
148146
"{}={}".format(k, v) for k, v in requested_containers.items())
149147
# iterate and scale by container type (web, worker, etc)
150148
changed = False
151149
to_add, to_remove = [], []
152150
for container_type in requested_containers.keys():
153151
containers = list(self.container_set.filter(type=container_type).order_by('created'))
152+
# increment new container nums off the most recent container
153+
results = self.container_set.filter(type=container_type).aggregate(Max('num'))
154+
container_num = results.get('num__max') or 0 + 1
154155
requested = requested_containers.pop(container_type)
155156
diff = requested - len(containers)
156157
if diff == 0:

controller/api/tests/test_container.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -151,6 +151,7 @@ def test_container_api(self):
151151
response = self.client.get(url)
152152
self.assertEqual(response.status_code, 200)
153153
self.assertEqual(len(response.data['results']), 3)
154+
self.assertEqual(max(c['num'] for c in response.data['results']), 2)
154155
url = "/api/apps/{app_id}".format(**locals())
155156
response = self.client.get(url)
156157
self.assertEqual(response.status_code, 200)

0 commit comments

Comments
 (0)