mirror of
https://github.com/neondatabase/neon.git
synced 2026-01-08 14:02:55 +00:00
Add test for proper handling of connection failure to avoid 'cannot wait on socket event without a socket' error (#8231)
## Problem See https://github.com/neondatabase/cloud/issues/14289 and PR #8210 ## Summary of changes Add test for problems fixed in #8210 ## 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>
This commit is contained in:
committed by
GitHub
parent
891cb5a9a8
commit
4a0c2aebe0
@@ -2,6 +2,7 @@ import threading
|
||||
import time
|
||||
from contextlib import closing
|
||||
|
||||
import psycopg2.errors
|
||||
from fixtures.log_helper import log
|
||||
from fixtures.neon_fixtures import NeonEnv, PgBin
|
||||
|
||||
@@ -40,3 +41,26 @@ def test_pageserver_reconnect(neon_simple_env: NeonEnv, pg_bin: PgBin):
|
||||
c.execute("select pg_reload_conf()")
|
||||
|
||||
thread.join()
|
||||
|
||||
|
||||
# Test handling errors during page server reconnect
|
||||
def test_pageserver_reconnect_failure(neon_simple_env: NeonEnv):
|
||||
env = neon_simple_env
|
||||
env.neon_cli.create_branch("test_pageserver_reconnect")
|
||||
endpoint = env.endpoints.create_start("test_pageserver_reconnect")
|
||||
|
||||
con = endpoint.connect()
|
||||
cur = con.cursor()
|
||||
|
||||
cur.execute("set statement_timeout='2s'")
|
||||
cur.execute("SELECT setting FROM pg_settings WHERE name='neon.pageserver_connstring'")
|
||||
connstring = cur.fetchall()[0][0]
|
||||
cur.execute(
|
||||
f"alter system set neon.pageserver_connstring='{connstring}?some_invalid_param=xyz'"
|
||||
)
|
||||
cur.execute("select pg_reload_conf()")
|
||||
try:
|
||||
cur.execute("select count(*) from pg_class")
|
||||
except psycopg2.errors.QueryCanceled:
|
||||
log.info("Connection to PS failed")
|
||||
assert not endpoint.log_contains("ERROR: cannot wait on socket event without a socket.*")
|
||||
|
||||
Reference in New Issue
Block a user