Repository navigation
Commit e13228a
authored
fix(projects): fence file writers with a shared Project lock (#9025)
* fix(projects): fence file writers with a shared Project lock
lockWorkspaceProject now takes the Project key shared, so file writers in
one Project no longer serialize against each other while exclusive holders
(fork, split, archive, payer transfer, departure, account deletion,
retention) still fence them. lockWorkspaceProjectExclusive keeps the old
semantics for requireForkProject, splitForkProject, and archiveWorkspace.
Organization departure takes the departing workspaces' Project locks before
rewriting workspace owners, matching the writers' Project -> workspace row
-> payer order instead of inverting it.
Payer transfer skips zero-byte contributions before the destination payer
check, locks Projects in one ordered call instead of one-by-one and twice,
and drops the test-only changeWorkspaceStoragePayersInTx entry point.
* fix(files): lock the workspace row before bulk archive and folder restore
Their multi-row deleted_at updates fire the search-index trigger, which upserts the dispatch
queue row before later file rows are locked. A concurrent content write holds the workspace
row and a file row and then waits on that queue row, so the two could deadlock. The exclusive
Project lock used to hide this; take the workspace row first, the order every file writer uses.
* fix(files): lock the workspace row before path-based folder delete archives file rows1 parent 2d0c050 commit e13228a
8 files changed
Lines changed: 176 additions & 177 deletions
File tree
- apps/sim/lib
- billing
- organizations
- storage
- projects
- __integration__
- uploads/contexts/workspace
- workspaces
- packages/testing/src/mocks
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
65 | 65 | | |
66 | 66 | | |
67 | 67 | | |
68 | | - | |
| 68 | + | |
| 69 | + | |
| 70 | + | |
| 71 | + | |
69 | 72 | | |
70 | 73 | | |
71 | 74 | | |
| |||
569 | 572 | | |
570 | 573 | | |
571 | 574 | | |
| 575 | + | |
| 576 | + | |
572 | 577 | | |
573 | 578 | | |
574 | 579 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
67 | 67 | | |
68 | 68 | | |
69 | 69 | | |
| 70 | + | |
70 | 71 | | |
71 | | - | |
72 | 72 | | |
73 | | - | |
| 73 | + | |
74 | 74 | | |
75 | 75 | | |
76 | 76 | | |
| |||
277 | 277 | | |
278 | 278 | | |
279 | 279 | | |
280 | | - | |
| 280 | + | |
281 | 281 | | |
282 | 282 | | |
283 | 283 | | |
| |||
508 | 508 | | |
509 | 509 | | |
510 | 510 | | |
511 | | - | |
| 511 | + | |
512 | 512 | | |
513 | 513 | | |
514 | 514 | | |
| |||
537 | 537 | | |
538 | 538 | | |
539 | 539 | | |
540 | | - | |
541 | | - | |
542 | | - | |
543 | | - | |
544 | | - | |
545 | | - | |
546 | | - | |
547 | | - | |
548 | | - | |
549 | | - | |
550 | | - | |
551 | | - | |
552 | | - | |
553 | | - | |
| 540 | + | |
| 541 | + | |
| 542 | + | |
| 543 | + | |
| 544 | + | |
| 545 | + | |
| 546 | + | |
| 547 | + | |
| 548 | + | |
| 549 | + | |
| 550 | + | |
| 551 | + | |
| 552 | + | |
| 553 | + | |
| 554 | + | |
| 555 | + | |
| 556 | + | |
| 557 | + | |
| 558 | + | |
| 559 | + | |
554 | 560 | | |
| 561 | + | |
555 | 562 | | |
556 | | - | |
557 | | - | |
558 | | - | |
| 563 | + | |
| 564 | + | |
559 | 565 | | |
560 | 566 | | |
561 | | - | |
562 | | - | |
563 | | - | |
564 | | - | |
565 | | - | |
566 | | - | |
567 | | - | |
568 | | - | |
569 | | - | |
570 | | - | |
571 | | - | |
572 | | - | |
573 | | - | |
| 567 | + | |
| 568 | + | |
574 | 569 | | |
| 570 | + | |
| 571 | + | |
575 | 572 | | |
576 | 573 | | |
577 | 574 | | |
| |||
594 | 591 | | |
595 | 592 | | |
596 | 593 | | |
597 | | - | |
598 | | - | |
599 | | - | |
600 | | - | |
601 | | - | |
602 | | - | |
603 | | - | |
604 | | - | |
605 | | - | |
606 | | - | |
607 | | - | |
608 | | - | |
| 594 | + | |
| 595 | + | |
| 596 | + | |
| 597 | + | |
| 598 | + | |
| 599 | + | |
| 600 | + | |
| 601 | + | |
| 602 | + | |
| 603 | + | |
| 604 | + | |
| 605 | + | |
| 606 | + | |
| 607 | + | |
| 608 | + | |
609 | 609 | | |
610 | 610 | | |
611 | | - | |
| 611 | + | |
612 | 612 | | |
613 | 613 | | |
614 | | - | |
| 614 | + | |
| 615 | + | |
615 | 616 | | |
616 | 617 | | |
617 | 618 | | |
| |||
636 | 637 | | |
637 | 638 | | |
638 | 639 | | |
639 | | - | |
640 | | - | |
641 | | - | |
642 | | - | |
643 | | - | |
644 | | - | |
| 640 | + | |
| 641 | + | |
| 642 | + | |
| 643 | + | |
| 644 | + | |
645 | 645 | | |
646 | | - | |
| 646 | + | |
| 647 | + | |
| 648 | + | |
| 649 | + | |
| 650 | + | |
647 | 651 | | |
648 | | - | |
649 | | - | |
| 652 | + | |
| 653 | + | |
650 | 654 | | |
651 | 655 | | |
652 | 656 | | |
653 | 657 | | |
654 | | - | |
| 658 | + | |
| 659 | + | |
| 660 | + | |
| 661 | + | |
| 662 | + | |
655 | 663 | | |
656 | 664 | | |
657 | 665 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
13 | 13 | | |
14 | 14 | | |
15 | 15 | | |
16 | | - | |
| 16 | + | |
17 | 17 | | |
18 | 18 | | |
19 | 19 | | |
| |||
384 | 384 | | |
385 | 385 | | |
386 | 386 | | |
387 | | - | |
388 | | - | |
389 | | - | |
390 | | - | |
391 | | - | |
392 | | - | |
393 | | - | |
| 387 | + | |
| 388 | + | |
| 389 | + | |
394 | 390 | | |
395 | | - | |
396 | | - | |
397 | | - | |
398 | | - | |
399 | | - | |
400 | | - | |
401 | | - | |
402 | 391 | | |
403 | 392 | | |
404 | | - | |
405 | | - | |
| 393 | + | |
406 | 394 | | |
407 | 395 | | |
408 | 396 | | |
| |||
442 | 430 | | |
443 | 431 | | |
444 | 432 | | |
445 | | - | |
446 | | - | |
447 | | - | |
| 433 | + | |
448 | 434 | | |
449 | 435 | | |
450 | | - | |
451 | | - | |
452 | | - | |
453 | | - | |
454 | | - | |
455 | | - | |
456 | | - | |
457 | | - | |
| 436 | + | |
| 437 | + | |
| 438 | + | |
| 439 | + | |
| 440 | + | |
458 | 441 | | |
459 | 442 | | |
460 | 443 | | |
461 | 444 | | |
462 | 445 | | |
463 | | - | |
464 | | - | |
465 | | - | |
466 | | - | |
467 | | - | |
468 | | - | |
469 | | - | |
470 | | - | |
471 | | - | |
472 | | - | |
473 | | - | |
474 | | - | |
475 | | - | |
476 | | - | |
477 | | - | |
478 | | - | |
479 | | - | |
480 | | - | |
481 | | - | |
482 | | - | |
483 | | - | |
484 | | - | |
485 | | - | |
486 | | - | |
487 | | - | |
488 | | - | |
489 | | - | |
490 | | - | |
491 | | - | |
492 | | - | |
493 | | - | |
494 | | - | |
495 | | - | |
496 | | - | |
497 | | - | |
498 | | - | |
499 | | - | |
500 | | - | |
501 | | - | |
502 | | - | |
503 | | - | |
504 | | - | |
505 | | - | |
506 | | - | |
507 | | - | |
508 | | - | |
509 | | - | |
510 | | - | |
511 | | - | |
512 | | - | |
513 | | - | |
514 | | - | |
515 | | - | |
516 | | - | |
517 | | - | |
518 | | - | |
519 | | - | |
520 | | - | |
521 | | - | |
522 | | - | |
523 | | - | |
524 | | - | |
525 | | - | |
526 | | - | |
527 | | - | |
528 | | - | |
529 | | - | |
530 | | - | |
531 | | - | |
532 | | - | |
533 | | - | |
534 | | - | |
535 | | - | |
536 | | - | |
537 | 446 | | |
538 | 447 | | |
539 | 448 | | |
| |||
796 | 705 | | |
797 | 706 | | |
798 | 707 | | |
| 708 | + | |
| 709 | + | |
| 710 | + | |
| 711 | + | |
799 | 712 | | |
800 | 713 | | |
801 | 714 | | |
| 715 | + | |
802 | 716 | | |
803 | 717 | | |
804 | 718 | | |
| |||
809 | 723 | | |
810 | 724 | | |
811 | 725 | | |
812 | | - | |
813 | 726 | | |
814 | 727 | | |
815 | 728 | | |
| |||
905 | 818 | | |
906 | 819 | | |
907 | 820 | | |
| 821 | + | |
908 | 822 | | |
909 | 823 | | |
910 | 824 | | |
| |||
967 | 881 | | |
968 | 882 | | |
969 | 883 | | |
970 | | - | |
| 884 | + | |
971 | 885 | | |
972 | 886 | | |
973 | 887 | | |
| |||
1043 | 957 | | |
1044 | 958 | | |
1045 | 959 | | |
1046 | | - | |
| 960 | + | |
1047 | 961 | | |
1048 | 962 | | |
1049 | 963 | | |
| |||
0 commit comments