Skip to content

Commit fb4575f

Browse files
committed
materialized, misc: Version gate new listener config
We create a separate function for resolving the listener config depending on the version / whether there's an upgrade. This is important such that our upgrade tests don't break. For anything that above that overrides these listener configs, we override these too
1 parent 6832d49 commit fb4575f

4 files changed

Lines changed: 71 additions & 12 deletions

File tree

misc/python/materialize/checks/mzcompose_actions.py

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,9 @@
1818
from materialize.mz_version import MzVersion
1919
from materialize.mzcompose.helpers.iceberg import setup_polaris_for_iceberg
2020
from materialize.mzcompose.services.clusterd import Clusterd
21+
from materialize.mzcompose.services.listener_config import (
22+
resolve_listeners_config_path,
23+
)
2124
from materialize.mzcompose.services.materialized import DeploymentStatus, Materialized
2225
from materialize.mzcompose.services.ssh_bastion_host import (
2326
setup_default_ssh_test_connection,
@@ -86,12 +89,16 @@ def execute(self, e: Executor) -> None:
8689
)
8790
print(f"Starting Mz using image {image}, mz_service {self.mz_service}")
8891

89-
listeners_config_path = (
90-
f"{MZ_ROOT}/src/materialized/ci/listener_configs/v26_32_0/testdrive.json"
92+
# SASL listeners arrived in v0.158.0, so only newer versions get the
93+
# sasl variant.
94+
config_name = (
95+
"testdrive_sasl"
96+
if not self.tag or self.tag >= MzVersion.parse_mz("v0.158.0-dev")
97+
else "testdrive"
98+
)
99+
listeners_config_path = resolve_listeners_config_path(
100+
self.tag or MzVersion.parse_cargo(), config_name
91101
)
92-
93-
if not self.tag or self.tag >= MzVersion.parse_mz("v0.158.0-dev"):
94-
listeners_config_path = f"{MZ_ROOT}/src/materialized/ci/listener_configs/v26_32_0/testdrive_sasl.json"
95102

96103
mz = Materialized(
97104
name=self.mz_service,
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
# Copyright Materialize, Inc. and contributors. All rights reserved.
2+
#
3+
# Use of this software is governed by the Business Source License
4+
# included in the LICENSE file at the root of this repository.
5+
#
6+
# As of the Change Date specified in that file, in accordance with
7+
# the Business Source License, use of this software will be governed
8+
# by the Apache License, Version 2.0.
9+
10+
"""Selection of the listener config schema that a Materialize version can parse."""
11+
12+
from materialize import MZ_ROOT
13+
from materialize.mz_version import MzVersion
14+
15+
16+
def resolve_listeners_config_path(
17+
image_version: MzVersion,
18+
config_name: str = "testdrive",
19+
) -> str | None:
20+
"""The `config_name` listeners config to mount for an environmentd version.
21+
22+
Returns None for an environmentd that predates listener-config support,
23+
in which case no config is mounted.
24+
"""
25+
if image_version >= "v26.32.0-dev":
26+
return f"{MZ_ROOT}/src/materialized/ci/listener_configs/v26_32_0/{config_name}.json"
27+
elif image_version >= "v0.147.0-dev":
28+
return f"{MZ_ROOT}/src/materialized/ci/listener_configs/v0_147_0/{config_name}.json"
29+
else:
30+
# environmentd before v0.147.0 has no MZ_LISTENERS_CONFIG_PATH support.
31+
return None

misc/python/materialize/mzcompose/services/materialized.py

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
from enum import Enum
1616
from typing import Any
1717

18-
from materialize import MZ_ROOT, docker
18+
from materialize import docker
1919
from materialize.mz_version import MzVersion
2020
from materialize.mzcompose import (
2121
DEFAULT_CRDB_ENVIRONMENT,
@@ -32,6 +32,9 @@
3232
)
3333
from materialize.mzcompose.services import foundationdb
3434
from materialize.mzcompose.services.azurite import azure_blob_uri
35+
from materialize.mzcompose.services.listener_config import (
36+
resolve_listeners_config_path,
37+
)
3538
from materialize.mzcompose.services.metadata_store import (
3639
EXTERNAL_METADATA_STORE_ADDRESS,
3740
METADATA_STORE,
@@ -102,7 +105,7 @@ def __init__(
102105
default_replication_factor: int = 1,
103106
builtin_system_cluster_replication_factor: int | None = None,
104107
builtin_probe_cluster_replication_factor: int | None = None,
105-
listeners_config_path: str = f"{MZ_ROOT}/src/materialized/ci/listener_configs/testdrive.json",
108+
listeners_config_path: str | None = None,
106109
config_sync_file_path: str | None = None,
107110
support_external_clusterd: bool = False,
108111
networks: (
@@ -340,9 +343,12 @@ def __init__(
340343
if platform:
341344
config["platform"] = platform
342345

343-
if image_version is None or image_version >= "v0.147.0-dev":
344-
assert os.path.exists(listeners_config_path)
345-
volumes.append(f"{listeners_config_path}:/listeners_config")
346+
config_path = listeners_config_path or resolve_listeners_config_path(
347+
image_version or MzVersion.parse_cargo()
348+
)
349+
if config_path is not None:
350+
assert os.path.exists(config_path)
351+
volumes.append(f"{config_path}:/listeners_config")
346352
environment.append("MZ_LISTENERS_CONFIG_PATH=/listeners_config")
347353

348354
if config_sync_file_path is not None:

misc/python/materialize/scalability/endpoint/endpoints.py

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,14 @@
99

1010
import psycopg
1111

12-
from materialize import MZ_ROOT, git
12+
from materialize import git
13+
from materialize.docker import get_mz_version_from_image_tag
14+
from materialize.mz_version import MzVersion
1315
from materialize.mzcompose import ADDITIONAL_BENCHMARKING_SYSTEM_PARAMETERS
1416
from materialize.mzcompose.composition import Composition
17+
from materialize.mzcompose.services.listener_config import (
18+
resolve_listeners_config_path,
19+
)
1520
from materialize.mzcompose.services.materialized import Materialized
1621
from materialize.mzcompose.services.postgres import Postgres
1722
from materialize.scalability.endpoint.endpoint import ConnectionKind, Endpoint
@@ -180,12 +185,22 @@ def up(self) -> None:
180185
self.lift_limits()
181186

182187
def up_internal(self) -> None:
188+
# Match the schema dir to the image's version, since an older
189+
# environmentd cannot parse a newer listener config schema.
190+
image_version = (
191+
MzVersion.parse_cargo()
192+
if self.image is None
193+
else get_mz_version_from_image_tag(self.image.rsplit(":", 1)[1])
194+
)
195+
listeners_config_path = resolve_listeners_config_path(
196+
image_version, "testdrive_sasl"
197+
)
183198
with self.composition.override(
184199
Materialized(
185200
image=self.image,
186201
sanity_restart=False,
187202
additional_system_parameter_defaults=ADDITIONAL_BENCHMARKING_SYSTEM_PARAMETERS,
188-
listeners_config_path=f"{MZ_ROOT}/src/materialized/ci/listener_configs/v26_32_0/testdrive_sasl.json",
203+
listeners_config_path=listeners_config_path,
189204
)
190205
):
191206
self.composition.up("materialized")

0 commit comments

Comments
 (0)