misc.python.materialize.version_ancestor_overrides

  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
 11from __future__ import annotations
 12
 13from typing import Any
 14
 15from materialize.mz_version import MzVersion
 16
 17
 18def get_ancestor_overrides_for_performance_regressions(
 19    scenario_class: type[Any], scale: str | None
 20) -> dict[str, MzVersion]:
 21    """
 22    Git revisions that are based on commits listed as keys require at least the version specified in the value.
 23    Note that specified versions do not necessarily need to be already published.
 24    Commits must be ordered descending by their date.
 25    """
 26
 27    scenario_class_name = scenario_class.__name__
 28
 29    min_ancestor_mz_version_per_commit = dict()
 30
 31    if scenario_class_name in (
 32        "MySqlInitialLoad",
 33        "MySqlInitialLoadMultiWorkerSampled",
 34        "MySqlInitialLoadMultiWorkerSingleTable",
 35    ):
 36        # PR#38094 (storage: Fast approximate snapshot partitioning) increased
 37        # snapshot wallclock: integer primary keys are no longer partitioned,
 38        # so MySqlInitialLoad reads serially, and approximate key probing is
 39        # slower than the exact OFFSET sampler on small datasets (~30% on
 40        # MySqlInitialLoadMultiWorkerSampled).
 41        min_ancestor_mz_version_per_commit[
 42            "de8eac0d1683ffd788dfba6edaa88aef7f0f1740"
 43        ] = MzVersion.parse_mz("v26.39.0")
 44
 45    if scenario_class_name == "FastPathFilterNoIndex":
 46        # PR#38151 (Sql-150: Temporary objects to the catalog) increased wallclock by ~10%
 47        min_ancestor_mz_version_per_commit[
 48            "f3b4f3f1becf6f56690360874e8aec111c38630d"
 49        ] = MzVersion.parse_mz("v26.39.0")
 50
 51    if scenario_class_name in ("ManySmallUpdates", "Update"):
 52        # PR#37923 (adapter: sequence read-then-write from the session task with OCC) increases wallclock for writes, and clusterd memory for ManySmallUpdates
 53        min_ancestor_mz_version_per_commit[
 54            "4f0805a4d8d8e398f2fdfe10d5bdbe70b16924a4"
 55        ] = MzVersion.parse_mz("v26.39.0")
 56
 57    if scenario_class_name == "ParallelDataflows":
 58        # PR#32095 (Dictionary compressed arrangements) increased wallclock by ~10%
 59        min_ancestor_mz_version_per_commit[
 60            "90644c483749ce746da002f69dbd8bd2835ef9d0"
 61        ] = MzVersion.parse_mz("v26.29.0")
 62
 63    if scenario_class_name == "Retraction":
 64        # PR#36386 (timely-util: switch Column::Align to Vec<u64>) increases clusterd memory
 65        min_ancestor_mz_version_per_commit[
 66            "2571dcdc4b9a41359b5ee70054bb06423aab7c27"
 67        ] = MzVersion.parse_mz("v26.24.0")
 68
 69    if scenario_class_name == "CrossJoin":
 70        # PR#35328 (compute: move MV sink persist I/O off Timely thread) increases clusterd memory
 71        min_ancestor_mz_version_per_commit[
 72            "4d8deb2de7b6a0fb8d7c9e5b0a682416bef1e5c2"
 73        ] = MzVersion.parse_mz("v26.23.0")
 74
 75    if scenario_class_name in ("OrderBy", "FastPathFilterNoIndex"):
 76        # PR#34930 (Bump differential, timely and related) increases latency
 77        min_ancestor_mz_version_per_commit[
 78            "c20c82119261bab23c865bdfd1841348aa0acca3"
 79        ] = MzVersion.parse_mz("v26.12.0")
 80
 81    if scenario_class_name == "SwapSchema":
 82        # PR#29673 (adapter: derive implications from catalog changes) increases latency
 83        min_ancestor_mz_version_per_commit[
 84            "9a4ee6174553d4f14402e90927a05aa8cba37112"
 85        ] = MzVersion.parse_mz("v26.2.0")
 86
 87    if scenario_class_name in ("DifferentialJoin", "Retraction", "FinishOrderByLimit"):
 88        # PR#33979 (Enable active dataflow cancellation) increases latency
 89        min_ancestor_mz_version_per_commit[
 90            "e1944c939203eb29b84a18ce5153e2d99d157c1d"
 91        ] = MzVersion.parse_mz("v0.164.0")
 92
 93    if scenario_class_name == "CreateIndex":
 94        # PR#33938 (Update columnar, timely, differential) increases latency
 95        min_ancestor_mz_version_per_commit[
 96            "c28d0061a6c9e63ee50a5f555c5d90373d006686"
 97        ] = MzVersion.parse_mz("v0.164.0")
 98
 99    if scenario_class_name in ("CrossJoin", "AccumulateReductions"):
100        # PR#31501 (Remove ChunkedStack and related) increases latency for inserts
101        min_ancestor_mz_version_per_commit[
102            "e91f9d5e47f5dddf1d5d1a3afa3c27907bdbb0a7"
103        ] = MzVersion.parse_mz("v0.134.0")
104
105    if scenario_class_name == "ManySmallInserts":
106        # PR#31309 ([adapter] don't block on builtin table write in Session creation) increases latency for inserts
107        min_ancestor_mz_version_per_commit[
108            "e8c42c65afb7acd55eb7e530a92c89a9165f2e33"
109        ] = MzVersion.parse_mz("v0.133.0")
110
111    if scenario_class_name == "SwapSchema":
112        # PR#30883 (Columnar in logging dataflows) increases Mz memory usage
113        min_ancestor_mz_version_per_commit[
114            "a077232ffcb76ef7498da7637fbc9e80aa88765c"
115        ] = MzVersion.parse_mz("v0.131.0")
116
117    if scenario_class_name == "FastPathOrderByLimit":
118        # PR#30872 (rust: Upgrade to 1.83.0) increases wallclock
119        min_ancestor_mz_version_per_commit[
120            "74ebdd68dd2e9ec860837d52866ab9db61a0a49e"
121        ] = MzVersion.parse_mz("v0.129.0")
122
123    if scenario_class_name == "OptbenchTPCHQ01":
124        # PR#30806 ([optimizer] report per-transform metrics) increases wallclock
125        min_ancestor_mz_version_per_commit[
126            "a5355b2e89fedef9f7a04a96b737f7434a8e3f62"
127        ] = MzVersion.parse_mz("v0.128.0")
128
129    if scenario_class_name in ("KafkaUpsert", "KafkaUpsertUnique", "ParallelIngestion"):
130        # PR#30617 (storage/kafka: use separate consumer for metadata probing)
131        # adds 1s of delay to Kafka source startup
132        min_ancestor_mz_version_per_commit[
133            "9f7b634e6824f73d0effcdfa86c2b8b1642a4784"
134        ] = MzVersion.parse_mz("v0.127.0")
135    if scenario_class_name == "InsertMultiRow":
136        # PR#30622 (Refactor how we run FoldConstants) increases wallclock
137        min_ancestor_mz_version_per_commit[
138            "a558d6bdc4b29abf79457eaba52914a0d6c805b7"
139        ] = MzVersion.parse_mz("v0.127.0")
140    if "OptbenchTPCH" in scenario_class_name:
141        # PR#30602 (Replace ColumnKnowledge with EquivalencePropagation) increases wallclock
142        min_ancestor_mz_version_per_commit[
143            "1bd45336f8335b3487153beb7ce57f6391a7cf9c"
144        ] = MzVersion.parse_mz("v0.126.0")
145
146    if "OptbenchTPCH" in scenario_class_name:
147        # PR#30506 (Remove NonNullable transform) increases wallclock
148        min_ancestor_mz_version_per_commit[
149            "6981cb35f6a64748293867beb67e74b804f9e723"
150        ] = MzVersion.parse_mz("v0.126.0")
151
152    if scenario_class_name == "KafkaUpsertUnique":
153        # PR#29718 (storage: continual feedback upsert operator) increases CPU and memory
154        min_ancestor_mz_version_per_commit[
155            "b16b6a2c71f6e52adcbe37988cb262c15074a63f"
156        ] = MzVersion.parse_mz("v0.125.0")
157
158    if scenario_class_name in (
159        "SmallClusters",
160        "AccumulateReductions",
161        "CreateIndex",
162        "ManySmallUpdates",
163        "FastPathOrderByLimit",
164        "FastPathFilterIndex",
165        "ParallelIngestion",
166        "SubscribeParallelTableWithIndex",
167        "DeltaJoinMaintained",
168        "Update",
169        "Retraction",
170    ):
171        # PR#28307 (Render regions for object build and let bindings) increases messages
172        min_ancestor_mz_version_per_commit[
173            "ffcafa5b5c3e83845a868cf6103048c045b4f155"
174        ] = MzVersion.parse_mz("v0.113.0")
175
176    if "OptbenchTPCH" in scenario_class_name:
177        # PR#28664 (Introduce MirScalarExpr::reduce_safely) increases wallclock
178        min_ancestor_mz_version_per_commit[
179            "0a570022e1b78a205d5d9d3ebcb640b714e738c2"
180        ] = MzVersion.parse_mz("v0.111.0")
181
182    if scenario_class_name in {"OptbenchTPCHQ02", "OptbenchTPCHQ18", "OptbenchTPCHQ21"}:
183        # PR#28566 (Incorporate non-null information, and prevent its deletion) increased wallclock
184        min_ancestor_mz_version_per_commit[
185            "45d78090f8fea353dbdff9f1b2de463d475fabc3"
186        ] = MzVersion.parse_mz("v0.111.0")
187
188    if scenario_class_name == "ManyKafkaSourcesOnSameCluster":
189        # PR#28359 (Reapply "storage: wire up new reclock implementation") increased wallclock
190        min_ancestor_mz_version_per_commit[
191            "1937ca8b444a919e3077843980c97d61fc072252"
192        ] = MzVersion.parse_mz("v0.110.0")
193
194    if scenario_class_name == "ManyKafkaSourcesOnSameCluster":
195        # PR#28228 (storage/kafka: round-robin partition/worker assignment) increased wallclock
196        min_ancestor_mz_version_per_commit[
197            "256e1f839ba5243293e738bcd78d0f36c1be8f3e"
198        ] = MzVersion.parse_mz("v0.109.0")
199
200    if scenario_class_name == "MinMax":
201        # PR#27988 (adapter: always declare MV imports non-monotonic) increased wallclock and memory
202        min_ancestor_mz_version_per_commit[
203            "c18aa43828a7d2e9527151a0251c1f75a06d1469"
204        ] = MzVersion.parse_mz("v0.108.0")
205
206    if scenario_class_name == "AccumulateReductions":
207        # PR#26807 (compute: hydration status based on output frontiers) increased messages
208        min_ancestor_mz_version_per_commit[
209            "be0e50041169a5cac80c033b083c920b067d049f"
210        ] = MzVersion.parse_mz("v0.106.0")
211
212    if scenario_class_name == "SwapSchema":
213        # PR#27607 (catalog: Listen for updates in transactions) increased wallclock
214        min_ancestor_mz_version_per_commit[
215            "eef900de75d25fe854524dff9feeed8057e4bf79"
216        ] = MzVersion.parse_mz("v0.105.0")
217
218    if scenario_class_name == "MySqlInitialLoad":
219        # PR#27058 (storage: wire up new reclock implementation) increased memory usage
220        min_ancestor_mz_version_per_commit[
221            "10abb1cca257ffc3d605c99ed961e037bbf3fa51"
222        ] = MzVersion.parse_mz("v0.103.0")
223
224    if "OptbenchTPCH" in scenario_class_name:
225        # PR#26652 (explain: fix tracing fast path regression) significantly increased wallclock for OptbenchTPCH
226        min_ancestor_mz_version_per_commit[
227            "96c22562745f59010860bd825de5b4007a172c70"
228        ] = MzVersion.parse_mz("v0.97.0")
229        # PR#24155 (equivalence propagation) significantly increased wallclock for OptbenchTPCH
230        min_ancestor_mz_version_per_commit[
231            "3cfaa8207faa7df087942cd44311a3e7b4534c25"
232        ] = MzVersion.parse_mz("v0.92.0")
233
234    if scenario_class_name == "FastPathFilterNoIndex":
235        # PR#26084 (Optimize OffsetList) increased wallclock
236        min_ancestor_mz_version_per_commit[
237            "2abcd90ac3201b0235ea41c5db81bdd931a0fda0"
238        ] = MzVersion.parse_mz("v0.96.0")
239
240    if scenario_class_name == "ParallelDataflows":
241        # PR#26020 (Stage flatmap execution to consolidate as it goes) significantly increased wallclock
242        min_ancestor_mz_version_per_commit[
243            "da35946d636607a11fa27d5a8ea6e9939bf9525e"
244        ] = MzVersion.parse_mz("v0.93.0")
245
246    # add legacy entries
247    min_ancestor_mz_version_per_commit.update(
248        {
249            # insert newer commits at the top
250            # PR#25502 (JoinFusion across MFPs) increased number of messages
251            "62ea182963be5b956e13115b8ad39f7835fc4351": MzVersion.parse_mz("v0.91.0"),
252            # PR#24906 (Compute operator hydration status logging) increased number of messages against v0.88.1
253            "067ae870eef724f7eb5851b5745b9ff52b881481": MzVersion.parse_mz("v0.89.0"),
254            # PR#24918 (txn-wal: switch to a new operator protocol for lazy) increased number of messages against v0.86.1 (but got reverted in 0.87.1)
255            "b648576b52b8ba9bb3a4732f7022ab5c06ebed32": MzVersion.parse_mz("v0.87.0"),
256            # PR#23659 (txn-wal: enable in CI with "eager uppers") introduces regressions against v0.79.0
257            "c4f520a57a3046e5074939d2ea345d1c72be7079": MzVersion.parse_mz("v0.80.0"),
258            # PR#23421 (coord: smorgasbord of improvements for the crdb-backed timestamp oracle) introduces regressions against 0.78.13
259            "5179ebd39aea4867622357a832aaddcde951b411": MzVersion.parse_mz("v0.79.0"),
260            # insert newer commits at the top
261        }
262    )
263
264    return min_ancestor_mz_version_per_commit
265
266
267_MIN_ANCESTOR_MZ_VERSION_PER_COMMIT_TO_ACCOUNT_FOR_SCALABILITY_REGRESSIONS: dict[
268    str, MzVersion
269] = {
270    # insert newer commits at the top
271    # PR#37923 (adapter: sequence read-then-write from the session task with OCC) reduces write throughput
272    "4f0805a4d8d8e398f2fdfe10d5bdbe70b16924a4": MzVersion.parse_mz("v26.39.0"),
273    # PR#31309 ([adapter] don't block on builtin table write in Session creation) increases latency for inserts
274    "e8c42c65afb7acd55eb7e530a92c89a9165f2e33": MzVersion.parse_mz("v0.133.0"),
275    # PR#30238 (adapter: Remove the global write lock) introduces regressions against v0.123.0
276    "98678454a334a470ceea46b126586c7e60a0d8a5": MzVersion.parse_mz("v0.124.0"),
277    # PR#28307 (Render regions for object build and let bindings) introduces regressions against v0.112.0
278    "ffcafa5b5c3e83845a868cf6103048c045b4f155": MzVersion.parse_mz("v0.113.0"),
279    # PR#23659 (txn-wal: enable in CI with "eager uppers") introduces regressions against v0.79.0
280    "c4f520a57a3046e5074939d2ea345d1c72be7079": MzVersion.parse_mz("v0.80.0"),
281    # PR#23421 (coord: smorgasbord of improvements for the crdb-backed timestamp oracle) introduces regressions against 0.78.13
282    "5179ebd39aea4867622357a832aaddcde951b411": MzVersion.parse_mz("v0.79.0"),
283    # insert newer commits at the top
284}
285"""
286Git revisions that are based on commits listed as keys require at least the version specified in the value.
287Note that specified versions do not necessarily need to be already published.
288Commits must be ordered descending by their date.
289"""
290
291_MIN_ANCESTOR_MZ_VERSION_PER_COMMIT_TO_ACCOUNT_FOR_CORRECTNESS_REGRESSIONS: dict[
292    str, MzVersion
293] = {
294    # insert newer commits at the top
295    # PR#29179: Add client_address to session
296    "deb8beb77ddb69895aad899cf2eab90a0a78585d": MzVersion.parse_mz("v0.118.0"),
297    # PR#24497 (Make sure variance never returns a negative number) changes DFR or CTF handling compared to v0.84.0
298    "82a5130a8466525c5b3bdb3eff845c7c34585774": MzVersion.parse_mz("v0.85.0"),
299}
300"""
301See: #_MIN_ANCESTOR_MZ_VERSION_PER_COMMIT_TO_ACCOUNT_FOR_PERFORMANCE_REGRESSIONS
302"""
303
304ANCESTOR_OVERRIDES_FOR_SCALABILITY_REGRESSIONS = (
305    _MIN_ANCESTOR_MZ_VERSION_PER_COMMIT_TO_ACCOUNT_FOR_SCALABILITY_REGRESSIONS
306)
307ANCESTOR_OVERRIDES_FOR_CORRECTNESS_REGRESSIONS = (
308    _MIN_ANCESTOR_MZ_VERSION_PER_COMMIT_TO_ACCOUNT_FOR_CORRECTNESS_REGRESSIONS
309)
def get_ancestor_overrides_for_performance_regressions( scenario_class: type[typing.Any], scale: str | None) -> dict[str, materialize.mz_version.MzVersion]:
 19def get_ancestor_overrides_for_performance_regressions(
 20    scenario_class: type[Any], scale: str | None
 21) -> dict[str, MzVersion]:
 22    """
 23    Git revisions that are based on commits listed as keys require at least the version specified in the value.
 24    Note that specified versions do not necessarily need to be already published.
 25    Commits must be ordered descending by their date.
 26    """
 27
 28    scenario_class_name = scenario_class.__name__
 29
 30    min_ancestor_mz_version_per_commit = dict()
 31
 32    if scenario_class_name in (
 33        "MySqlInitialLoad",
 34        "MySqlInitialLoadMultiWorkerSampled",
 35        "MySqlInitialLoadMultiWorkerSingleTable",
 36    ):
 37        # PR#38094 (storage: Fast approximate snapshot partitioning) increased
 38        # snapshot wallclock: integer primary keys are no longer partitioned,
 39        # so MySqlInitialLoad reads serially, and approximate key probing is
 40        # slower than the exact OFFSET sampler on small datasets (~30% on
 41        # MySqlInitialLoadMultiWorkerSampled).
 42        min_ancestor_mz_version_per_commit[
 43            "de8eac0d1683ffd788dfba6edaa88aef7f0f1740"
 44        ] = MzVersion.parse_mz("v26.39.0")
 45
 46    if scenario_class_name == "FastPathFilterNoIndex":
 47        # PR#38151 (Sql-150: Temporary objects to the catalog) increased wallclock by ~10%
 48        min_ancestor_mz_version_per_commit[
 49            "f3b4f3f1becf6f56690360874e8aec111c38630d"
 50        ] = MzVersion.parse_mz("v26.39.0")
 51
 52    if scenario_class_name in ("ManySmallUpdates", "Update"):
 53        # PR#37923 (adapter: sequence read-then-write from the session task with OCC) increases wallclock for writes, and clusterd memory for ManySmallUpdates
 54        min_ancestor_mz_version_per_commit[
 55            "4f0805a4d8d8e398f2fdfe10d5bdbe70b16924a4"
 56        ] = MzVersion.parse_mz("v26.39.0")
 57
 58    if scenario_class_name == "ParallelDataflows":
 59        # PR#32095 (Dictionary compressed arrangements) increased wallclock by ~10%
 60        min_ancestor_mz_version_per_commit[
 61            "90644c483749ce746da002f69dbd8bd2835ef9d0"
 62        ] = MzVersion.parse_mz("v26.29.0")
 63
 64    if scenario_class_name == "Retraction":
 65        # PR#36386 (timely-util: switch Column::Align to Vec<u64>) increases clusterd memory
 66        min_ancestor_mz_version_per_commit[
 67            "2571dcdc4b9a41359b5ee70054bb06423aab7c27"
 68        ] = MzVersion.parse_mz("v26.24.0")
 69
 70    if scenario_class_name == "CrossJoin":
 71        # PR#35328 (compute: move MV sink persist I/O off Timely thread) increases clusterd memory
 72        min_ancestor_mz_version_per_commit[
 73            "4d8deb2de7b6a0fb8d7c9e5b0a682416bef1e5c2"
 74        ] = MzVersion.parse_mz("v26.23.0")
 75
 76    if scenario_class_name in ("OrderBy", "FastPathFilterNoIndex"):
 77        # PR#34930 (Bump differential, timely and related) increases latency
 78        min_ancestor_mz_version_per_commit[
 79            "c20c82119261bab23c865bdfd1841348aa0acca3"
 80        ] = MzVersion.parse_mz("v26.12.0")
 81
 82    if scenario_class_name == "SwapSchema":
 83        # PR#29673 (adapter: derive implications from catalog changes) increases latency
 84        min_ancestor_mz_version_per_commit[
 85            "9a4ee6174553d4f14402e90927a05aa8cba37112"
 86        ] = MzVersion.parse_mz("v26.2.0")
 87
 88    if scenario_class_name in ("DifferentialJoin", "Retraction", "FinishOrderByLimit"):
 89        # PR#33979 (Enable active dataflow cancellation) increases latency
 90        min_ancestor_mz_version_per_commit[
 91            "e1944c939203eb29b84a18ce5153e2d99d157c1d"
 92        ] = MzVersion.parse_mz("v0.164.0")
 93
 94    if scenario_class_name == "CreateIndex":
 95        # PR#33938 (Update columnar, timely, differential) increases latency
 96        min_ancestor_mz_version_per_commit[
 97            "c28d0061a6c9e63ee50a5f555c5d90373d006686"
 98        ] = MzVersion.parse_mz("v0.164.0")
 99
100    if scenario_class_name in ("CrossJoin", "AccumulateReductions"):
101        # PR#31501 (Remove ChunkedStack and related) increases latency for inserts
102        min_ancestor_mz_version_per_commit[
103            "e91f9d5e47f5dddf1d5d1a3afa3c27907bdbb0a7"
104        ] = MzVersion.parse_mz("v0.134.0")
105
106    if scenario_class_name == "ManySmallInserts":
107        # PR#31309 ([adapter] don't block on builtin table write in Session creation) increases latency for inserts
108        min_ancestor_mz_version_per_commit[
109            "e8c42c65afb7acd55eb7e530a92c89a9165f2e33"
110        ] = MzVersion.parse_mz("v0.133.0")
111
112    if scenario_class_name == "SwapSchema":
113        # PR#30883 (Columnar in logging dataflows) increases Mz memory usage
114        min_ancestor_mz_version_per_commit[
115            "a077232ffcb76ef7498da7637fbc9e80aa88765c"
116        ] = MzVersion.parse_mz("v0.131.0")
117
118    if scenario_class_name == "FastPathOrderByLimit":
119        # PR#30872 (rust: Upgrade to 1.83.0) increases wallclock
120        min_ancestor_mz_version_per_commit[
121            "74ebdd68dd2e9ec860837d52866ab9db61a0a49e"
122        ] = MzVersion.parse_mz("v0.129.0")
123
124    if scenario_class_name == "OptbenchTPCHQ01":
125        # PR#30806 ([optimizer] report per-transform metrics) increases wallclock
126        min_ancestor_mz_version_per_commit[
127            "a5355b2e89fedef9f7a04a96b737f7434a8e3f62"
128        ] = MzVersion.parse_mz("v0.128.0")
129
130    if scenario_class_name in ("KafkaUpsert", "KafkaUpsertUnique", "ParallelIngestion"):
131        # PR#30617 (storage/kafka: use separate consumer for metadata probing)
132        # adds 1s of delay to Kafka source startup
133        min_ancestor_mz_version_per_commit[
134            "9f7b634e6824f73d0effcdfa86c2b8b1642a4784"
135        ] = MzVersion.parse_mz("v0.127.0")
136    if scenario_class_name == "InsertMultiRow":
137        # PR#30622 (Refactor how we run FoldConstants) increases wallclock
138        min_ancestor_mz_version_per_commit[
139            "a558d6bdc4b29abf79457eaba52914a0d6c805b7"
140        ] = MzVersion.parse_mz("v0.127.0")
141    if "OptbenchTPCH" in scenario_class_name:
142        # PR#30602 (Replace ColumnKnowledge with EquivalencePropagation) increases wallclock
143        min_ancestor_mz_version_per_commit[
144            "1bd45336f8335b3487153beb7ce57f6391a7cf9c"
145        ] = MzVersion.parse_mz("v0.126.0")
146
147    if "OptbenchTPCH" in scenario_class_name:
148        # PR#30506 (Remove NonNullable transform) increases wallclock
149        min_ancestor_mz_version_per_commit[
150            "6981cb35f6a64748293867beb67e74b804f9e723"
151        ] = MzVersion.parse_mz("v0.126.0")
152
153    if scenario_class_name == "KafkaUpsertUnique":
154        # PR#29718 (storage: continual feedback upsert operator) increases CPU and memory
155        min_ancestor_mz_version_per_commit[
156            "b16b6a2c71f6e52adcbe37988cb262c15074a63f"
157        ] = MzVersion.parse_mz("v0.125.0")
158
159    if scenario_class_name in (
160        "SmallClusters",
161        "AccumulateReductions",
162        "CreateIndex",
163        "ManySmallUpdates",
164        "FastPathOrderByLimit",
165        "FastPathFilterIndex",
166        "ParallelIngestion",
167        "SubscribeParallelTableWithIndex",
168        "DeltaJoinMaintained",
169        "Update",
170        "Retraction",
171    ):
172        # PR#28307 (Render regions for object build and let bindings) increases messages
173        min_ancestor_mz_version_per_commit[
174            "ffcafa5b5c3e83845a868cf6103048c045b4f155"
175        ] = MzVersion.parse_mz("v0.113.0")
176
177    if "OptbenchTPCH" in scenario_class_name:
178        # PR#28664 (Introduce MirScalarExpr::reduce_safely) increases wallclock
179        min_ancestor_mz_version_per_commit[
180            "0a570022e1b78a205d5d9d3ebcb640b714e738c2"
181        ] = MzVersion.parse_mz("v0.111.0")
182
183    if scenario_class_name in {"OptbenchTPCHQ02", "OptbenchTPCHQ18", "OptbenchTPCHQ21"}:
184        # PR#28566 (Incorporate non-null information, and prevent its deletion) increased wallclock
185        min_ancestor_mz_version_per_commit[
186            "45d78090f8fea353dbdff9f1b2de463d475fabc3"
187        ] = MzVersion.parse_mz("v0.111.0")
188
189    if scenario_class_name == "ManyKafkaSourcesOnSameCluster":
190        # PR#28359 (Reapply "storage: wire up new reclock implementation") increased wallclock
191        min_ancestor_mz_version_per_commit[
192            "1937ca8b444a919e3077843980c97d61fc072252"
193        ] = MzVersion.parse_mz("v0.110.0")
194
195    if scenario_class_name == "ManyKafkaSourcesOnSameCluster":
196        # PR#28228 (storage/kafka: round-robin partition/worker assignment) increased wallclock
197        min_ancestor_mz_version_per_commit[
198            "256e1f839ba5243293e738bcd78d0f36c1be8f3e"
199        ] = MzVersion.parse_mz("v0.109.0")
200
201    if scenario_class_name == "MinMax":
202        # PR#27988 (adapter: always declare MV imports non-monotonic) increased wallclock and memory
203        min_ancestor_mz_version_per_commit[
204            "c18aa43828a7d2e9527151a0251c1f75a06d1469"
205        ] = MzVersion.parse_mz("v0.108.0")
206
207    if scenario_class_name == "AccumulateReductions":
208        # PR#26807 (compute: hydration status based on output frontiers) increased messages
209        min_ancestor_mz_version_per_commit[
210            "be0e50041169a5cac80c033b083c920b067d049f"
211        ] = MzVersion.parse_mz("v0.106.0")
212
213    if scenario_class_name == "SwapSchema":
214        # PR#27607 (catalog: Listen for updates in transactions) increased wallclock
215        min_ancestor_mz_version_per_commit[
216            "eef900de75d25fe854524dff9feeed8057e4bf79"
217        ] = MzVersion.parse_mz("v0.105.0")
218
219    if scenario_class_name == "MySqlInitialLoad":
220        # PR#27058 (storage: wire up new reclock implementation) increased memory usage
221        min_ancestor_mz_version_per_commit[
222            "10abb1cca257ffc3d605c99ed961e037bbf3fa51"
223        ] = MzVersion.parse_mz("v0.103.0")
224
225    if "OptbenchTPCH" in scenario_class_name:
226        # PR#26652 (explain: fix tracing fast path regression) significantly increased wallclock for OptbenchTPCH
227        min_ancestor_mz_version_per_commit[
228            "96c22562745f59010860bd825de5b4007a172c70"
229        ] = MzVersion.parse_mz("v0.97.0")
230        # PR#24155 (equivalence propagation) significantly increased wallclock for OptbenchTPCH
231        min_ancestor_mz_version_per_commit[
232            "3cfaa8207faa7df087942cd44311a3e7b4534c25"
233        ] = MzVersion.parse_mz("v0.92.0")
234
235    if scenario_class_name == "FastPathFilterNoIndex":
236        # PR#26084 (Optimize OffsetList) increased wallclock
237        min_ancestor_mz_version_per_commit[
238            "2abcd90ac3201b0235ea41c5db81bdd931a0fda0"
239        ] = MzVersion.parse_mz("v0.96.0")
240
241    if scenario_class_name == "ParallelDataflows":
242        # PR#26020 (Stage flatmap execution to consolidate as it goes) significantly increased wallclock
243        min_ancestor_mz_version_per_commit[
244            "da35946d636607a11fa27d5a8ea6e9939bf9525e"
245        ] = MzVersion.parse_mz("v0.93.0")
246
247    # add legacy entries
248    min_ancestor_mz_version_per_commit.update(
249        {
250            # insert newer commits at the top
251            # PR#25502 (JoinFusion across MFPs) increased number of messages
252            "62ea182963be5b956e13115b8ad39f7835fc4351": MzVersion.parse_mz("v0.91.0"),
253            # PR#24906 (Compute operator hydration status logging) increased number of messages against v0.88.1
254            "067ae870eef724f7eb5851b5745b9ff52b881481": MzVersion.parse_mz("v0.89.0"),
255            # PR#24918 (txn-wal: switch to a new operator protocol for lazy) increased number of messages against v0.86.1 (but got reverted in 0.87.1)
256            "b648576b52b8ba9bb3a4732f7022ab5c06ebed32": MzVersion.parse_mz("v0.87.0"),
257            # PR#23659 (txn-wal: enable in CI with "eager uppers") introduces regressions against v0.79.0
258            "c4f520a57a3046e5074939d2ea345d1c72be7079": MzVersion.parse_mz("v0.80.0"),
259            # PR#23421 (coord: smorgasbord of improvements for the crdb-backed timestamp oracle) introduces regressions against 0.78.13
260            "5179ebd39aea4867622357a832aaddcde951b411": MzVersion.parse_mz("v0.79.0"),
261            # insert newer commits at the top
262        }
263    )
264
265    return min_ancestor_mz_version_per_commit

Git revisions that are based on commits listed as keys require at least the version specified in the value. Note that specified versions do not necessarily need to be already published. Commits must be ordered descending by their date.

ANCESTOR_OVERRIDES_FOR_SCALABILITY_REGRESSIONS = {'4f0805a4d8d8e398f2fdfe10d5bdbe70b16924a4': MzVersion(major=26, minor=39, patch=0, prerelease=None, build=None), 'e8c42c65afb7acd55eb7e530a92c89a9165f2e33': MzVersion(major=0, minor=133, patch=0, prerelease=None, build=None), '98678454a334a470ceea46b126586c7e60a0d8a5': MzVersion(major=0, minor=124, patch=0, prerelease=None, build=None), 'ffcafa5b5c3e83845a868cf6103048c045b4f155': MzVersion(major=0, minor=113, patch=0, prerelease=None, build=None), 'c4f520a57a3046e5074939d2ea345d1c72be7079': MzVersion(major=0, minor=80, patch=0, prerelease=None, build=None), '5179ebd39aea4867622357a832aaddcde951b411': MzVersion(major=0, minor=79, patch=0, prerelease=None, build=None)}
ANCESTOR_OVERRIDES_FOR_CORRECTNESS_REGRESSIONS = {'deb8beb77ddb69895aad899cf2eab90a0a78585d': MzVersion(major=0, minor=118, patch=0, prerelease=None, build=None), '82a5130a8466525c5b3bdb3eff845c7c34585774': MzVersion(major=0, minor=85, patch=0, prerelease=None, build=None)}