Skip to content

Commit 4f7a210

Browse files
authored
Merge pull request #7933 from readthedocs/humitos/route-external-versions
Route external versions to the queue were default version was built
2 parents d3d3b9e + 93adf08 commit 4f7a210

File tree

2 files changed

+37
-19
lines changed

2 files changed

+37
-19
lines changed

readthedocs/builds/tasks.py

+18-10
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,24 @@ def route_for_task(self, task, args, kwargs, **__):
8282
)
8383
return project.build_queue
8484

85+
# Use last queue used by the default version for external versions
86+
if version.type == EXTERNAL:
87+
last_build_for_default_version = (
88+
project.builds
89+
.filter(version__slug=project.get_default_version())
90+
.order_by('-date')
91+
.first()
92+
)
93+
if 'default' in last_build_for_default_version.builder:
94+
routing_queue = self.BUILD_DEFAULT_QUEUE
95+
else:
96+
routing_queue = self.BUILD_LARGE_QUEUE
97+
log.info(
98+
'Routing task because is a external version. project=%s queue=%s',
99+
project.slug, routing_queue,
100+
)
101+
return routing_queue
102+
85103
queryset = version.builds.filter(success=True).order_by('-date')
86104
last_builds = queryset[:self.N_LAST_BUILDS]
87105

@@ -94,16 +112,6 @@ def route_for_task(self, task, args, kwargs, **__):
94112
)
95113
return self.BUILD_LARGE_QUEUE
96114

97-
# Use last queue used for external versions
98-
if version.type == EXTERNAL:
99-
for build in last_builds.iterator():
100-
if not build.builder:
101-
continue
102-
103-
if 'default' in build.builder:
104-
return self.BUILD_DEFAULT_QUEUE
105-
return self.BUILD_LARGE_QUEUE
106-
107115
# We do not have enough builds for this version yet
108116
if queryset.count() < self.N_BUILDS:
109117
log.info(

readthedocs/builds/tests/test_celery_task_router.py

+19-9
Original file line numberDiff line numberDiff line change
@@ -70,21 +70,31 @@ def test_no_build_pk(self):
7070
)
7171

7272
def test_external_version(self):
73-
self.version.type = EXTERNAL
74-
self.version.save()
75-
76-
self.build.builder = 'build-default-a1b2c3'
77-
self.build.save()
73+
external_version = fixture.get(
74+
Version,
75+
project=self.project,
76+
slug='pull-request',
77+
type=EXTERNAL,
78+
)
79+
default_version = self.project.versions.get(slug=self.project.get_default_version())
80+
default_version_build = fixture.get(
81+
Build,
82+
version=default_version,
83+
project=self.project,
84+
builder='build-default-a1b2c3',
85+
)
86+
args = (external_version.pk,)
87+
kwargs = {'build_pk': default_version_build.pk}
7888

7989
self.assertEqual(
80-
self.router.route_for_task(self.task, self.args, self.kwargs),
90+
self.router.route_for_task(self.task, args, kwargs),
8191
TaskRouter.BUILD_DEFAULT_QUEUE,
8292
)
8393

84-
self.build.builder = 'build-large-a1b2c3'
85-
self.build.save()
94+
default_version_build.builder = 'build-large-a1b2c3'
95+
default_version_build.save()
8696

8797
self.assertEqual(
88-
self.router.route_for_task(self.task, self.args, self.kwargs),
98+
self.router.route_for_task(self.task, args, kwargs),
8999
TaskRouter.BUILD_LARGE_QUEUE,
90100
)

0 commit comments

Comments
 (0)