Commit eae5d36
committed
Add persistence barrier for 2PC correctness
The persistence barrier prevents speculative transactions from being
persisted to the durability worker while a 2PC PREPARE is pending.
When prepare_reducer commits a transaction:
1. The PREPARE is sent to the durability worker normally.
2. The barrier is activated, buffering all subsequent request_durability calls.
3. prepare_reducer waits for the PREPARE offset to become durable.
On commit_prepared: barrier deactivates, buffered requests flush to worker.
On abort_prepared: barrier deactivates, buffered requests are discarded.
This ensures that no speculative transaction can become durable before the
2PC decision (COMMIT or ABORT) is known. Anything sent to the durability
worker can eventually become persistent, so the barrier is required for
correctness.
RelationalDB.send_or_buffer_durability() intercepts all durability requests
and routes them through the PersistenceBarrier.try_buffer() check.1 parent 1744f0f commit eae5d36
3 files changed
Lines changed: 219 additions & 29 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
12 | 12 | | |
13 | 13 | | |
14 | 14 | | |
15 | | - | |
| 15 | + | |
16 | 16 | | |
17 | 17 | | |
18 | 18 | | |
| |||
111 | 111 | | |
112 | 112 | | |
113 | 113 | | |
| 114 | + | |
| 115 | + | |
| 116 | + | |
| 117 | + | |
114 | 118 | | |
115 | 119 | | |
116 | 120 | | |
| |||
175 | 179 | | |
176 | 180 | | |
177 | 181 | | |
| 182 | + | |
178 | 183 | | |
179 | 184 | | |
180 | 185 | | |
| |||
820 | 825 | | |
821 | 826 | | |
822 | 827 | | |
823 | | - | |
824 | | - | |
825 | | - | |
| 828 | + | |
826 | 829 | | |
827 | 830 | | |
828 | 831 | | |
| |||
836 | 839 | | |
837 | 840 | | |
838 | 841 | | |
| 842 | + | |
| 843 | + | |
| 844 | + | |
| 845 | + | |
| 846 | + | |
| 847 | + | |
| 848 | + | |
| 849 | + | |
| 850 | + | |
| 851 | + | |
| 852 | + | |
| 853 | + | |
| 854 | + | |
| 855 | + | |
| 856 | + | |
| 857 | + | |
| 858 | + | |
| 859 | + | |
| 860 | + | |
| 861 | + | |
| 862 | + | |
| 863 | + | |
| 864 | + | |
| 865 | + | |
| 866 | + | |
| 867 | + | |
| 868 | + | |
| 869 | + | |
| 870 | + | |
| 871 | + | |
| 872 | + | |
| 873 | + | |
| 874 | + | |
| 875 | + | |
| 876 | + | |
| 877 | + | |
| 878 | + | |
| 879 | + | |
| 880 | + | |
| 881 | + | |
| 882 | + | |
| 883 | + | |
| 884 | + | |
| 885 | + | |
839 | 886 | | |
840 | | - | |
| 887 | + | |
841 | 888 | | |
842 | 889 | | |
843 | | - | |
| 890 | + | |
| 891 | + | |
| 892 | + | |
| 893 | + | |
| 894 | + | |
| 895 | + | |
| 896 | + | |
| 897 | + | |
| 898 | + | |
| 899 | + | |
| 900 | + | |
| 901 | + | |
| 902 | + | |
| 903 | + | |
| 904 | + | |
| 905 | + | |
| 906 | + | |
| 907 | + | |
| 908 | + | |
| 909 | + | |
| 910 | + | |
| 911 | + | |
| 912 | + | |
| 913 | + | |
| 914 | + | |
| 915 | + | |
| 916 | + | |
| 917 | + | |
| 918 | + | |
| 919 | + | |
| 920 | + | |
| 921 | + | |
| 922 | + | |
| 923 | + | |
| 924 | + | |
| 925 | + | |
844 | 926 | | |
845 | 927 | | |
846 | 928 | | |
| |||
851 | 933 | | |
852 | 934 | | |
853 | 935 | | |
| 936 | + | |
| 937 | + | |
| 938 | + | |
| 939 | + | |
| 940 | + | |
854 | 941 | | |
855 | 942 | | |
856 | 943 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1747 | 1747 | | |
1748 | 1748 | | |
1749 | 1749 | | |
1750 | | - | |
1751 | | - | |
1752 | | - | |
| 1750 | + | |
1753 | 1751 | | |
1754 | | - | |
1755 | | - | |
| 1752 | + | |
| 1753 | + | |
| 1754 | + | |
| 1755 | + | |
| 1756 | + | |
| 1757 | + | |
| 1758 | + | |
1756 | 1759 | | |
1757 | 1760 | | |
1758 | 1761 | | |
1759 | 1762 | | |
1760 | 1763 | | |
1761 | 1764 | | |
1762 | 1765 | | |
1763 | | - | |
| 1766 | + | |
| 1767 | + | |
1764 | 1768 | | |
1765 | 1769 | | |
1766 | 1770 | | |
| |||
1773 | 1777 | | |
1774 | 1778 | | |
1775 | 1779 | | |
1776 | | - | |
| 1780 | + | |
1777 | 1781 | | |
1778 | 1782 | | |
1779 | 1783 | | |
1780 | 1784 | | |
1781 | | - | |
1782 | | - | |
1783 | | - | |
| 1785 | + | |
| 1786 | + | |
| 1787 | + | |
| 1788 | + | |
| 1789 | + | |
| 1790 | + | |
| 1791 | + | |
| 1792 | + | |
| 1793 | + | |
1784 | 1794 | | |
1785 | | - | |
| 1795 | + | |
1786 | 1796 | | |
1787 | 1797 | | |
1788 | 1798 | | |
1789 | 1799 | | |
| 1800 | + | |
| 1801 | + | |
| 1802 | + | |
| 1803 | + | |
| 1804 | + | |
| 1805 | + | |
| 1806 | + | |
| 1807 | + | |
| 1808 | + | |
| 1809 | + | |
| 1810 | + | |
| 1811 | + | |
| 1812 | + | |
1790 | 1813 | | |
1791 | 1814 | | |
1792 | 1815 | | |
1793 | 1816 | | |
1794 | 1817 | | |
1795 | 1818 | | |
1796 | 1819 | | |
1797 | | - | |
| 1820 | + | |
1798 | 1821 | | |
1799 | | - | |
1800 | | - | |
| 1822 | + | |
| 1823 | + | |
1801 | 1824 | | |
1802 | | - | |
| 1825 | + | |
1803 | 1826 | | |
1804 | 1827 | | |
| 1828 | + | |
1805 | 1829 | | |
1806 | 1830 | | |
1807 | 1831 | | |
1808 | 1832 | | |
1809 | 1833 | | |
1810 | | - | |
1811 | | - | |
1812 | | - | |
| 1834 | + | |
| 1835 | + | |
1813 | 1836 | | |
1814 | | - | |
| 1837 | + | |
1815 | 1838 | | |
1816 | 1839 | | |
1817 | | - | |
| 1840 | + | |
1818 | 1841 | | |
1819 | 1842 | | |
1820 | 1843 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
5 | 5 | | |
6 | 6 | | |
7 | 7 | | |
8 | | - | |
9 | | - | |
| 8 | + | |
| 9 | + | |
10 | 10 | | |
11 | 11 | | |
12 | 12 | | |
13 | | - | |
| 13 | + | |
14 | 14 | | |
15 | 15 | | |
16 | 16 | | |
| |||
35 | 35 | | |
36 | 36 | | |
37 | 37 | | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
| 55 | + | |
| 56 | + | |
| 57 | + | |
| 58 | + | |
| 59 | + | |
| 60 | + | |
| 61 | + | |
| 62 | + | |
| 63 | + | |
| 64 | + | |
| 65 | + | |
| 66 | + | |
| 67 | + | |
| 68 | + | |
| 69 | + | |
| 70 | + | |
| 71 | + | |
| 72 | + | |
| 73 | + | |
| 74 | + | |
| 75 | + | |
| 76 | + | |
| 77 | + | |
| 78 | + | |
| 79 | + | |
| 80 | + | |
| 81 | + | |
| 82 | + | |
| 83 | + | |
| 84 | + | |
| 85 | + | |
| 86 | + | |
| 87 | + | |
| 88 | + | |
| 89 | + | |
| 90 | + | |
| 91 | + | |
| 92 | + | |
| 93 | + | |
| 94 | + | |
| 95 | + | |
| 96 | + | |
| 97 | + | |
| 98 | + | |
| 99 | + | |
| 100 | + | |
| 101 | + | |
| 102 | + | |
| 103 | + | |
| 104 | + | |
| 105 | + | |
| 106 | + | |
| 107 | + | |
| 108 | + | |
| 109 | + | |
| 110 | + | |
| 111 | + | |
| 112 | + | |
| 113 | + | |
| 114 | + | |
| 115 | + | |
| 116 | + | |
| 117 | + | |
0 commit comments