• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

kobotoolbox / kpi / 37357713478
83%
master: 76%

Build:
Build:
LAST BUILD BRANCH: guitlle/dev-3097-sso-new-accounts-provisioning
DEFAULT BRANCH: master
Ran 05 Oct 2026 06:45PM UTC
Jobs 10
Files 914
Run time 2min
Badge
Embed ▾
README BADGES
x

If you need to use a raster PNG badge, change the '.svg' to '.png' in the link

Markdown

Textile

RDoc

HTML

Rst

05 Oct 2026 06:40PM UTC coverage: 82.98% (+0.006%) from 82.974%
37357713478

push

github

web-flow
fix(trashBin): stop suspending owner submissions during project deletion DEV-3009 (#7666)

### đŸ“Ŗ Summary

Permanently deleting a project no longer pauses data collection on the
owner's other projects.

### 📖 Description

While a project was being permanently deleted, every other project of
the same owner refused new submissions until the deletion finished. If
the deletion kept failing, the owner couldn't collect data on any
project at all. Now the owner's other projects keep accepting
submissions while a project is being deleted.

### 💭 Notes

- Partial revert of DEV-2513 (#7553): `delete_asset()` no longer wraps
the deletion in `suspend_submissions(owner)`. `submissions_suspended` is
only meant for counter sync, so the storage recount keeps using it
(holders, lease and `release_orphaned_suspensions()` are unchanged, only
their comments are).
- The trashed project itself still refuses submissions: trashing sets
`XForm.downloadable=False`, so `check_active()` raises
`FormInactiveError`.
- Why it matters: when a deletion worker is killed without a traceback
(e.g. OOM), `finally` never runs and the flag stays on. `task_restarter`
then re-runs the deletion every 30 min and suspends the owner again.
- Tradeoff: the deadlock DEV-2513 was after can come back, but DEV-2511
already makes it retryable. A deletion and a submission to another
project only share the `UserProfile` row, so the likelier cause is two
deletions of the same owner racing on the catch-all counters
(`update_catch_all_counter_on_delete` loops without `order_by`). That's
a follow-up.
- This doesn't unlock accounts that are already suspended. They have no
live holder anymore, so `fix_stale_submissions_suspended_flag` will
release them.

### 👀 Preview steps

1. â„šī¸ have an account with two deployed projects, A and B
2. move A to the trash and empty it
3. while the deletion runs (e.g. with a breakpoint in
`_delete_submissions()`), submit to B
4. 🔴 [on main] B answers 503 "Temporarily unavailable... (continued)

10303 of 13642 branches covered (75.52%)

0 of 2 new or added lines in 1 file covered. (0.0%)

2837 existing lines in 127 files now uncovered.

32958 of 39718 relevant lines covered (82.98%)

5.5 hits per line

Uncovered Changes

Lines Coverage ∆ File
2
26.42
-1.66% kobo/apps/trash_bin/utils/project.py

Coverage Regressions

Lines Coverage ∆ File
196
26.4
-55.06% kpi/serializers/v2/asset_permission_assignment.py
188
64.49
-29.28% kpi/serializers/v2/asset.py
170
47.22
-27.78% kpi/deployment_backends/openrosa_backend.py
139
37.13
-45.28% kpi/views/v2/data.py
120
69.95
-16.17% kpi/models/import_export_task.py
100
61.99
-26.95% kpi/views/v2/asset.py
91
29.45
-62.33% kpi/serializers/v2/asset_file.py
73
26.89
-61.34% kpi/serializers/v2/paired_data.py
70
30.16
-55.56% kpi/serializers/v2/export_task.py
64
67.38
-15.24% kpi/deployment_backends/base_backend.py
64
34.55
-58.18% kpi/views/v2/paired_data.py
62
24.84
-40.52% kobo/apps/trash_bin/utils/trash.py
62
44.07
-52.54% kpi/views/v2/environment.py
57
27.43
-50.44% kpi/utils/models.py
48
75.0
-21.82% kpi/permissions.py
46
32.21
-14.11% kobo/apps/subsequences/models.py
43
56.81
-20.19% kpi/filters.py
42
49.47
-44.21% kpi/views/v2/asset_permission_assignment.py
41
52.78
-18.98% kpi/renderers.py
41
65.85
-33.33% kpi/utils/usage_calculator.py
41
43.7
-30.37% kpi/views/v2/asset_snapshot.py
40
44.96
-31.01% kobo/apps/project_views/views.py
33
66.4
-26.4% kpi/models/paired_data.py
32
31.03
-18.39% kobo/apps/project_ownership/utils.py
32
50.75
-47.76% kpi/views/v2/asset_export_settings.py
31
61.54
-23.85% kobo/apps/openrosa/apps/logger/utils/instance.py
31
36.46
-17.13% kpi/serializers/current_user.py
31
8.11
-83.78% kpi/utils/ss_structure_to_mdtable.py
27
83.0
-13.5% kpi/utils/xml.py
26
27.5
-65.0% kpi/serializers/v2/attachment_delete.py
25
31.11
-55.56% kpi/serializers/v2/data.py
24
59.32
-40.68% kpi/views/v2/export_task.py
23
41.86
-53.49% kpi/serializers/v2/deployment.py
23
71.43
-27.38% kpi/serializers/v2/service_usage.py
22
50.98
-43.14% kpi/serializers/v2/asset_snapshot.py
22
55.56
-40.74% kpi/serializers/v2/permission.py
21
77.67
-10.19% kobo/apps/project_ownership/models/transfer.py
21
48.84
-48.84% kobo/apps/trash_bin/models/project.py
21
38.33
-35.0% kpi/serializers/v2/asset_export_settings.py
19
33.33
-63.33% kpi/utils/paired_data.py
19
51.06
-40.43% kpi/views/v2/import_task.py
19
49.25
-28.36% kpi/views/v2/user.py
18
17.7
-15.93% kobo/apps/subsequences/actions/mixins.py
18
69.23
-23.08% kpi/authentication.py
18
48.65
-48.65% kpi/views/v2/attachment_audio_duration.py
17
44.12
-50.0% kpi/utils/rename_xls_sheet.py
16
35.91
-6.18% kobo/apps/subsequences/actions/base.py
16
55.81
-37.21% kpi/backends.py
16
75.21
-13.68% kpi/models/asset_snapshot.py
16
28.0
-64.0% kpi/utils/audio_duration.py
16
62.9
-25.81% kpi/views/v2/attachment.py
15
28.57
-71.43% kobo/apps/trash_bin/utils/signals.py
15
73.68
-26.32% kpi/views/v2/asset_file.py
14
85.29
-13.73% kpi/models/asset_file.py
13
27.69
-10.0% kobo/apps/project_ownership/tasks.py
13
40.0
-43.33% kpi/serializers/v2/asset_counts.py
13
79.05
-12.38% kpi/utils/object_permission.py
13
30.43
-56.52% kpi/utils/private_storage.py
12
83.33
-10.0% kobo/apps/openrosa/apps/logger/models/attachment.py
12
68.79
-8.51% kobo/apps/stripe/utils/subscription_limits.py
12
57.14
-42.86% kobo/apps/subsequences/utils/supplement_data.py
12
91.65
-2.04% kpi/models/asset.py
11
75.93
-20.37% kpi/serializers/v2/user.py
10
20.55
-13.7% kobo/apps/stripe/signals.py
10
33.33
-37.04% kpi/mixins/audio_transcoding.py
10
63.33
-33.33% kpi/views/v2/asset_version.py
9
47.73
-20.45% kobo/apps/trash_bin/models/attachment.py
9
77.07
-4.39% kpi/utils/mongo_helper.py
8
91.05
-4.21% kobo/apps/openrosa/apps/api/viewsets/xform_list_api.py
8
56.57
-8.08% kobo/apps/stripe/utils/billing_dates.py
8
85.71
-11.43% kpi/utils/cache.py
7
81.08
-18.92% kobo/apps/project_views/serializers.py
7
92.92
-1.91% kpi/mixins/object_permission.py
7
52.94
-41.18% kpi/serializers/v2/reports.py
7
61.9
-16.67% kpi/utils/urls.py
7
74.07
-25.93% kpi/views/v2/attachment_delete.py
6
69.12
-4.41% kpi/utils/autoname.py
5
62.07
-5.75% kpi/tasks.py
5
76.0
-20.0% kpi/views/v2/asset_submission_counts.py
5
61.54
-38.46% kpi/views/v2/logout.py
5
73.91
-21.74% kpi/views/v2/user_asset_subscription.py
4
63.27
-8.16% kobo/apps/hook/views/v2/hook_log.py
4
80.0
-16.0% kobo/apps/openrosa/apps/logger/utils/attachment.py
4
69.9
-2.04% kpi/mixins/formpack_xlsform_utils.py
4
75.94
-3.01% kpi/paginators.py
4
76.19
-19.05% kpi/serializers/v2/user_asset_subscription.py
4
83.33
-16.67% kpi/views/v2/tag.py
3
59.32
-5.08% kobo/apps/hook/views/v2/hook.py
3
62.16
-8.11% kobo/apps/openrosa/apps/logger/utils/database_query.py
3
64.88
-1.79% kobo/apps/openrosa/apps/main/models/meta_data.py
3
63.33
-5.0% kobo/apps/openrosa/apps/main/models/user_profile.py
3
70.0
-30.0% kpi/fields/serializer_method_file.py
3
80.95
-14.29% kpi/fields/writable_json.py
3
80.0
-20.0% kpi/serializers/v2/attachment_audio_duration.py
3
85.37
-7.32% kpi/utils/submission.py
3
75.0
-25.0% kpi/views/v2/open_rosa.py
3
84.21
-15.79% kpi/views/v2/permission.py
2
56.25
-4.17% kobo/apps/hook/serializers/v2/hook.py
2
78.43
-3.92% kobo/apps/kobo_auth/models.py
2
78.08
-2.74% kobo/apps/openrosa/libs/utils/image_tools.py
2
89.58
1.04% kobo/apps/openrosa/libs/utils/logger_tools.py
2
61.08
-1.08% kobo/apps/organizations/models.py
2
26.42
-1.66% kobo/apps/trash_bin/utils/project.py
2
85.71
-14.29% kpi/mixins/asset.py
2
66.67
-16.67% kpi/mixins/validation_password_permission.py
2
81.82
-18.18% kpi/serializers/v2/tag.py
2
96.55
-2.3% kpi/utils/asset_content_analyzer.py
2
91.43
-5.71% kpi/utils/project_views.py
2
92.11
-1.05% kpi/utils/query_parser/query_parser.py
2
85.92
-2.82% kpi/utils/sluggify.py
2
88.24
-11.76% kpi/views/v2/service_usage.py
1
90.48
-0.79% kobo/apps/openrosa/apps/logger/signals.py
1
88.85
-0.35% kobo/apps/openrosa/apps/logger/xform_instance_parser.py
1
74.58
-0.42% kobo/apps/openrosa/apps/viewer/models/parsed_instance.py
1
84.27
-1.12% kobo/apps/reports/report_data.py
1
68.18
-2.27% kobo/apps/stripe/utils/limit_enforcement.py
1
75.0
-25.0% kpi/fields/read_only.py
1
82.61
-4.35% kpi/fields/relative_prefix_hyperlinked_related.py
1
90.0
-10.0% kpi/mixins/mfa.py
1
95.65
-2.17% kpi/serializers/v2/asset_version.py
1
50.0
-50.0% kpi/utils/export_task.py
1
75.0
-25.0% kpi/utils/gravatar_url.py
1
88.73
-1.41% kpi/utils/hash.py
1
94.12
-5.88% kpi/utils/strings.py
1
84.62
-7.69% kpi/versioning.py
1
55.56
-2.22% kpi/views/current_user.py
1
93.33
-6.67% kpi/views/v2/asset_usage.py
Jobs
ID Job ID Ran Files Coverage
1 37357713478.1 05 Oct 2026 06:45PM UTC 909
49.82
2 37357713478.2 05 Oct 2026 06:45PM UTC 909
43.71
3 37357713478.3 05 Oct 2026 06:45PM UTC 909
52.55
4 37357713478.4 05 Oct 2026 06:46PM UTC 911
44.99
5 37357713478.5 05 Oct 2026 06:46PM UTC 911
51.07
6 37357713478.6 05 Oct 2026 06:48PM UTC 911
53.79
7 37357713478.7 05 Oct 2026 06:49PM UTC 909
58.47
8 37357713478.8 05 Oct 2026 06:50PM UTC 912
67.63
9 37357713478.9 05 Oct 2026 06:50PM UTC 911
59.54
10 37357713478.10 05 Oct 2026 06:52PM UTC 914
69.94
Source Files on build 37357713478
  • Tree
  • List 914
  • Changed 4
  • Source Changed 0
  • Coverage Changed 4
Coverage ∆ File Lines Relevant Covered Missed Hits/Line Branch Hits Branch Misses
  • Back to Repo
  • 4aa14252 on github
  • Prev Build on release/2.026.37 (#36744966686)
  • Next Build on release/2.026.37 (#37471474843)
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE TRIAL · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc