Skip to content

Commit c0e7a63

Browse files
committed
fix(controller): miss service error
1 parent c54d492 commit c0e7a63

2 files changed

Lines changed: 23 additions & 7 deletions

File tree

rootfs/api/signals.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -178,7 +178,7 @@ def gateway_changed_handle(
178178
@receiver(signal=[post_save, post_delete], sender=Service)
179179
def service_changed_handle(
180180
sender, instance: Service, created=False, update_fields=None, **kwargs):
181-
if not created and update_fields is None: # delete
181+
if kwargs['signal'] == post_delete:
182182
instance.app.route_set.filter(procfile_type=instance.procfile_type).delete()
183183

184184

@@ -203,9 +203,10 @@ def appsettings_changed_handle(
203203
elif action == "remove":
204204
instance.app.cleanup_old()
205205
for procfile_type in canaries:
206+
canary = (action == "append")
206207
service = instance.app.service_set.filter(procfile_type=procfile_type).first()
207-
if service is not None:
208-
service.canary = action == "append"
208+
if service is not None and service.canary != canary:
209+
service.canary = canary
209210
service.save()
210211
if prev_settings.routable != instance.routable:
211212
for route in instance.app.route_set.all():

rootfs/api/tests/test_app_settings.py

Lines changed: 19 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -175,23 +175,38 @@ def test_settings_labels(self, mock_requests):
175175

176176
def test_canaries(self, mock_requests):
177177
app_id = self.create_app()
178+
app = App.objects.get(id=app_id)
179+
expect = ["web", "task", "new", "apps"]
180+
for index, scale_type in enumerate(expect):
181+
response = self.client.post(
182+
'/v2/apps/{}/services'.format(app_id),
183+
{
184+
'port': 5000 + index,
185+
'protocol': 'TCP',
186+
'target_port': 5000 + index,
187+
'procfile_type': scale_type
188+
}
189+
)
190+
self.assertEqual(response.status_code, 201, response.data)
178191
self.client.post(
179192
f'/v2/apps/{app_id}/settings',
180-
{'canaries': ["web", "task"]}
193+
{'canaries': expect[:2]}
181194
)
182195
response = self.client.post(
183196
f'/v2/apps/{app_id}/settings',
184-
{'canaries': ["new", "apps"]}
197+
{'canaries': expect[2:]}
185198
)
199+
expect = ["web", "task", "new", "apps"]
186200
self.assertEqual(
187201
response.json()["canaries"],
188-
["web", "task", "new", "apps"],
202+
expect,
189203
response.data
190204
)
205+
206+
self.assertEqual(len(app.service_set.all()), 4)
191207
response = self.client.delete(
192208
f'/v2/apps/{app_id}/settings',
193209
{'canaries': ["new", "apps"]}
194210
)
195-
app = App.objects.get(id=app_id)
196211
app_settings = app.appsettings_set.latest()
197212
self.assertEqual(app_settings.canaries, ["web", "task"])

0 commit comments

Comments
 (0)