forked from orioledb/orioledb
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathcheckpoint_update_test.py
178 lines (142 loc) · 4.87 KB
/
checkpoint_update_test.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
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
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
#!/usr/bin/env python3
# coding: utf-8
from .checkpoint_update_base_test import CheckpointUpdateBaseTest
class CheckpointUpdateTest(CheckpointUpdateBaseTest):
def test_concurrent_update_eviction_single_checkpoint(self):
self.concurrent_update_eviction_base(False, False, False, 0)
def test_concurrent_update_eviction_first_checkpoint(self):
self.concurrent_update_eviction_base(False, False, False, 3)
def test_concurrent_update_eviction_middle_checkpoint(self):
self.concurrent_update_eviction_base(False, True, False, 1)
def test_concurrent_update_eviction_many_checkpoints(self):
self.concurrent_update_eviction_base(False, True, True, 5, False)
def test_concurrent_update_eviction_many_update_checkpoints(self):
self.concurrent_update_eviction_base(False, True, True, 5)
def test_checkpoint_rll(self):
node = self.node
node.start()
node.safe_psql('postgres',
"CREATE EXTENSION IF NOT EXISTS orioledb;\n"
"CREATE TABLE IF NOT EXISTS o_checkpoint (\n"
" id int NOT NULL,\n"
" value text NOT NULL,\n"
" PRIMARY KEY (id)\n"
") USING orioledb;\n"
"INSERT INTO o_checkpoint\n"
" (SELECT id, repeat('x', 250) || id FROM generate_series(1, 1000, 1) id);\n")
con1 = node.connect()
con2 = node.connect()
con1.begin()
con2.begin()
con1.execute("SELECT * FROM o_checkpoint WHERE id BETWEEN 1 and 20 FOR KEY SHARE;")
con1.execute("SELECT * FROM o_checkpoint WHERE id BETWEEN 1 and 10 FOR SHARE;")
con2.execute("SELECT * FROM o_checkpoint WHERE id BETWEEN 11 and 20 FOR NO KEY UPDATE;")
con2.execute("SELECT * FROM o_checkpoint WHERE id BETWEEN 21 and 30 FOR UPDATE;")
node.safe_psql("CHECKPOINT;")
con1.commit()
con2.commit()
con1.close()
con2.close()
node.stop(['-m', 'immediate'])
node.start()
node.safe_psql("SELECT * FROM o_checkpoint;")
self.assertEqual(node.execute("SELECT COUNT(*) FROM o_checkpoint;")[0][0], 1000)
node.stop()
def test_checkpoint_rll2(self):
node = self.node
node.start()
node.safe_psql('postgres', """
CREATE EXTENSION IF NOT EXISTS orioledb;
CREATE TABLE IF NOT EXISTS o_checkpoint (
id int NOT NULL,
PRIMARY KEY (id)
) USING orioledb;
INSERT INTO o_checkpoint
(SELECT id FROM generate_series(1, 3) id);
""")
node.safe_psql("""
CREATE TABLE o_test(a int PRIMARY KEY) USING orioledb;
""")
con1 = node.connect()
con2 = node.connect()
con1.begin()
con2.begin()
con1.execute("SELECT * FROM o_checkpoint WHERE id BETWEEN 1 and 2 FOR KEY SHARE;")
con2.execute("SELECT * FROM o_checkpoint WHERE id BETWEEN 2 and 3 FOR NO KEY UPDATE;")
node.safe_psql("CHECKPOINT;")
con1.commit()
con2.commit()
con1.close()
con2.close()
node.stop(['-m', 'immediate'])
node.start()
node.safe_psql("SELECT * FROM o_checkpoint;")
self.assertEqual(node.execute("SELECT COUNT(*) FROM o_checkpoint;")[0][0], 3)
node.stop()
def test_checkpoint_rll3(self):
node = self.node
node.start()
node.safe_psql('postgres', """
CREATE EXTENSION IF NOT EXISTS orioledb;
CREATE TABLE IF NOT EXISTS o_checkpoint (
id int NOT NULL,
val_1 int,
val_2 int,
PRIMARY KEY (id)
) USING orioledb;
INSERT INTO o_checkpoint
(SELECT id, id, id FROM generate_series(1, 3) id);
""")
node.safe_psql("""
UPDATE o_checkpoint SET val_2 = 10 WHERE val_1 = 2;
""")
con1 = node.connect()
con2 = node.connect()
con1.begin()
con2.begin()
con1.execute("SELECT * FROM o_checkpoint WHERE id BETWEEN 1 and 2 FOR KEY SHARE;")
con2.execute("SELECT * FROM o_checkpoint WHERE id BETWEEN 2 and 3 FOR NO KEY UPDATE;")
node.safe_psql("CHECKPOINT;")
con1.commit()
con2.commit()
con1.close()
con2.close()
node.stop(['-m', 'immediate'])
node.start()
node.safe_psql("SELECT * FROM o_checkpoint;")
self.assertEqual(node.execute("SELECT COUNT(*) FROM o_checkpoint;")[0][0], 3)
node.stop()
def test_checkpoint_rll4(self):
node = self.node
node.start()
node.safe_psql('postgres', """
CREATE EXTENSION IF NOT EXISTS orioledb;
CREATE TABLE IF NOT EXISTS o_checkpoint (
id int NOT NULL,
val_1 int,
val_2 int,
PRIMARY KEY (id)
) USING orioledb;
INSERT INTO o_checkpoint
(SELECT id, id, id FROM generate_series(1, 3) id);
""")
node.safe_psql("""
CREATE TYPE o_enum AS ENUM ('a', 'b');
CREATE TABLE o_test_typecaches (key o_enum, PRIMARY KEY(key)) USING orioledb;
""")
con1 = node.connect()
con2 = node.connect()
con1.begin()
con2.begin()
con1.execute("SELECT * FROM o_checkpoint WHERE id BETWEEN 1 and 2 FOR KEY SHARE;")
con2.execute("SELECT * FROM o_checkpoint WHERE id BETWEEN 2 and 3 FOR NO KEY UPDATE;")
node.safe_psql("CHECKPOINT;")
con1.commit()
con2.commit()
con1.close()
con2.close()
node.stop(['-m', 'immediate'])
node.start()
node.safe_psql("SELECT * FROM o_checkpoint;")
self.assertEqual(node.execute("SELECT COUNT(*) FROM o_checkpoint;")[0][0], 3)
node.stop()