8000 get rid of plpython usage · postgrespro/pg_probackup@f2f47f7 · GitHub
[go: up one dir, main page]

Skip to content

Commit f2f47f7

Browse files
committed
get rid of plpython usage
1 parent fc50cf0 commit f2f47f7

File tree

1 file changed

+28
-44
lines changed

1 file changed

+28
-44
lines changed

tests/pgpro2068_test.py

Lines changed: 28 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -53,11 +53,6 @@ def test_minrecpoint_on_replica(self):
5353
replica,
5454
{'port': replica.port, 'restart_after_crash': 'off'})
5555

56-
# we need those later
57-
node.safe_psql(
58-
"postgres",
59-
"CREATE EXTENSION plpython3u")
60-
6156
node.safe_psql(
6257
"postgres",
6358
"CREATE EXTENSION pageinspect")
@@ -131,48 +126,37 @@ def test_minrecpoint_on_replica(self):
131126
recovery_config, "recovery_target_action = 'pause'")
132127
replica.slow_start(replica=True)
133128

129+
current_xlog_lsn_query = 'SELECT pg_last_wal_replay_lsn() INTO current_xlog_lsn'
134130
if self.get_version(node) < 100000:
135-
script = '''
136-
DO
137-
$$
138-
relations = plpy.execute("select class.oid from pg_class class WHERE class.relkind IN ('r', 'i', 't', 'm') and class.relpersistence = 'p'")
139-
current_xlog_lsn = plpy.execute("SELECT min_recovery_end_location as lsn FROM pg_control_recovery()")[0]['lsn']
140-
plpy.notice('CURRENT LSN: {0}'.format(current_xlog_lsn))
141-
found_corruption = False
142-
for relation in relations:
143-
pages_from_future = plpy.execute("with number_of_blocks as (select blknum from generate_series(0, pg_relation_size({0}) / 8192 -1) as blknum) select blknum, lsn, checksum, flags, lower, upper, special, pagesize, version, prune_xid from number_of_blocks, page_header(get_raw_page('{0}'::oid::regclass::text, number_of_blocks.blknum::int)) where lsn > '{1}'::pg_lsn".format(relation['oid'], current_xlog_lsn))
144-
145-
if pages_from_future.nrows() == 0:
146-
continue
147-
148-
for page in pages_from_future:
149-
plpy.notice('Found page from future. OID: {0}, BLKNUM: {1}, LSN: {2}'.format(relation['oid'], page['blknum'], page['lsn']))
150-
found_corruption = True
151-
if found_corruption:
152-
plpy.error('Found Corruption')
153-
$$ LANGUAGE plpython3u;
154-
'''
155-
else:
156-
script = '''
131+
current_xlog_lsn_query = 'SELECT min_recovery_end_location INTO current_xlog_lsn FROM pg_control_recovery()'
132+
133+
script = f'''
157134
DO
158135
$$
159-
relations = plpy.execute("select class.oid from pg_class class WHERE class.relkind IN ('r', 'i', 't', 'm') and class.relpersistence = 'p'")
160-
current_xlog_lsn = plpy.execute("select pg_last_wal_replay_lsn() as lsn")[0]['lsn']
161-
plpy.notice('CURRENT LSN: {0}'.format(current_xlog_lsn))
162-
found_corruption = False
163-
for relation in relations:
164-
pages_from_future = plpy.execute("with number_of_blocks as (select blknum from generate_series(0, pg_relation_size({0}) / 8192 -1) as blknum) select blknum, lsn, checksum, flags, lower, upper, special, pagesize, version, prune_xid from number_of_blocks, page_header(get_raw_page('{0}'::oid::regclass::text, number_of_blocks.blknum::int)) where lsn > '{1}'::pg_lsn".format(relation['oid'], current_xlog_lsn))
165-
166-
if pages_from_future.nrows() == 0:
167-
continue
168-
169-
for page in pages_from_future:
170-
plpy.notice('Found page from future. OID: {0}, BLKNUM: {1}, LSN: {2}'.format(relation['oid'], page['blknum'], page['lsn']))
171-
found_corruption = True
172-
if found_corruption:
173-
plpy.error('Found Corruption')
174-
$$ LANGUAGE plpython3u;
175-
'''
136+
DECLARE
137+
roid oid;
138+
current_xlog_lsn pg_lsn;
139+
pages_from_future RECORD;
140+
found_corruption bool := false;
141+
BEGIN
142+
{current_xlog_lsn_query};
143+
RAISE NOTICE 'CURRENT LSN: %', current_xlog_lsn;
144+
FOR roid IN select oid from pg_class class where relkind IN ('r', 'i', 't', 'm') and relpersistence = 'p' LOOP
145+
FOR pages_from_future IN
146+
with number_of_blocks as (select blknum from generate_series(0, pg_relation_size(roid) / 8192 -1) as blknum )
147+
select blknum, lsn, checksum, flags, lower, upper, special, pagesize, version, prune_xid
148+
from number_of_blocks, page_header(get_raw_page(roid::regclass::text, number_of_blocks.blknum::int))
149+
where lsn > current_xlog_lsn LOOP
150+
RAISE NOTICE 'Found page from future. OID: %, BLKNUM: %, LSN: %', roid, pages_from_future.blknum, pages_from_future.lsn;
151+
found_corruption := true;
152+
END LOOP;
153+
END LOOP;
154+
IF found_corruption THEN
155+
RAISE 'Found Corruption';
156+
END IF;
157+
END;
158+
$$ LANGUAGE plpgsql;
159+
'''.format(current_xlog_lsn_query=current_xlog_lsn_query)
176160

177161
# Find blocks from future
178162
replica.safe_psql(

0 commit comments

Comments
 (0)
0