You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
This issue encompasses 2 goals for test fixture releases:
Higher mainnet release cadence, i.e., more regular releases of test cases for stable forks.
Faster release builds, in particular, for development releases. i.e., we can quickly generate releases that target specific development work (e.g., bal-devnet-3 or benchmark).
Goal 2. could also help unlock more finely grained releases, e.g., for every individual EIP, e.g., eips/amsterdam/eip-2780, but we should verify with client teams whether this would be beneficial - our releases should match client teams branches as close as possible.
Important
Implication: If we only fill for the development fork in dev releases, clients need to consume two artifacts from two separate releases for full coverage and no regressions:
Enable multi-release support to consume cache --input (i.e., allow the input to be a comma-separated list of releases) to allow full coverage runs in the consume Hive simulators.
Socialize new release model with client teams: New mainnet cadence and the two-artifact consumption model.
Follow up with client teams on their development branch structures: Input for whether finer-grained releases (e.g., per-EIP) would be useful.
Update docs for removal of fixtures_stable/fixtures_develop -> fixtures_mainnet.
Higher Mainnet Release Cadence
#2592 mainly solved 1., but requires team agreement/alignment and some follow-up work (only docs?). Essentially, as of now, we can readily create fixtures_mainnet (~1hr30). More info below, but TLDR: fixtures_mainnet replaces fixtures_stable and fixtures_develop has been removed.
Faster Release Builds
This issue proposes that we achieve faster development release builds by:
Only filling the development fork in development releases — e.g., for devnet releases like bal-devnet-4, --until=Amsterdam (previously used for client-team convenience) would change to --fork=Amsterdam.
Improving the parallelization strategy in multi-runner release generation from a naive per-fork split to use pytest-split (or other strategy) that load balances the run across multiple runners.
Target: Difficult to judge upfront, but >2x speedup vs. current development release build time via fork split.
We have two bottlenecks in fixture generation: Compute and Memory. #2592 parallelized compute by splitting test fixture generation over multiple runners by fork (facilitated by #2134). But this approach has the following drawbacks:
Single-fork releases, e.g., benchmark, can not be parallelized.
It's inefficient as runners are not well-balanced.
Doesn't scale with new forks.
Btw, regarding memory, @fselmo has currently hit this hard and the situation should greatly improve. This issue only targets compute, currently.
Up to and including Osaka, until #2592, we had two types of releases:
"Full releases" which consist of two fixture artifacts:
fixtures_stable: fixtures for deployed forks.
fixtures_develop: superset of fixtures_stable plus fixtures for the current development fork.
"Feature releases" of development forks which contain one artifact:
fixtures.
These release types originated in ethereum/execution-spec-tests and predate The Weld. In execution-spec-tests, multiple development forks resided alongside each other in the default branch (main). This is no longer the case in execution-specs where a branch only ever contains code targeting one development fork.
#2592 shook things up a little and removed "full" releases due to the following reasons:
The develop artifact contained stable as a subset (redundancy).
They're expensive to produce. The "full" release even generated stable and develop independently, i.e., all test cases filled for stable forks were filled twice!
These releases were generated from the default branch, which doesn't reflect the current status of the development fork. Post-Weld, fixtures_develop gets quickly out-of-date with the current development focus.
This issue encompasses 2 goals for test fixture releases:
mainnetrelease cadence, i.e., more regular releases of test cases for stable forks.bal-devnet-3orbenchmark).Goal 2. could also help unlock more finely grained releases, e.g., for every individual EIP, e.g.,
eips/amsterdam/eip-2780, but we should verify with client teams whether this would be beneficial - our releases should match client teams branches as close as possible.Important
Implication: If we only fill for the development fork in dev releases, clients need to consume two artifacts from two separate releases for full coverage and no regressions:
fixtures_mainnet.tar.gz.fixtures_<dev_feature_name>.tar.gz.Subtasks
consume cache --input(i.e., allow the input to be a comma-separated list of releases) to allow full coverage runs in theconsumeHive simulators.mainnetcadence and the two-artifact consumption model.fixtures_stable/fixtures_develop->fixtures_mainnet.Higher Mainnet Release Cadence
#2592 mainly solved 1., but requires team agreement/alignment and some follow-up work (only docs?). Essentially, as of now, we can readily create
fixtures_mainnet(~1hr30). More info below, but TLDR:fixtures_mainnetreplacesfixtures_stableandfixtures_develophas been removed.Faster Release Builds
This issue proposes that we achieve faster development release builds by:
bal-devnet-4,--until=Amsterdam(previously used for client-team convenience) would change to--fork=Amsterdam.Target: Difficult to judge upfront, but >2x speedup vs. current development release build time via fork split.
We have two bottlenecks in fixture generation: Compute and Memory. #2592 parallelized compute by splitting test fixture generation over multiple runners by fork (facilitated by #2134). But this approach has the following drawbacks:
benchmark, can not be parallelized.Btw, regarding memory, @fselmo has currently hit this hard and the situation should greatly improve. This issue only targets compute, currently.
Status Quo (pre-#2592): EEST Release Types
Up to and including Osaka, until #2592, we had two types of releases:
fixtures_stable: fixtures for deployed forks.fixtures_develop: superset offixtures_stableplus fixtures for the current development fork.fixtures.These release types originated in ethereum/execution-spec-tests and predate The Weld. In execution-spec-tests, multiple development forks resided alongside each other in the default branch (
main). This is no longer the case in execution-specs where a branch only ever contains code targeting one development fork.#2592 shook things up a little and removed "full" releases due to the following reasons:
developartifact containedstableas a subset (redundancy).fixtures_developgets quickly out-of-date with the current development focus.