Commit bc4a151
fix: serialize deleteExtension and publish with a pessimistic lock (#1919)
* test: cover deleteExtension racing a concurrent publish
Adds tests for an extension delete-all racing a publish of a new version: the concurrently published version must not be silently deleted/orphaned, a delete must fail fast (and ask to retry) while a publish holds the extension lock, and deleting your own version while another publisher has one must leave the extension and that version intact.
Assisted-By: anthropic:claude-opus-4-8[1m]
* fix: serialize deleteExtension and publish with a pessimistic lock
Publishing now takes a waiting FOR UPDATE lock on the extension before adding a version, and deleteExtension takes the same lock with NOWAIT. If a publish holds it, the delete fails fast with a 409 ErrorResultException asking the user to retry, instead of removing the aggregate root (and silently deleting the just-published version) out from under the in-flight publish. On retry the new version exists, so it is no longer a delete-all.
* docs: updating comment
* update wording
---------
Co-authored-by: Thomas Neidhart <thomas.neidhart@eclipse-foundation.org>1 parent cbb592e commit bc4a151
9 files changed
Lines changed: 395 additions & 6 deletions
File tree
- server/src
- main/java/org/eclipse/openvsx
- publish
- repositories
- test/java/org/eclipse/openvsx
- publish
- repositories
Lines changed: 21 additions & 3 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
28 | 28 | | |
29 | 29 | | |
30 | 30 | | |
| 31 | + | |
31 | 32 | | |
32 | 33 | | |
33 | 34 | | |
| |||
222 | 223 | | |
223 | 224 | | |
224 | 225 | | |
| 226 | + | |
| 227 | + | |
| 228 | + | |
| 229 | + | |
| 230 | + | |
| 231 | + | |
| 232 | + | |
| 233 | + | |
| 234 | + | |
| 235 | + | |
| 236 | + | |
| 237 | + | |
| 238 | + | |
| 239 | + | |
| 240 | + | |
| 241 | + | |
| 242 | + | |
| 243 | + | |
225 | 244 | | |
226 | | - | |
227 | | - | |
| 245 | + | |
228 | 246 | | |
229 | 247 | | |
230 | 248 | | |
| |||
270 | 288 | | |
271 | 289 | | |
272 | 290 | | |
273 | | - | |
| 291 | + | |
274 | 292 | | |
275 | 293 | | |
276 | 294 | | |
| |||
Lines changed: 3 additions & 1 deletion
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
157 | 157 | | |
158 | 158 | | |
159 | 159 | | |
160 | | - | |
| 160 | + | |
| 161 | + | |
| 162 | + | |
161 | 163 | | |
162 | 164 | | |
163 | 165 | | |
| |||
Lines changed: 21 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
14 | 14 | | |
15 | 15 | | |
16 | 16 | | |
| 17 | + | |
17 | 18 | | |
18 | 19 | | |
19 | 20 | | |
| |||
29 | 30 | | |
30 | 31 | | |
31 | 32 | | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
32 | 53 | | |
33 | 54 | | |
34 | 55 | | |
| |||
Lines changed: 9 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
208 | 208 | | |
209 | 209 | | |
210 | 210 | | |
| 211 | + | |
| 212 | + | |
| 213 | + | |
| 214 | + | |
| 215 | + | |
| 216 | + | |
| 217 | + | |
| 218 | + | |
| 219 | + | |
211 | 220 | | |
212 | 221 | | |
213 | 222 | | |
| |||
0 commit comments