mirror of
https://github.com/neondatabase/neon.git
synced 2026-08-09 08:09:15 +00:00
Compare commits
120 Commits
| 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 |
@@ -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 }}
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -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)"
|
||||
)
|
||||
|
||||
|
||||
|
||||
Vendored
+1
-1
Submodule vendor/postgres-v14 updated: a317b9b5b9...f9c51c1243
Vendored
+1
-1
Submodule vendor/postgres-v15 updated: 6f6d77fb59...1dbd6f3164
Vendored
+1
-1
Submodule vendor/postgres-v16 updated: 0baa7346df...d009084a74
Vendored
+1
-1
Submodule vendor/postgres-v17 updated: 9156d63ce2...dadd6fe208
Vendored
+4
-4
@@ -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