Skip to content

Commit 942406e

Browse files
Merge pull request #70 from DataKitchen/release/5.70.3
Release/5.70.3
2 parents bbea659 + 64a3f14 commit 942406e

3 files changed

Lines changed: 61 additions & 4 deletions

File tree

pyproject.toml

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ build-backend = "setuptools.build_meta"
88

99
[project]
1010
name = "dataops-testgen"
11-
version = "5.70.2"
11+
version = "5.70.3"
1212
description = "DataKitchen's Data Quality DataOps TestGen"
1313
authors = [
1414
{ "name" = "DataKitchen, Inc.", "email" = "info@datakitchen.io" },
@@ -92,7 +92,10 @@ dependencies = [
9292

9393
[project.optional-dependencies]
9494
standalone = [
95-
"pixeltable-pgserver>=0.5.1",
95+
# Upper bound guards against a future release dropping a bundled PostgreSQL
96+
# major that existing data dirs were initialized with (see start_server in
97+
# common/standalone_postgres.py). Revisit deliberately before relaxing.
98+
"pixeltable-pgserver>=0.6.0,<0.7.0",
9699
]
97100

98101
dev = [

testgen/common/standalone_postgres.py

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
STANDALONE_MODE_ENV_VAR = "TG_STANDALONE_MODE"
2323
HOME_DIR_ENV_VAR = "TG_TESTGEN_HOME"
2424
STANDALONE_URI_ENV_VAR = "_TG_STANDALONE_URI"
25+
NEW_INSTALL_POSTGRES_VERSION = 18
2526

2627
# Stored as ``project_host`` in the demo-DB connection row so that the actual
2728
# host/port — which can change across sessions on Windows (pgserver picks a
@@ -84,8 +85,13 @@ def start_server(data_dir: Path | None = None) -> None:
8485
data_dir = get_home_dir() / "pgdata"
8586
data_dir.mkdir(parents=True, exist_ok=True)
8687

87-
LOG.info("Starting embedded PostgreSQL (data: %s) ...", data_dir)
88-
_server = pgserver.get_server(data_dir)
88+
# pgserver bundles multiple PostgreSQL majors and defaults to its newest.
89+
# Honor the major that initialized an existing data dir so upgrades never fail with a version mismatch.
90+
existing_version = pgserver.pgdata_version(data_dir)
91+
postgres_version = existing_version if existing_version is not None else NEW_INSTALL_POSTGRES_VERSION
92+
93+
LOG.info("Starting embedded PostgreSQL (data: %s, pg%s) ...", data_dir, postgres_version)
94+
_server = pgserver.get_server(data_dir, postgres_version=postgres_version)
8995
LOG.info("Embedded PostgreSQL ready: %s", _server.get_uri())
9096

9197
_reinitialize_orm_engine()
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
"""Unit tests for embedded-PostgreSQL version selection in standalone mode."""
2+
3+
import sys
4+
from unittest import mock
5+
6+
import pytest
7+
8+
from testgen.common import standalone_postgres
9+
10+
11+
@pytest.fixture
12+
def fake_pgserver():
13+
"""Mock the ``pixeltable_pgserver`` module imported inside ``start_server``."""
14+
fake = mock.MagicMock()
15+
fake.get_server.return_value.get_uri.return_value = "postgresql:///db?host=/tmp/sock"
16+
with mock.patch.dict(sys.modules, {"pixeltable_pgserver": fake}):
17+
yield fake
18+
19+
20+
@pytest.fixture(autouse=True)
21+
def reset_module_state():
22+
"""Isolate the module-level server singleton and skip real ORM/atexit side effects."""
23+
standalone_postgres._server = None
24+
with (
25+
mock.patch.object(standalone_postgres, "_reinitialize_orm_engine"),
26+
mock.patch("atexit.register"),
27+
):
28+
yield
29+
standalone_postgres._server = None
30+
31+
32+
def test_fresh_data_dir_uses_new_install_version(fake_pgserver, tmp_path):
33+
fake_pgserver.pgdata_version.return_value = None
34+
35+
standalone_postgres.start_server(tmp_path / "pgdata")
36+
37+
assert fake_pgserver.get_server.call_args.kwargs["postgres_version"] == (
38+
standalone_postgres.NEW_INSTALL_POSTGRES_VERSION
39+
)
40+
41+
42+
def test_existing_data_dir_honors_on_disk_version(fake_pgserver, tmp_path):
43+
# A cluster initialized by an older bundled major must keep running on it.
44+
fake_pgserver.pgdata_version.return_value = 16
45+
46+
standalone_postgres.start_server(tmp_path / "pgdata")
47+
48+
assert fake_pgserver.get_server.call_args.kwargs["postgres_version"] == 16

0 commit comments

Comments
 (0)