Skip to content

Commit 21a3f8c

Browse files
mtopo27claude
andcommitted
ref(preprod): Restructure commit_comparison conditional to if/else
Flip the early-return guard `if not artifact.commit_comparison: return` into an `if/else` block. This is a pure structural change with no behavior difference, preparing for a follow-up that adds logic to the else branch. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
1 parent c2b23ac commit 21a3f8c

File tree

1 file changed

+165
-166
lines changed
  • src/sentry/preprod/size_analysis

1 file changed

+165
-166
lines changed

src/sentry/preprod/size_analysis/tasks.py

Lines changed: 165 additions & 166 deletions
Original file line numberDiff line numberDiff line change
@@ -74,198 +74,197 @@ def compare_preprod_artifact_size_analysis(
7474
return
7575

7676
try:
77-
if not artifact.commit_comparison:
78-
logger.info(
79-
"preprod.size_analysis.compare.artifact_no_commit_comparison",
80-
extra={"artifact_id": artifact_id},
81-
)
82-
return
83-
84-
comparisons: list[dict[str, PreprodArtifactSizeMetrics]] = []
85-
preprod_artifact_status_check_updates: set[int] = {artifact.id}
86-
87-
# Create all comparisons with artifact as head
88-
base_artifact = artifact.get_base_artifact_for_commit().first()
89-
if base_artifact:
90-
if artifact.build_configuration != base_artifact.build_configuration:
91-
logger.info(
92-
"preprod.size_analysis.compare.artifact_different_build_configurations",
93-
extra={"head_artifact_id": artifact_id, "base_artifact_id": base_artifact.id},
77+
if artifact.commit_comparison:
78+
comparisons: list[dict[str, PreprodArtifactSizeMetrics]] = []
79+
preprod_artifact_status_check_updates: set[int] = {artifact.id}
80+
81+
# Create all comparisons with artifact as head
82+
base_artifact = artifact.get_base_artifact_for_commit().first()
83+
if base_artifact:
84+
if artifact.build_configuration != base_artifact.build_configuration:
85+
logger.info(
86+
"preprod.size_analysis.compare.artifact_different_build_configurations",
87+
extra={"head_artifact_id": artifact_id, "base_artifact_id": base_artifact.id},
88+
)
89+
# Update the status check even though we can't compare to avoid leaving it in a loading state
90+
create_preprod_status_check_task.apply_async(
91+
kwargs={
92+
"preprod_artifact_id": artifact_id,
93+
"caller": "compare_build_config_mismatch",
94+
}
95+
)
96+
return
97+
98+
base_size_metrics_qs = PreprodArtifactSizeMetrics.objects.filter(
99+
preprod_artifact_id=base_artifact.id,
100+
preprod_artifact__project__organization_id=org_id,
101+
preprod_artifact__project_id=project_id,
102+
).select_related("preprod_artifact", "preprod_artifact__mobile_app_info")
103+
base_size_metrics = list(base_size_metrics_qs)
104+
105+
head_size_metrics_qs = PreprodArtifactSizeMetrics.objects.filter(
106+
preprod_artifact_id=artifact_id,
107+
preprod_artifact__project__organization_id=org_id,
108+
preprod_artifact__project_id=project_id,
109+
).select_related(
110+
"preprod_artifact",
111+
"preprod_artifact__mobile_app_info",
112+
"preprod_artifact__commit_comparison",
94113
)
95-
# Update the status check even though we can't compare to avoid leaving it in a loading state
96-
create_preprod_status_check_task.apply_async(
97-
kwargs={
98-
"preprod_artifact_id": artifact_id,
99-
"caller": "compare_build_config_mismatch",
100-
}
114+
head_size_metrics = list(head_size_metrics_qs)
115+
116+
validation_result = can_compare_size_metrics(head_size_metrics, base_size_metrics)
117+
if validation_result.can_compare:
118+
base_metrics_map = build_size_metrics_map(base_size_metrics)
119+
head_metrics_map = build_size_metrics_map(head_size_metrics)
120+
121+
for key, base_metric in base_metrics_map.items():
122+
matching_head_size_metric = head_metrics_map.get(key)
123+
if matching_head_size_metric:
124+
logger.info(
125+
"preprod.size_analysis.compare.create_comparison",
126+
extra={
127+
"head_artifact_id": artifact_id,
128+
"base_artifact_id": base_artifact.id,
129+
},
130+
)
131+
comparisons.append(
132+
{"head_metric": matching_head_size_metric, "base_metric": base_metric},
133+
)
134+
else:
135+
logger.info(
136+
"preprod.size_analysis.compare.no_matching_base_size_metric",
137+
extra={
138+
"head_artifact_id": artifact_id,
139+
"size_metric_id": base_metric.id,
140+
},
141+
)
142+
else:
143+
logger.info(
144+
"preprod.size_analysis.compare.cannot_compare_size_metrics",
145+
extra={
146+
"head_artifact_id": artifact_id,
147+
"base_artifact_id": base_artifact.id,
148+
"error_message": validation_result.error_message,
149+
},
150+
)
151+
152+
# Also create comparisons with artifact as base
153+
head_artifacts = artifact.get_head_artifacts_for_commit()
154+
for head_artifact in head_artifacts:
155+
if head_artifact.build_configuration != artifact.build_configuration:
156+
logger.info(
157+
"preprod.size_analysis.compare.head_artifact_different_build_configurations",
158+
extra={"head_artifact_id": head_artifact.id, "base_artifact_id": artifact_id},
159+
)
160+
continue
161+
162+
head_size_metrics_qs = PreprodArtifactSizeMetrics.objects.filter(
163+
preprod_artifact_id=head_artifact.id,
164+
preprod_artifact__project__organization_id=org_id,
165+
preprod_artifact__project_id=project_id,
166+
).select_related(
167+
"preprod_artifact",
168+
"preprod_artifact__mobile_app_info",
169+
"preprod_artifact__commit_comparison",
101170
)
102-
return
103-
104-
base_size_metrics_qs = PreprodArtifactSizeMetrics.objects.filter(
105-
preprod_artifact_id=base_artifact.id,
106-
preprod_artifact__project__organization_id=org_id,
107-
preprod_artifact__project_id=project_id,
108-
).select_related("preprod_artifact", "preprod_artifact__mobile_app_info")
109-
base_size_metrics = list(base_size_metrics_qs)
110-
111-
head_size_metrics_qs = PreprodArtifactSizeMetrics.objects.filter(
112-
preprod_artifact_id=artifact_id,
113-
preprod_artifact__project__organization_id=org_id,
114-
preprod_artifact__project_id=project_id,
115-
).select_related(
116-
"preprod_artifact",
117-
"preprod_artifact__mobile_app_info",
118-
"preprod_artifact__commit_comparison",
119-
)
120-
head_size_metrics = list(head_size_metrics_qs)
171+
head_size_metrics = list(head_size_metrics_qs)
172+
173+
base_size_metrics_qs = PreprodArtifactSizeMetrics.objects.filter(
174+
preprod_artifact_id=artifact_id,
175+
preprod_artifact__project__organization_id=org_id,
176+
preprod_artifact__project_id=project_id,
177+
).select_related("preprod_artifact", "preprod_artifact__mobile_app_info")
178+
base_size_metrics = list(base_size_metrics_qs)
179+
180+
validation_result = can_compare_size_metrics(head_size_metrics, base_size_metrics)
181+
if not validation_result.can_compare:
182+
logger.info(
183+
"preprod.size_analysis.compare.cannot_compare_size_metrics",
184+
extra={
185+
"head_artifact_id": head_artifact.id,
186+
"base_artifact_id": artifact_id,
187+
"error_message": validation_result.error_message,
188+
},
189+
)
190+
continue
121191

122-
validation_result = can_compare_size_metrics(head_size_metrics, base_size_metrics)
123-
if validation_result.can_compare:
124-
base_metrics_map = build_size_metrics_map(base_size_metrics)
125192
head_metrics_map = build_size_metrics_map(head_size_metrics)
193+
base_metrics_map = build_size_metrics_map(base_size_metrics)
126194

127-
for key, base_metric in base_metrics_map.items():
128-
matching_head_size_metric = head_metrics_map.get(key)
129-
if matching_head_size_metric:
195+
for key, head_metric in head_metrics_map.items():
196+
matching_base_size_metric = base_metrics_map.get(key)
197+
if matching_base_size_metric:
130198
logger.info(
131199
"preprod.size_analysis.compare.create_comparison",
132200
extra={
133-
"head_artifact_id": artifact_id,
134-
"base_artifact_id": base_artifact.id,
201+
"head_artifact_id": head_artifact.id,
202+
"base_artifact_id": artifact.id,
135203
},
136204
)
137205
comparisons.append(
138-
{"head_metric": matching_head_size_metric, "base_metric": base_metric},
206+
{"head_metric": head_metric, "base_metric": matching_base_size_metric},
139207
)
208+
preprod_artifact_status_check_updates.add(head_artifact.id)
140209
else:
141210
logger.info(
142211
"preprod.size_analysis.compare.no_matching_base_size_metric",
143212
extra={
144-
"head_artifact_id": artifact_id,
145-
"size_metric_id": base_metric.id,
213+
"head_artifact_id": head_artifact.id,
214+
"size_metric_id": head_metric.id,
146215
},
147216
)
148-
else:
149-
logger.info(
150-
"preprod.size_analysis.compare.cannot_compare_size_metrics",
151-
extra={
152-
"head_artifact_id": artifact_id,
153-
"base_artifact_id": base_artifact.id,
154-
"error_message": validation_result.error_message,
155-
},
156-
)
157-
158-
# Also create comparisons with artifact as base
159-
head_artifacts = artifact.get_head_artifacts_for_commit()
160-
for head_artifact in head_artifacts:
161-
if head_artifact.build_configuration != artifact.build_configuration:
162-
logger.info(
163-
"preprod.size_analysis.compare.head_artifact_different_build_configurations",
164-
extra={"head_artifact_id": head_artifact.id, "base_artifact_id": artifact_id},
165-
)
166-
continue
167-
168-
head_size_metrics_qs = PreprodArtifactSizeMetrics.objects.filter(
169-
preprod_artifact_id=head_artifact.id,
170-
preprod_artifact__project__organization_id=org_id,
171-
preprod_artifact__project_id=project_id,
172-
).select_related(
173-
"preprod_artifact",
174-
"preprod_artifact__mobile_app_info",
175-
"preprod_artifact__commit_comparison",
176-
)
177-
head_size_metrics = list(head_size_metrics_qs)
178-
179-
base_size_metrics_qs = PreprodArtifactSizeMetrics.objects.filter(
180-
preprod_artifact_id=artifact_id,
181-
preprod_artifact__project__organization_id=org_id,
182-
preprod_artifact__project_id=project_id,
183-
).select_related("preprod_artifact", "preprod_artifact__mobile_app_info")
184-
base_size_metrics = list(base_size_metrics_qs)
185-
186-
validation_result = can_compare_size_metrics(head_size_metrics, base_size_metrics)
187-
if not validation_result.can_compare:
188-
logger.info(
189-
"preprod.size_analysis.compare.cannot_compare_size_metrics",
190-
extra={
191-
"head_artifact_id": head_artifact.id,
192-
"base_artifact_id": artifact_id,
193-
"error_message": validation_result.error_message,
194-
},
195-
)
196-
continue
197217

198-
head_metrics_map = build_size_metrics_map(head_size_metrics)
199-
base_metrics_map = build_size_metrics_map(base_size_metrics)
218+
# Create PENDING comparison records in DB and run comparisons
219+
with transaction.atomic(router.db_for_write(PreprodArtifactSizeComparison)):
220+
for comp in comparisons:
221+
head_metric = comp["head_metric"]
222+
base_metric = comp["base_metric"]
223+
comparison, created = PreprodArtifactSizeComparison.objects.get_or_create(
224+
head_size_analysis=head_metric,
225+
base_size_analysis=base_metric,
226+
organization_id=org_id,
227+
defaults={"state": PreprodArtifactSizeComparison.State.PENDING},
228+
)
200229

201-
for key, head_metric in head_metrics_map.items():
202-
matching_base_size_metric = base_metrics_map.get(key)
203-
if matching_base_size_metric:
204230
logger.info(
205-
"preprod.size_analysis.compare.create_comparison",
231+
"preprod.size_analysis.compare.running_comparison",
206232
extra={
207-
"head_artifact_id": head_artifact.id,
208-
"base_artifact_id": artifact.id,
233+
"head_metric_id": head_metric.id,
234+
"base_metric_id": base_metric.id,
235+
"comparison_created": created,
209236
},
210237
)
211-
comparisons.append(
212-
{"head_metric": head_metric, "base_metric": matching_base_size_metric},
213-
)
214-
preprod_artifact_status_check_updates.add(head_artifact.id)
215-
else:
216-
logger.info(
217-
"preprod.size_analysis.compare.no_matching_base_size_metric",
218-
extra={
219-
"head_artifact_id": head_artifact.id,
220-
"size_metric_id": head_metric.id,
221-
},
238+
_run_size_analysis_comparison(org_id, head_metric, base_metric)
239+
240+
for artifact_id in preprod_artifact_status_check_updates:
241+
# Update all artifact's status check with the new comparison
242+
create_preprod_status_check_task.apply_async(
243+
kwargs={
244+
"preprod_artifact_id": artifact_id,
245+
"caller": "compare_completion",
246+
}
222247
)
223248

224-
# Create PENDING comparison records in DB and run comparisons
225-
with transaction.atomic(router.db_for_write(PreprodArtifactSizeComparison)):
226-
for comp in comparisons:
227-
head_metric = comp["head_metric"]
228-
base_metric = comp["base_metric"]
229-
comparison, created = PreprodArtifactSizeComparison.objects.get_or_create(
230-
head_size_analysis=head_metric,
231-
base_size_analysis=base_metric,
232-
organization_id=org_id,
233-
defaults={"state": PreprodArtifactSizeComparison.State.PENDING},
234-
)
235-
236-
logger.info(
237-
"preprod.size_analysis.compare.running_comparison",
238-
extra={
239-
"head_metric_id": head_metric.id,
240-
"base_metric_id": base_metric.id,
241-
"comparison_created": created,
242-
},
243-
)
244-
_run_size_analysis_comparison(org_id, head_metric, base_metric)
245-
246-
for artifact_id in preprod_artifact_status_check_updates:
247-
# Update all artifact's status check with the new comparison
248-
create_preprod_status_check_task.apply_async(
249-
kwargs={
250-
"preprod_artifact_id": artifact_id,
251-
"caller": "compare_completion",
252-
}
253-
)
254-
255-
try:
256-
artifact_type_name = PreprodArtifact.ArtifactType(artifact.artifact_type).name.lower()
257-
except (ValueError, AttributeError, TypeError):
258-
artifact_type_name = "unknown"
259-
260-
e2e_size_analysis_compare_duration = timezone.now() - artifact.date_added
261-
metrics.distribution(
262-
"preprod.size_analysis.compare.results_e2e",
263-
e2e_size_analysis_compare_duration.total_seconds(),
264-
sample_rate=1.0,
265-
tags={
266-
"artifact_type": artifact_type_name,
267-
},
268-
)
249+
try:
250+
artifact_type_name = PreprodArtifact.ArtifactType(artifact.artifact_type).name.lower()
251+
except (ValueError, AttributeError, TypeError):
252+
artifact_type_name = "unknown"
253+
254+
e2e_size_analysis_compare_duration = timezone.now() - artifact.date_added
255+
metrics.distribution(
256+
"preprod.size_analysis.compare.results_e2e",
257+
e2e_size_analysis_compare_duration.total_seconds(),
258+
sample_rate=1.0,
259+
tags={
260+
"artifact_type": artifact_type_name,
261+
},
262+
)
263+
else:
264+
logger.info(
265+
"preprod.size_analysis.compare.artifact_no_commit_comparison",
266+
extra={"artifact_id": artifact_id},
267+
)
269268
finally:
270269
send_size_analysis_webhook(artifact=artifact, organization_id=org_id)
271270

0 commit comments

Comments
 (0)