mirror of
https://github.com/neondatabase/neon.git
synced 2026-01-17 10:22:56 +00:00
Compare commits
120 Commits
release-pr
...
alubenniko
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
e7ffa85b71 | ||
|
|
e530b6e6ba | ||
|
|
df92c40306 | ||
|
|
494c60f9d3 | ||
|
|
0e2110523d | ||
|
|
feb6eaa7a5 | ||
|
|
72c99f8260 | ||
|
|
6b90ea836f | ||
|
|
f08e6ab370 | ||
|
|
bf008b8f99 | ||
|
|
9353b8ee07 | ||
|
|
46348cf8c1 | ||
|
|
d753fd9c80 | ||
|
|
234d3287ed | ||
|
|
24431cfbdf | ||
|
|
0ec1d6f73f | ||
|
|
cdd6a978b9 | ||
|
|
b2a8d96262 | ||
|
|
caaa399293 | ||
|
|
81e1001ae5 | ||
|
|
76016391ee | ||
|
|
f4493a65db | ||
|
|
9b6e46969e | ||
|
|
8b04fc469d | ||
|
|
f8b9ec0dd0 | ||
|
|
b45560db75 | ||
|
|
c4d98915ff | ||
|
|
9ac06ea3d9 | ||
|
|
841b39f7c5 | ||
|
|
fe8fee0b88 | ||
|
|
dbde226f38 | ||
|
|
01c37c6c6c | ||
|
|
e989bf1887 | ||
|
|
84ca400dcf | ||
|
|
c7157d1c01 | ||
|
|
b74d463b15 | ||
|
|
e127e97797 | ||
|
|
b04995f10f | ||
|
|
287e05f49d | ||
|
|
650fb7b2d7 | ||
|
|
c29f78acc4 | ||
|
|
b7fd9e5123 | ||
|
|
b4d9632b19 | ||
|
|
3b6449fb7b | ||
|
|
130066898e | ||
|
|
6f2d7b4662 | ||
|
|
8a00cc817c | ||
|
|
7469656b72 | ||
|
|
9d8ba21f65 | ||
|
|
e54f8bc5ff | ||
|
|
ac72832589 | ||
|
|
2098184d67 | ||
|
|
c7f2a26cb9 | ||
|
|
ebdd187398 | ||
|
|
6c679f722c | ||
|
|
d0cf670b76 | ||
|
|
6d66a2ebe7 | ||
|
|
a8d1cbe376 | ||
|
|
222f483ce8 | ||
|
|
6f6d5f1ea3 | ||
|
|
7cd76ee351 | ||
|
|
0510676a3f | ||
|
|
c7d9eda56a | ||
|
|
6140e3b6b1 | ||
|
|
74eec88125 | ||
|
|
195c7a359d | ||
|
|
8bb0e97880 | ||
|
|
243db8ab4a | ||
|
|
815d7d6ab1 | ||
|
|
226464e6b5 | ||
|
|
e4dc7fe4a5 | ||
|
|
7a324f84e4 | ||
|
|
b54a919d51 | ||
|
|
afd25c896c | ||
|
|
99f9ab2c07 | ||
|
|
e8676ffff7 | ||
|
|
9e61284d10 | ||
|
|
288388f14e | ||
|
|
bfb7bf92f2 | ||
|
|
f8c9966aff | ||
|
|
2e1725c570 | ||
|
|
9414976c4c | ||
|
|
777c01938d | ||
|
|
302a2203a1 | ||
|
|
bc1697ab28 | ||
|
|
61f3ac3fbf | ||
|
|
f7f0be8727 | ||
|
|
c34323eb80 | ||
|
|
4104b1cbd4 | ||
|
|
d143822f64 | ||
|
|
6ff6843dbb | ||
|
|
c14d53b923 | ||
|
|
c7dde2e784 | ||
|
|
173aef925c | ||
|
|
b2af44f027 | ||
|
|
a07fda3a86 | ||
|
|
6b5d33de7d | ||
|
|
16450111c9 | ||
|
|
e8775dda76 | ||
|
|
8959cb1219 | ||
|
|
ecf20bb6fa | ||
|
|
5a4a2ae4cd | ||
|
|
d4f656daa2 | ||
|
|
e2921e352c | ||
|
|
8fb8ec57ea | ||
|
|
0c6b34b5a0 | ||
|
|
b3d90a7d7d | ||
|
|
9b0e277514 | ||
|
|
362f411735 | ||
|
|
fc89b662a3 | ||
|
|
b1c5330241 | ||
|
|
8e90dba6b4 | ||
|
|
5315a78bbe | ||
|
|
95ef3e8d21 | ||
|
|
236e8551fa | ||
|
|
e42dbae4a7 | ||
|
|
1dba8846f8 | ||
|
|
224564e2e0 | ||
|
|
82ba1155f9 | ||
|
|
418ccba23b |
104
.github/workflows/cloud-regress.yml
vendored
Normal file
104
.github/workflows/cloud-regress.yml
vendored
Normal file
@@ -0,0 +1,104 @@
|
||||
name: Cloud Regression Test
|
||||
on:
|
||||
push:
|
||||
branches: [amasterov/regress-arm]
|
||||
schedule:
|
||||
# * is a special character in YAML so you have to quote this string
|
||||
# ┌───────────── minute (0 - 59)
|
||||
# │ ┌───────────── hour (0 - 23)
|
||||
# │ │ ┌───────────── day of the month (1 - 31)
|
||||
# │ │ │ ┌───────────── month (1 - 12 or JAN-DEC)
|
||||
# │ │ │ │ ┌───────────── day of the week (0 - 6 or SUN-SAT)
|
||||
- cron: '0 3 * * *' # run once a day, timezone is utc
|
||||
workflow_dispatch: # adds ability to run this manually
|
||||
|
||||
defaults:
|
||||
run:
|
||||
shell: bash -euxo pipefail {0}
|
||||
|
||||
concurrency:
|
||||
# Allow only one workflow
|
||||
group: ${{ github.workflow }}
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
regress:
|
||||
env:
|
||||
POSTGRES_DISTRIB_DIR: /tmp/neon/pg_install
|
||||
DEFAULT_PG_VERSION: 16
|
||||
TEST_OUTPUT: /tmp/test_output
|
||||
BUILD_TYPE: remote
|
||||
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_DEV }}
|
||||
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_KEY_DEV }}
|
||||
|
||||
runs-on: us-east-2
|
||||
container:
|
||||
image: neondatabase/build-tools:pinned
|
||||
options: --init
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
with:
|
||||
submodules: true
|
||||
|
||||
- name: Patch the test
|
||||
run: |
|
||||
cd "vendor/postgres-v${DEFAULT_PG_VERSION}"
|
||||
patch -p1 < "../../patches/cloud_regress_pg${DEFAULT_PG_VERSION}.patch"
|
||||
|
||||
- name: Generate a random password
|
||||
id: pwgen
|
||||
run: |
|
||||
set +x
|
||||
DBPASS=$(dd if=/dev/random bs=48 count=1 2>/dev/null | base64)
|
||||
echo "::add-mask::${DBPASS//\//}"
|
||||
echo DBPASS="${DBPASS//\//}" >> "${GITHUB_OUTPUT}"
|
||||
|
||||
- name: Change tests according to the generated password
|
||||
env:
|
||||
DBPASS: ${{ steps.pwgen.outputs.DBPASS }}
|
||||
run: |
|
||||
cd vendor/postgres-v"${DEFAULT_PG_VERSION}"/src/test/regress
|
||||
for fname in sql/*.sql expected/*.out; do
|
||||
sed -i.bak s/NEON_PASSWORD_PLACEHOLDER/"'${DBPASS}'"/ "${fname}"
|
||||
done
|
||||
for ph in $(grep NEON_MD5_PLACEHOLDER expected/password.out | awk '{print $3;}' | sort | uniq); do
|
||||
USER=$(echo "${ph}" | cut -c 22-)
|
||||
MD5=md5$(echo -n "${DBPASS}${USER}" | md5sum | awk '{print $1;}')
|
||||
sed -i.bak "s/${ph}/${MD5}/" expected/password.out
|
||||
done
|
||||
|
||||
- name: Download Neon artifact
|
||||
uses: ./.github/actions/download
|
||||
with:
|
||||
name: neon-${{ runner.os }}-${{ runner.arch }}-release-artifact
|
||||
path: /tmp/neon/
|
||||
prefix: latest
|
||||
|
||||
- name: Run the regression tests
|
||||
uses: ./.github/actions/run-python-test-set
|
||||
with:
|
||||
build_type: ${{ env.BUILD_TYPE }}
|
||||
test_selection: cloud_regress
|
||||
pg_version: ${{ env.DEFAULT_PG_VERSION }}
|
||||
extra_params: -m remote_cluster
|
||||
env:
|
||||
BENCHMARK_CONNSTR: ${{ secrets.PG_REGRESS_CONNSTR }}
|
||||
|
||||
- name: Create Allure report
|
||||
id: create-allure-report
|
||||
if: ${{ !cancelled() }}
|
||||
uses: ./.github/actions/allure-report-generate
|
||||
|
||||
- name: Post to a Slack channel
|
||||
if: ${{ github.event.schedule && failure() }}
|
||||
uses: slackapi/slack-github-action@v1
|
||||
with:
|
||||
channel-id: "C033QLM5P7D" # on-call-staging-stream
|
||||
slack-message: |
|
||||
Periodic pg_regress on staging: ${{ job.status }}
|
||||
<${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}|GitHub Run>
|
||||
<${{ steps.create-allure-report.outputs.report-url }}|Allure report>
|
||||
env:
|
||||
SLACK_BOT_TOKEN: ${{ secrets.SLACK_BOT_TOKEN }}
|
||||
|
||||
3949
patches/cloud_regress_pg16.patch
Normal file
3949
patches/cloud_regress_pg16.patch
Normal file
File diff suppressed because it is too large
Load Diff
108
test_runner/cloud_regress/test_cloud_regress.py
Normal file
108
test_runner/cloud_regress/test_cloud_regress.py
Normal file
@@ -0,0 +1,108 @@
|
||||
"""
|
||||
Run the regression tests on the cloud instance of Neon
|
||||
"""
|
||||
|
||||
from pathlib import Path
|
||||
from typing import Any
|
||||
|
||||
import psycopg2
|
||||
import pytest
|
||||
from fixtures.log_helper import log
|
||||
from fixtures.neon_fixtures import RemotePostgres
|
||||
from fixtures.pg_version import PgVersion
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def setup(remote_pg: RemotePostgres):
|
||||
"""
|
||||
Setup and teardown of the tests
|
||||
"""
|
||||
with psycopg2.connect(remote_pg.connstr()) as conn:
|
||||
with conn.cursor() as cur:
|
||||
cur = conn.cursor()
|
||||
log.info("Creating the extension")
|
||||
cur.execute("CREATE EXTENSION IF NOT EXISTS regress_so")
|
||||
conn.commit()
|
||||
log.info("Looking for subscriptions in the regress database")
|
||||
cur.execute(
|
||||
"SELECT subname FROM pg_catalog.pg_subscription WHERE "
|
||||
"subdbid = (SELECT oid FROM pg_catalog.pg_database WHERE datname='regression');"
|
||||
)
|
||||
if cur.rowcount > 0:
|
||||
with psycopg2.connect(
|
||||
dbname="regression",
|
||||
host=remote_pg.default_options["host"],
|
||||
user=remote_pg.default_options["user"],
|
||||
password=remote_pg.default_options["password"],
|
||||
) as regress_conn:
|
||||
with regress_conn.cursor() as regress_cur:
|
||||
for sub in cur:
|
||||
regress_cur.execute(f"ALTER SUBSCRIPTION {sub[0]} DISABLE")
|
||||
regress_cur.execute(
|
||||
f"ALTER SUBSCRIPTION {sub[0]} SET (slot_name = NONE)"
|
||||
)
|
||||
regress_cur.execute(f"DROP SUBSCRIPTION {sub[0]}")
|
||||
regress_conn.commit()
|
||||
|
||||
# This is also a workaround for the full path problem
|
||||
# If we specify the full path in the command, the library won't be downloaded
|
||||
# So we specify the name only for the first time
|
||||
log.info("Creating a C function to check availability of regress.so")
|
||||
cur.execute(
|
||||
"CREATE FUNCTION get_columns_length(oid[]) "
|
||||
"RETURNS int AS 'regress.so' LANGUAGE C STRICT STABLE PARALLEL SAFE;"
|
||||
)
|
||||
conn.rollback()
|
||||
yield
|
||||
log.info("Looking for extra roles...")
|
||||
with psycopg2.connect(remote_pg.connstr()) as conn:
|
||||
with conn.cursor() as cur:
|
||||
cur.execute(
|
||||
"SELECT rolname FROM pg_catalog.pg_roles WHERE oid > 16384 AND rolname <> 'neondb_owner'"
|
||||
)
|
||||
roles: list[Any] = []
|
||||
for role in cur:
|
||||
log.info("Role found: %s", role[0])
|
||||
roles.append(role[0])
|
||||
for role in roles:
|
||||
cur.execute(f"DROP ROLE {role}")
|
||||
conn.commit()
|
||||
|
||||
|
||||
@pytest.mark.timeout(7200)
|
||||
@pytest.mark.remote_cluster
|
||||
def test_cloud_regress(
|
||||
setup,
|
||||
remote_pg: RemotePostgres,
|
||||
pg_version: PgVersion,
|
||||
pg_distrib_dir: Path,
|
||||
base_dir: Path,
|
||||
test_output_dir: Path,
|
||||
):
|
||||
"""
|
||||
Run the regression tests
|
||||
"""
|
||||
regress_bin = (
|
||||
pg_distrib_dir / f"{pg_version.v_prefixed}/lib/postgresql/pgxs/src/test/regress/pg_regress"
|
||||
)
|
||||
test_path = base_dir / f"vendor/postgres-{pg_version.v_prefixed}/src/test/regress"
|
||||
|
||||
env_vars = {
|
||||
"PGHOST": remote_pg.default_options["host"],
|
||||
"PGPORT": str(
|
||||
remote_pg.default_options["port"] if "port" in remote_pg.default_options else 5432
|
||||
),
|
||||
"PGUSER": remote_pg.default_options["user"],
|
||||
"PGPASSWORD": remote_pg.default_options["password"],
|
||||
"PGDATABASE": remote_pg.default_options["dbname"],
|
||||
}
|
||||
regress_cmd = [
|
||||
str(regress_bin),
|
||||
f"--inputdir={test_path}",
|
||||
f"--bindir={pg_distrib_dir}/{pg_version.v_prefixed}/bin",
|
||||
"--dlpath=/usr/local/lib",
|
||||
"--max-concurrent-tests=20",
|
||||
f"--schedule={test_path}/parallel_schedule",
|
||||
"--max-connections=5",
|
||||
]
|
||||
remote_pg.pg_bin.run(regress_cmd, env=env_vars, cwd=test_output_dir)
|
||||
@@ -236,7 +236,7 @@ def get_scale_for_db(size_mb: int) -> int:
|
||||
|
||||
|
||||
ATTACHMENT_NAME_REGEX: re.Pattern = re.compile( # type: ignore[type-arg]
|
||||
r"regression\.diffs|.+\.(?:log|stderr|stdout|filediff|metrics|html|walredo)"
|
||||
r"regression\.(diffs|out)|.+\.(?:log|stderr|stdout|filediff|metrics|html|walredo)"
|
||||
)
|
||||
|
||||
|
||||
|
||||
2
vendor/postgres-v14
vendored
2
vendor/postgres-v14
vendored
Submodule vendor/postgres-v14 updated: a317b9b5b9...f9c51c1243
2
vendor/postgres-v15
vendored
2
vendor/postgres-v15
vendored
Submodule vendor/postgres-v15 updated: 6f6d77fb59...1dbd6f3164
2
vendor/postgres-v16
vendored
2
vendor/postgres-v16
vendored
Submodule vendor/postgres-v16 updated: 0baa7346df...d009084a74
2
vendor/postgres-v17
vendored
2
vendor/postgres-v17
vendored
Submodule vendor/postgres-v17 updated: 9156d63ce2...dadd6fe208
8
vendor/revisions.json
vendored
8
vendor/revisions.json
vendored
@@ -1,18 +1,18 @@
|
||||
{
|
||||
"v17": [
|
||||
"17rc1",
|
||||
"9156d63ce253bed9d1f76355ceec610e444eaffa"
|
||||
"dadd6fe208bb906cc0a48980f2ab4e13c47ba3ad"
|
||||
],
|
||||
"v16": [
|
||||
"16.4",
|
||||
"0baa7346dfd42d61912eeca554c9bb0a190f0a1e"
|
||||
"d009084a745cb4d5e6de222c778b2a562c8b2767"
|
||||
],
|
||||
"v15": [
|
||||
"15.8",
|
||||
"6f6d77fb5960602fcd3fd130aca9f99ecb1619c9"
|
||||
"1dbd6f316416c8360bbd4f3d6db956cf70937cf0"
|
||||
],
|
||||
"v14": [
|
||||
"14.13",
|
||||
"a317b9b5b96978b49e78986697f3dd80d06f99a7"
|
||||
"f9c51c12438b20049b6905eb4e43d321defd6ff2"
|
||||
]
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user