Skip to content

Commit c58b4ba

Browse files
committed
Move indexes from migrations to convergence
Indexes are now managed by `postgres converge` using CREATE/DROP INDEX CONCURRENTLY (non-blocking, autocommit mode). The migration autodetector no longer generates AddIndex/RemoveIndex/RenameIndex operations. Fixes now own their own transaction management — constraints use commit+rollback, indexes use autocommit for CONCURRENTLY. Failed fixes roll back and don't block subsequent fixes in the same run. Strips all index operations from existing migration files.
1 parent 50773a5 commit c58b4ba

41 files changed

Lines changed: 227 additions & 1248 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

plain-cache/plain/cache/migrations/0001_initial.py

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -21,10 +21,4 @@ class Migration(migrations.Migration):
2121
("updated_at", postgres.DateTimeField(auto_now=True)),
2222
],
2323
),
24-
migrations.AddIndex(
25-
model_name="cacheditem",
26-
index=postgres.Index(
27-
fields=["expires_at"], name="plaincache__expires_5a9119_idx"
28-
),
29-
),
3024
]

plain-cache/plain/cache/migrations/0002_rename_plaincache__expires_5a9119_idx_plaincache_cacheditem_expires_at_idx.py

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,4 @@ class Migration(migrations.Migration):
88
("plaincache", "0001_initial"),
99
]
1010

11-
operations = [
12-
migrations.RenameIndex(
13-
model_name="cacheditem",
14-
new_name="plaincache_cacheditem_expires_at_idx",
15-
old_name="plaincache__expires_5a9119_idx",
16-
),
17-
]
11+
operations = []

plain-jobs/plain/jobs/migrations/0001_initial.py

Lines changed: 0 additions & 126 deletions
Original file line numberDiff line numberDiff line change
@@ -93,130 +93,4 @@ class Migration(migrations.Migration):
9393
"ordering": ["-created_at"],
9494
},
9595
),
96-
migrations.AddIndex(
97-
model_name="job",
98-
index=postgres.Index(
99-
fields=["created_at"], name="plainworker_created_a02317_idx"
100-
),
101-
),
102-
migrations.AddIndex(
103-
model_name="job",
104-
index=postgres.Index(fields=["queue"], name="plainworker_queue_077806_idx"),
105-
),
106-
migrations.AddIndex(
107-
model_name="job",
108-
index=postgres.Index(
109-
fields=["unique_key"], name="plainworker_unique__04d87b_idx"
110-
),
111-
),
112-
migrations.AddIndex(
113-
model_name="job",
114-
index=postgres.Index(
115-
fields=["started_at"], name="plainworker_started_143df5_idx"
116-
),
117-
),
118-
migrations.AddIndex(
119-
model_name="job",
120-
index=postgres.Index(
121-
fields=["job_class"], name="plainworker_job_cla_884b46_idx"
122-
),
123-
),
124-
migrations.AddIndex(
125-
model_name="job",
126-
index=postgres.Index(
127-
fields=["job_request_uuid"], name="plainworker_job_req_db2681_idx"
128-
),
129-
),
130-
migrations.AddIndex(
131-
model_name="job",
132-
index=postgres.Index(
133-
fields=["job_class", "unique_key"], name="job_class_unique_key"
134-
),
135-
),
136-
migrations.AddIndex(
137-
model_name="jobrequest",
138-
index=postgres.Index(
139-
fields=["priority"], name="plainworker_priorit_785e73_idx"
140-
),
141-
),
142-
migrations.AddIndex(
143-
model_name="jobrequest",
144-
index=postgres.Index(
145-
fields=["created_at"], name="plainworker_created_c81fe5_idx"
146-
),
147-
),
148-
migrations.AddIndex(
149-
model_name="jobrequest",
150-
index=postgres.Index(fields=["queue"], name="plainworker_queue_2614aa_idx"),
151-
),
152-
migrations.AddIndex(
153-
model_name="jobrequest",
154-
index=postgres.Index(
155-
fields=["start_at"], name="plainworker_start_a_4d6020_idx"
156-
),
157-
),
158-
migrations.AddIndex(
159-
model_name="jobrequest",
160-
index=postgres.Index(
161-
fields=["unique_key"], name="plainworker_unique__21a534_idx"
162-
),
163-
),
164-
migrations.AddIndex(
165-
model_name="jobrequest",
166-
index=postgres.Index(
167-
fields=["job_class"], name="plainworker_job_cla_3e7dea_idx"
168-
),
169-
),
170-
migrations.AddIndex(
171-
model_name="jobrequest",
172-
index=postgres.Index(
173-
fields=["job_class", "unique_key"], name="job_request_class_unique_key"
174-
),
175-
),
176-
migrations.AddIndex(
177-
model_name="jobresult",
178-
index=postgres.Index(
179-
fields=["created_at"], name="plainworker_created_6894c5_idx"
180-
),
181-
),
182-
migrations.AddIndex(
183-
model_name="jobresult",
184-
index=postgres.Index(
185-
fields=["job_uuid"], name="plainworker_job_uui_8307d1_idx"
186-
),
187-
),
188-
migrations.AddIndex(
189-
model_name="jobresult",
190-
index=postgres.Index(
191-
fields=["started_at"], name="plainworker_started_9bce76_idx"
192-
),
193-
),
194-
migrations.AddIndex(
195-
model_name="jobresult",
196-
index=postgres.Index(
197-
fields=["ended_at"], name="plainworker_ended_a_63caaf_idx"
198-
),
199-
),
200-
migrations.AddIndex(
201-
model_name="jobresult",
202-
index=postgres.Index(
203-
fields=["status"], name="plainworker_status_a7ca35_idx"
204-
),
205-
),
206-
migrations.AddIndex(
207-
model_name="jobresult",
208-
index=postgres.Index(
209-
fields=["job_request_uuid"], name="plainworker_job_req_1e1bf2_idx"
210-
),
211-
),
212-
migrations.AddIndex(
213-
model_name="jobresult",
214-
index=postgres.Index(
215-
fields=["job_class"], name="plainworker_job_cla_d138b5_idx"
216-
),
217-
),
218-
migrations.AddIndex(
219-
model_name="jobresult",
220-
index=postgres.Index(fields=["queue"], name="plainworker_queue_23d8fe_idx"),
221-
),
22296
]

plain-jobs/plain/jobs/migrations/0002_job_span_id_job_trace_id_jobrequest_span_id_and_more.py

Lines changed: 0 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -40,22 +40,4 @@ class Migration(migrations.Migration):
4040
name="trace_id",
4141
field=postgres.TextField(allow_null=True, max_length=34, required=False),
4242
),
43-
migrations.AddIndex(
44-
model_name="job",
45-
index=postgres.Index(
46-
fields=["trace_id"], name="plainworker_trace_i_d2b645_idx"
47-
),
48-
),
49-
migrations.AddIndex(
50-
model_name="jobrequest",
51-
index=postgres.Index(
52-
fields=["trace_id"], name="plainworker_trace_i_e9dfc5_idx"
53-
),
54-
),
55-
migrations.AddIndex(
56-
model_name="jobresult",
57-
index=postgres.Index(
58-
fields=["trace_id"], name="plainworker_trace_i_00c75f_idx"
59-
),
60-
),
6143
]

plain-jobs/plain/jobs/migrations/0003_rename_job_jobprocess_and_more.py

Lines changed: 0 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
# Generated by Plain 0.63.0 on 2025-09-15 21:29
22

3-
from plain import postgres
43
from plain.postgres import migrations
54

65

@@ -14,56 +13,11 @@ class Migration(migrations.Migration):
1413
old_name="Job",
1514
new_name="JobProcess",
1615
),
17-
migrations.RemoveIndex(
18-
model_name="jobresult",
19-
name="plainworker_job_uui_8307d1_idx",
20-
),
2116
migrations.RenameField(
2217
model_name="jobresult",
2318
old_name="job_uuid",
2419
new_name="job_process_uuid",
2520
),
26-
migrations.RenameIndex(
27-
model_name="jobprocess",
28-
new_name="plainworker_created_0d3928_idx",
29-
old_name="plainworker_created_a02317_idx",
30-
),
31-
migrations.RenameIndex(
32-
model_name="jobprocess",
33-
new_name="plainworker_queue_2550ba_idx",
34-
old_name="plainworker_queue_077806_idx",
35-
),
36-
migrations.RenameIndex(
37-
model_name="jobprocess",
38-
new_name="plainworker_unique__9dc0bb_idx",
39-
old_name="plainworker_unique__04d87b_idx",
40-
),
41-
migrations.RenameIndex(
42-
model_name="jobprocess",
43-
new_name="plainworker_started_b80ec5_idx",
44-
old_name="plainworker_started_143df5_idx",
45-
),
46-
migrations.RenameIndex(
47-
model_name="jobprocess",
48-
new_name="plainworker_job_cla_fe2b70_idx",
49-
old_name="plainworker_job_cla_884b46_idx",
50-
),
51-
migrations.RenameIndex(
52-
model_name="jobprocess",
53-
new_name="plainworker_job_req_357898_idx",
54-
old_name="plainworker_job_req_db2681_idx",
55-
),
56-
migrations.RenameIndex(
57-
model_name="jobprocess",
58-
new_name="plainworker_trace_i_da2cfa_idx",
59-
old_name="plainworker_trace_i_d2b645_idx",
60-
),
61-
migrations.AddIndex(
62-
model_name="jobresult",
63-
index=postgres.Index(
64-
fields=["job_process_uuid"], name="plainworker_job_pro_ceabfb_idx"
65-
),
66-
),
6721
# To fix subsequent migrations...
6822
migrations.AlterModelTable(
6923
name="JobRequest",

plain-jobs/plain/jobs/migrations/0005_rename_constraints_and_indexes.py

Lines changed: 1 addition & 118 deletions
Original file line numberDiff line numberDiff line change
@@ -9,121 +9,4 @@ class Migration(migrations.Migration):
99
("plainjobs", "0004_rename_tables_to_plainjobs"),
1010
]
1111

12-
operations = [
13-
# Rename indexes
14-
migrations.RenameIndex(
15-
model_name="jobprocess",
16-
new_name="plainjobs_j_created_04fbb8_idx",
17-
old_name="plainworker_created_0d3928_idx",
18-
),
19-
migrations.RenameIndex(
20-
model_name="jobprocess",
21-
new_name="plainjobs_j_queue_d07d21_idx",
22-
old_name="plainworker_queue_2550ba_idx",
23-
),
24-
migrations.RenameIndex(
25-
model_name="jobprocess",
26-
new_name="plainjobs_j_unique__67172c_idx",
27-
old_name="plainworker_unique__9dc0bb_idx",
28-
),
29-
migrations.RenameIndex(
30-
model_name="jobprocess",
31-
new_name="plainjobs_j_started_5cd62a_idx",
32-
old_name="plainworker_started_b80ec5_idx",
33-
),
34-
migrations.RenameIndex(
35-
model_name="jobprocess",
36-
new_name="plainjobs_j_job_cla_19f3c1_idx",
37-
old_name="plainworker_job_cla_fe2b70_idx",
38-
),
39-
migrations.RenameIndex(
40-
model_name="jobprocess",
41-
new_name="plainjobs_j_job_req_32b6eb_idx",
42-
old_name="plainworker_job_req_357898_idx",
43-
),
44-
migrations.RenameIndex(
45-
model_name="jobprocess",
46-
new_name="plainjobs_j_trace_i_9f93c8_idx",
47-
old_name="plainworker_trace_i_da2cfa_idx",
48-
),
49-
migrations.RenameIndex(
50-
model_name="jobrequest",
51-
new_name="plainjobs_j_priorit_fd4fac_idx",
52-
old_name="plainworker_priorit_785e73_idx",
53-
),
54-
migrations.RenameIndex(
55-
model_name="jobrequest",
56-
new_name="plainjobs_j_created_1eeb20_idx",
57-
old_name="plainworker_created_c81fe5_idx",
58-
),
59-
migrations.RenameIndex(
60-
model_name="jobrequest",
61-
new_name="plainjobs_j_queue_b34b5a_idx",
62-
old_name="plainworker_queue_2614aa_idx",
63-
),
64-
migrations.RenameIndex(
65-
model_name="jobrequest",
66-
new_name="plainjobs_j_start_a_f3b8da_idx",
67-
old_name="plainworker_start_a_4d6020_idx",
68-
),
69-
migrations.RenameIndex(
70-
model_name="jobrequest",
71-
new_name="plainjobs_j_unique__42f6a6_idx",
72-
old_name="plainworker_unique__21a534_idx",
73-
),
74-
migrations.RenameIndex(
75-
model_name="jobrequest",
76-
new_name="plainjobs_j_job_cla_a18abf_idx",
77-
old_name="plainworker_job_cla_3e7dea_idx",
78-
),
79-
migrations.RenameIndex(
80-
model_name="jobrequest",
81-
new_name="plainjobs_j_trace_i_194003_idx",
82-
old_name="plainworker_trace_i_e9dfc5_idx",
83-
),
84-
migrations.RenameIndex(
85-
model_name="jobresult",
86-
new_name="plainjobs_j_created_7978bf_idx",
87-
old_name="plainworker_created_6894c5_idx",
88-
),
89-
migrations.RenameIndex(
90-
model_name="jobresult",
91-
new_name="plainjobs_j_job_pro_751a64_idx",
92-
old_name="plainworker_job_pro_ceabfb_idx",
93-
),
94-
migrations.RenameIndex(
95-
model_name="jobresult",
96-
new_name="plainjobs_j_started_6fb2ce_idx",
97-
old_name="plainworker_started_9bce76_idx",
98-
),
99-
migrations.RenameIndex(
100-
model_name="jobresult",
101-
new_name="plainjobs_j_ended_a_648f25_idx",
102-
old_name="plainworker_ended_a_63caaf_idx",
103-
),
104-
migrations.RenameIndex(
105-
model_name="jobresult",
106-
new_name="plainjobs_j_status_1ef683_idx",
107-
old_name="plainworker_status_a7ca35_idx",
108-
),
109-
migrations.RenameIndex(
110-
model_name="jobresult",
111-
new_name="plainjobs_j_job_req_3ddecf_idx",
112-
old_name="plainworker_job_req_1e1bf2_idx",
113-
),
114-
migrations.RenameIndex(
115-
model_name="jobresult",
116-
new_name="plainjobs_j_job_cla_8791b4_idx",
117-
old_name="plainworker_job_cla_d138b5_idx",
118-
),
119-
migrations.RenameIndex(
120-
model_name="jobresult",
121-
new_name="plainjobs_j_queue_0a2178_idx",
122-
old_name="plainworker_queue_23d8fe_idx",
123-
),
124-
migrations.RenameIndex(
125-
model_name="jobresult",
126-
new_name="plainjobs_j_trace_i_02f370_idx",
127-
old_name="plainworker_trace_i_00c75f_idx",
128-
),
129-
]
12+
operations = []

0 commit comments

Comments
 (0)