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