Skip to content

Commit

Permalink
Do not wallog AUX files at replica (#9457)
Browse files Browse the repository at this point in the history
## Problem

Attempt to persist LR stuff at replica cause cannot make new WAL entries
during recovery` error.
See https://neondb.slack.com/archives/C07S7RBFVRA/p1729280401283389

## Summary of changes

Do not wallog AUX files at replica.
Related Postgres PRs:

neondatabase/postgres#517
neondatabase/postgres#516
neondatabase/postgres#515
neondatabase/postgres#514


## Checklist before requesting a review

- [ ] I have performed a self-review of my code.
- [ ] If it is a core feature, I have added thorough tests.
- [ ] Do we need to implement analytics? if so did you add the relevant
metrics to the dashboard?
- [ ] If this PR requires public announcement, mark it with
/release-notes label and add several sentences in this section.

## Checklist before merging

- [ ] Do not forget to reformat commit message to not include the above
checklist

---------

Co-authored-by: Konstantin Knizhnik <knizhnik@neon.tech>
Co-authored-by: Heikki Linnakangas <heikki@neon.tech>
  • Loading branch information
3 people authored Nov 13, 2024
1 parent d8f5d43 commit 1ff5333
Show file tree
Hide file tree
Showing 6 changed files with 58 additions and 11 deletions.
53 changes: 50 additions & 3 deletions test_runner/regress/test_physical_and_logical_replicaiton.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,15 +5,15 @@
from fixtures.neon_fixtures import NeonEnv, logical_replication_sync


def test_physical_and_logical_replication(neon_simple_env: NeonEnv, vanilla_pg):
def test_physical_and_logical_replication_slot_not_copied(neon_simple_env: NeonEnv, vanilla_pg):
"""Test read replica of a primary which has a logical replication publication"""
env = neon_simple_env

n_records = 100000

primary = env.endpoints.create_start(
branch_name="main",
endpoint_id="primary",
config_lines=["min_wal_size=32MB", "max_wal_size=64MB"],
)
p_con = primary.connect()
p_cur = p_con.cursor()
Expand All @@ -30,7 +30,6 @@ def test_physical_and_logical_replication(neon_simple_env: NeonEnv, vanilla_pg):
secondary = env.endpoints.new_replica_start(
origin=primary,
endpoint_id="secondary",
config_lines=["min_wal_size=32MB", "max_wal_size=64MB"],
)

s_con = secondary.connect()
Expand All @@ -48,3 +47,51 @@ def test_physical_and_logical_replication(neon_simple_env: NeonEnv, vanilla_pg):
# Check that LR slot is not copied to replica
s_cur.execute("select count(*) from pg_replication_slots")
assert s_cur.fetchall()[0][0] == 0


def test_aux_not_logged_at_replica(neon_simple_env: NeonEnv, vanilla_pg):
"""Test that AUX files are not saved at replica"""
env = neon_simple_env

n_records = 20000

primary = env.endpoints.create_start(
branch_name="main",
endpoint_id="primary",
)
p_con = primary.connect()
p_cur = p_con.cursor()
p_cur.execute("CREATE TABLE t(pk bigint primary key, payload text default repeat('?',200))")
p_cur.execute("create publication pub1 for table t")

# start subscriber
vanilla_pg.start()
vanilla_pg.safe_psql("CREATE TABLE t(pk bigint primary key, payload text)")
connstr = primary.connstr().replace("'", "''")
vanilla_pg.safe_psql(f"create subscription sub1 connection '{connstr}' publication pub1")

for pk in range(n_records):
p_cur.execute("insert into t (pk) values (%s)", (pk,))

# LR snapshot is stored each 15 seconds
time.sleep(16)

# start replica
secondary = env.endpoints.new_replica_start(
origin=primary,
endpoint_id="secondary",
)

s_con = secondary.connect()
s_cur = s_con.cursor()

logical_replication_sync(vanilla_pg, primary)

assert vanilla_pg.safe_psql("select count(*) from t")[0][0] == n_records
s_cur.execute("select count(*) from t")
assert s_cur.fetchall()[0][0] == n_records

vanilla_pg.stop()
secondary.stop()
primary.stop()
assert not secondary.log_contains("cannot make new WAL entries during recovery")
8 changes: 4 additions & 4 deletions vendor/revisions.json
Original file line number Diff line number Diff line change
@@ -1,18 +1,18 @@
{
"v17": [
"17.0",
"9ad2f3c5c37c08069a01c1e3f6b7cf275437e0cb"
"ae4cc30dba24f3910533e5a48e8103c3f2fff300"
],
"v16": [
"16.4",
"e131a9c027b202ce92bd7b9cf2569d48a6f9948e"
"03b43900edc5d8d6eecec460bfc89aec7174bd84"
],
"v15": [
"15.8",
"22e580fe9ffcea7e02592110b1c9bf426d83cada"
"fd631a959049dfe2b82f67409c8b8b0d3e0016d1"
],
"v14": [
"14.13",
"2199b83fb72680001ce0f43bf6187a21dfb8f45d"
"de0a000dafc2e66ce2e39282d3aa1c704fe0390e"
]
}

1 comment on commit 1ff5333

@github-actions
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

5391 tests run: 5170 passed, 1 failed, 220 skipped (full report)


Failures on Postgres 17

# Run all failed tests locally:
scripts/pytest -vv -n $(nproc) -k "test_sharding_split_stripe_size[debug-pg17-65536]"
Flaky tests (3)

Postgres 17

Postgres 15

Test coverage report is not available

The comment gets automatically updated with the latest test results
1ff5333 at 2024-11-13T07:42:48.931Z :recycle:

Please sign in to comment.