|
10 | 10 | module_name = 'page' |
11 | 11 |
|
12 | 12 |
|
13 | | -class PageBackupTest(ProbackupTest, unittest.TestCase): |
| 13 | +class PageTest(ProbackupTest, unittest.TestCase): |
14 | 14 |
|
15 | 15 | # @unittest.skip("skip") |
16 | 16 | def test_basic_page_vacuum_truncate(self): |
@@ -1111,3 +1111,107 @@ def test_page_create_db(self): |
1111 | 1111 |
|
1112 | 1112 | # Clean after yourself |
1113 | 1113 | self.del_test_dir(module_name, fname) |
| 1114 | + |
| 1115 | + @unittest.skip("skip") |
| 1116 | + # @unittest.expectedFailure |
| 1117 | + def test_page_pg_resetxlog(self): |
| 1118 | + fname = self.id().split('.')[3] |
| 1119 | + node = self.make_simple_node( |
| 1120 | + base_dir=os.path.join(module_name, fname, 'node'), |
| 1121 | + set_replication=True, |
| 1122 | + initdb_params=['--data-checksums'], |
| 1123 | + pg_options={ |
| 1124 | + 'autovacuum': 'off', |
| 1125 | + 'shared_buffers': '512MB', |
| 1126 | + 'max_wal_size': '3GB'}) |
| 1127 | + |
| 1128 | + backup_dir = os.path.join(self.tmp_path, module_name, fname, 'backup') |
| 1129 | + self.init_pb(backup_dir) |
| 1130 | + self.add_instance(backup_dir, 'node', node) |
| 1131 | + self.set_archiving(backup_dir, 'node', node) |
| 1132 | + node.slow_start() |
| 1133 | + |
| 1134 | + # Create table |
| 1135 | + node.safe_psql( |
| 1136 | + "postgres", |
| 1137 | + "create extension bloom; create sequence t_seq; " |
| 1138 | + "create table t_heap " |
| 1139 | + "as select nextval('t_seq')::int as id, md5(i::text) as text, " |
| 1140 | + "md5(repeat(i::text,10))::tsvector as tsvector " |
| 1141 | +# "from generate_series(0,25600) i") |
| 1142 | + "from generate_series(0,2560) i") |
| 1143 | + |
| 1144 | + self.backup_node(backup_dir, 'node', node) |
| 1145 | + |
| 1146 | + node.safe_psql( |
| 1147 | + 'postgres', |
| 1148 | + "update t_heap set id = nextval('t_seq'), text = md5(text), " |
| 1149 | + "tsvector = md5(repeat(tsvector::text, 10))::tsvector") |
| 1150 | + |
| 1151 | + self.switch_wal_segment(node) |
| 1152 | + |
| 1153 | + # kill the bastard |
| 1154 | + if self.verbose: |
| 1155 | + print('Killing postmaster. Losing Ptrack changes') |
| 1156 | + node.stop(['-m', 'immediate', '-D', node.data_dir]) |
| 1157 | + |
| 1158 | + # now smack it with sledgehammer |
| 1159 | + if node.major_version >= 10: |
| 1160 | + pg_resetxlog_path = self.get_bin_path('pg_resetwal') |
| 1161 | + wal_dir = 'pg_wal' |
| 1162 | + else: |
| 1163 | + pg_resetxlog_path = self.get_bin_path('pg_resetxlog') |
| 1164 | + wal_dir = 'pg_xlog' |
| 1165 | + |
| 1166 | + self.run_binary( |
| 1167 | + [ |
| 1168 | + pg_resetxlog_path, |
| 1169 | + '-D', |
| 1170 | + node.data_dir, |
| 1171 | + '-o 42', |
| 1172 | + '-f' |
| 1173 | + ], |
| 1174 | + asynchronous=False) |
| 1175 | + |
| 1176 | + if not node.status(): |
| 1177 | + node.slow_start() |
| 1178 | + else: |
| 1179 | + print("Die! Die! Why won't you die?... Why won't you die?") |
| 1180 | + exit(1) |
| 1181 | + |
| 1182 | + # take ptrack backup |
| 1183 | +# self.backup_node( |
| 1184 | +# backup_dir, 'node', node, |
| 1185 | +# backup_type='page', options=['--stream']) |
| 1186 | + |
| 1187 | + try: |
| 1188 | + self.backup_node( |
| 1189 | + backup_dir, 'node', node, backup_type='page') |
| 1190 | + # we should die here because exception is what we expect to happen |
| 1191 | + self.assertEqual( |
| 1192 | + 1, 0, |
| 1193 | + "Expecting Error because instance was brutalized by pg_resetxlog" |
| 1194 | + "\n Output: {0} \n CMD: {1}".format( |
| 1195 | + repr(self.output), self.cmd) |
| 1196 | + ) |
| 1197 | + except ProbackupException as e: |
| 1198 | + self.assertIn( |
| 1199 | + 'Insert error message', |
| 1200 | + e.message, |
| 1201 | + '\n Unexpected Error Message: {0}\n' |
| 1202 | + ' CMD: {1}'.format(repr(e.message), self.cmd)) |
| 1203 | + |
| 1204 | +# pgdata = self.pgdata_content(node.data_dir) |
| 1205 | +# |
| 1206 | +# node_restored = self.make_simple_node( |
| 1207 | +# base_dir=os.path.join(module_name, fname, 'node_restored')) |
| 1208 | +# node_restored.cleanup() |
| 1209 | +# |
| 1210 | +# self.restore_node( |
| 1211 | +# backup_dir, 'node', node_restored) |
| 1212 | +# |
| 1213 | +# pgdata_restored = self.pgdata_content(node_restored.data_dir) |
| 1214 | +# self.compare_pgdata(pgdata, pgdata_restored) |
| 1215 | + |
| 1216 | + # Clean after yourself |
| 1217 | + self.del_test_dir(module_name, fname) |
0 commit comments