Skip to content

executor: replace HashBuild estimates with allocation-owned admission - #26531

Merged
XuPeng-SH merged 67 commits into
matrixorigin:mainfrom
aptend:feature/26459-statement-lifecycle
Aug 3, 2026
Merged

executor: replace HashBuild estimates with allocation-owned admission#26531
XuPeng-SH merged 67 commits into
matrixorigin:mainfrom
aptend:feature/26459-statement-lifecycle

Conversation

@aptend

@aptend aptend commented Jul 31, 2026

Copy link
Copy Markdown
Contributor

What type of PR is this?

  • API-change
  • BUG
  • Improvement
  • Documentation
  • Feature
  • Test and CI
  • Code Refactoring

Which issue(s) this PR fixes:

issue #26459

What this PR does / why we need it:

Replaces estimator-driven HashBuild hard admission with one allocation-owned production path:

  • MPool admits the physical capacity it is about to allocate and records immutable account, owner, and site provenance; physical Free is the only release owner.
  • Removes the activation gate, estimated-memory reservation, compatibility ledger, and manual partial expression ledger. Every MPool-backed vector owned by a HashBuild/join expression tree now allocates through the same attempt account; borrowed vectors retain source ownership, and opaque library Go heap remains an explicit boundary instead of being estimated.
  • Covers retained HashBuild/join storage: hash tables, copied build batches, JoinMap state, retained keys, join state, runtime-filter payloads, Product results, spill encode/decode/rebuild buffers, and HashJoin/LoopJoin/DedupJoin/RightDedupJoin result/finalize batches.
  • Result and expression storage is rejected by the same hard capacity contract and is released before prepared execution clears its generation (Reset -> ClearAllocationAccount).
  • ProductL2 remains one explicit static boundary: producer-owned JoinMap storage stays accounted until Free, while ProductL2 CPU/GPU index and scratch storage stays wholly outside the controlled domain until both native allocators expose the same physical capacity contract.
  • Gives every local/remote/retry attempt one account generation, attaches runtime scan/load clones before Prepare, drains transferred objects, clears owners in reverse order, and validates terminal zero exactly once.
  • Keeps memory, spill-disk, and spill-FD pressure disjoint; memory capacity can make bounded progress through spill, reclaim, smaller unpublished input, or optional runtime-filter degradation.
  • Makes JoinMap, bitmap mailbox, pSpool, and spill-file transfers single-owner and cancellation-safe.
  • Preserves GROUPING sentinel semantics through copy/hash/equality/order and Sample late/alternating grouping domains.
  • Removes obsolete estimator, expression scratch, compatibility, and duplicate ownership code.

Validation was completed locally after rebasing onto main 49f9e33cae48; candidate head is 258010da171c:

  • complete affected package matrix: pass;
  • selected lifecycle, expression, join-result, transfer, ProductL2 boundary, spill, Sample, and compile packages under -race -p=2: pass;
  • focused expression/join-result/spill tests under -race -count=10: pass;
  • go vet -mod=readonly and go build -mod=readonly for every modified production package: pass;
  • git diff --check and gofmt: clean;
  • three independent correctness/ownership/performance review loops: no blocker, major, or minor finding after closing physical-capacity wire identity, fatal-first pressure classification, Packer allocation shape, and prepared Reset -> ClearAllocationAccount lifecycle.

Local benchmark evidence shows zero Go allocations for physical admission/release, bounded vector/pSpool reuse, fixed iterator count for mixed GROUPING batches, and spill serialization improving from 67,751 ns/op / 2,904 B/op / 516 allocs/op to 62,709 ns/op / 344 B/op / 4 allocs/op.

Design, implementation plan, local validation, and raw benchmark evidence:

  • docs/rfcs/00000000_allocation_accounted_memory_admission.md
  • docs/design/allocation_accounted_memory_admission_impl.md
  • docs/design/evidence/26459_local_validation.md
  • docs/design/evidence/26459_allocation_accounting_bench.txt

A distributed TPCH 100G validation run (30690122244) exposed one lifecycle boundary bug rather than OOM: Q7 remote fragments sharing a CN also shared a message board, while the first fragment completion closed that board before its siblings finished. The fix gives each physical remote execution a UUID and expected-fragment count per CN; registration and completion are counted, and only the final fragment closes/drains the board and finalizes every allocation account exactly once. A four-fragment lost-final-response test covers the failure edge. Full pkg/sql/compile normal/race tests, vector/batch normal/race tests, affected vet, repeated alias decode benchmarks, and an independent correctness re-review all pass after the fix.

Latest-main spill-recovery integration

Integrated the spill-recovery changes from d29b4758f8 (PR #26585); the branch is current through 820ee12144 and preserved its recovery-liveness invariant without restoring a second estimator ledger. Each shuffle HashBuild worker now pre-admits an isolated recovery-capacity class; physical MPool allocations borrow that headroom and remain the only exact allocation owner, so recovery capacity is not double-charged. The floor covers expression replacement, partition/materialization, marshal, and serial Packer headroom, and is released at the build terminal boundary. Vector varlena-area proofs and the serial encoded-size/Packer contracts from #26585 are retained.

Post-merge local validation at 0552adba24: affected and dependent package tests pass; mpool, process, hashbuild, and hashjoin pass under -race; focused recovery transfer/isolation tests pass under -race -count=100; and the forced-shuffle SQL blackbox (TestHashBuildSharedBudgetRecoverySQL, 28 MiB cap, DOP 8, serial_full, one million rows) spills successfully, returns the exact result, and admits a fresh statement afterward. The retained varlena projection benchmark remains allocation-free (~0.24 µs per 32-column 8K-row batch).

@matrix-meow matrix-meow added the size/XXL Denotes a PR that changes 2000+ lines label Jul 31, 2026
@mergify mergify Bot added kind/bug Something isn't working kind/feature kind/enhancement kind/documentation Improvements or additions to documentation kind/test-ci kind/refactor Code refactor labels Jul 31, 2026

@gouhongshen gouhongshen left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Codex automated review

The earlier expression-tree and join-result blockers are fixed. The remote late-fragment blocker is resolved by the execution/CN-keyed tombstone and is withdrawn. The original short sparse-bitmap case is fixed, but its replacement sizing rule introduces a distinct blocking panic for valid stale-long bitmaps. The separate workload-validation blocker remains open per the author and is omitted because another reviewer already raised it. Focused tests could not run because this worktree lacks cgo/libmo.dylib.

P1 - Preserve stale bitmap extent when duplicating accounted vectors (pkg/container/vector/vector.go:1677)

Author response: The author states that Dup now admits every non-empty external bitmap for the complete vector row domain, with coverage for bitmap.Len() < v.length. That reported sparse case is fixed. Why this remains blocking: the inverse state is also valid—SetLength changes only v.length, and the existing TestUnionBatchFastPathStaleBitmapBits explicitly documents bits beyond the shortened length as normal reuse state. This change removes the previous bitmap-length sizing and admits only v.length. For an accounted vector preextended to N rows, with a null/grouping bit near N-1 and then SetLength(1), Dup allocates one-row external bitmap capacity before Bitmap.InitWith copies the N-row source; InitWith panics when the source data exceeds that capacity. This is a distinct stale-extent root cause, not a repeat of the short sparse case. Size for the checked maximum of vector length and bitmap length, or deliberately trim the copied bitmap to the row domain, and cover stale null/grouping extents—including the constant-grouping branch.

@XuPeng-SH XuPeng-SH left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Request changes.

The earlier expression-tree, retained join-result, and remote late-fragment ownership blockers have responses, but this head is still not ready to approve.

  1. Vector.Dup must preserve valid stale bitmap extent. A vector may be preextended with a null/grouping bit near the old high watermark and then shortened with SetLength(1). If Dup allocates external bitmap capacity from only the current vector length, Bitmap.InitWith can copy the longer valid source bitmap into too-small storage and panic. Admit the checked maximum of the vector row domain and each source bitmap extent, or explicitly trim semantics before copying, for both null and grouping, including the constant-grouping path. Add the stale-long null/grouping regression; the sparse-short case alone is insufficient.

  2. Workload acceptance is incomplete. The PR itself says the controlled base/head TPCH resident+spill A/B evidence and issue acceptance matrix are not yet complete while a TPCH regression is being resolved. This change replaces a production memory-admission path across 205 files; package/race tests do not establish distributed no-OOM, spill correctness, or the non-spill performance contract. Please add durable regressions/workload evidence and update the stated acceptance matrix before approval.

@aptend

aptend commented Aug 2, 2026

Copy link
Copy Markdown
Contributor Author

Addressed the stale-long bitmap blocker in d13b910. Vector.Dup now reserves external null/grouping bitmap storage for max(vector row domain, source bitmap extent) before InitWith, including constant grouping and zero-count stale extents. The sparse-short, stale-long flat/constant, and empty-stale regressions pass; both focused tests pass under -race -count=100, and the full pkg/container/vector package passes under -race, build, and vet. The completed TPCH100G run averaged 95.029s across four measured turns versus 98.252s on the cited recent main run (3.3% faster), with all Q1-Q22 correct and no OOM/query failure. Fresh head validation for TPCH100G + TPCH1T is running at https://github.com/matrixorigin/mo-auto-test/actions/runs/30758186183. Re-review has been requested through the GitHub review-request API.

@gouhongshen gouhongshen left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Codex automated review

The d13b910 delta fixes the prior stale-long Vector.Dup panic by admitting max(vector length, source bitmap extent) for null/grouping storage, including constant and empty-stale cases; that blocker is withdrawn. The sparse-short bitmap issue remains fixed. Earlier expression-tree and join-result blockers are fixed, and the remote late-fragment blocker remains withdrawn. The workload-validation blocker remains unresolved in another reviewer’s thread and is not duplicated here. Focused tests/build/vet could not run because local CGo artifacts and headers are absent; formatting and diff checks pass.

@XuPeng-SH XuPeng-SH left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Re-reviewed the complete PR at d13b9103c8 and read all existing discussions and author responses. The retained expression-tree and join-result ownership blockers are fixed. The sparse-short and stale-long Vector.Dup panics are also fixed at this head; their focused tests pass locally.

Three blockers remain:

  1. Accounted buffer growth applies GrowCapacity twice, producing false hard-cap rejections (inline). The same shape exists in the accounted string-hash iterator.
  2. The remote late-fragment fix only rejects the old generation for five minutes (inline). A pipeline RPC can remain alive for the 24-hour MaxRpcTime, so the same execution can still reopen after tombstone expiry.
  3. Workload acceptance remains incomplete. The latest TPCH100G+1T run is still in progress, with the 1T step and result collection unfinished. The committed evidence predates the final semantic fixes, and the PR still has no durable workload-level acceptance matrix for #26174/#26192/#26413/#26454 plus the original #25782 high-cardinality case. Package tests cannot establish distributed no-OOM, terminal-zero, spill correctness, or the base/head resident+spill performance contract.

Local validation: git diff --check, build, vet, and the complete tests for mpool, hashmap, vector, hashbuild, spillutil, and compile pass both normally and under -race; the focused bitmap/account/remote tests also pass under -race -count=100. Two counterexample regressions fail on this head: the exact single-replacement admission boundary is rejected as used=10240 requested=24576 limit=26624, and deleting the expired tombstone allows the same execution key to register successfully. Please fix both invariants and close the workload acceptance evidence before approval.

Comment thread pkg/common/mpool/accounted_buffer.go Outdated
Comment thread pkg/sql/compile/remote_allocation_statement_group.go Outdated

@XuPeng-SH XuPeng-SH left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Blocking issue on the current head: optools/images/Dockerfile changes the native stage from make -C thirdparties to init usearch xxhash croaring, so it no longer produces the platform ONNX Runtime library. This stage is not non-ONNX-only: .github/workflows/native-dependency-check.yml builds target native from this Dockerfile and explicitly verifies thirdparties/install/lib/onnxruntime.so on amd64 and onnxruntime_arm64.so on arm64. Both Native build jobs on run 30795881950 fail at that exact test. Please preserve the native-stage output contract, or update every consumer and its validation coherently; skipping the required artifact in this shared stage leaves the branch image incomplete.

@aptend

aptend commented Aug 3, 2026

Copy link
Copy Markdown
Contributor Author

The temporary ONNX-runtime skip used only for remote acceptance validation has been moved off this PR to aptend/matrixone:validation/26459-skip-onnx (commit 95baebc538e0889995f8d8560d8fd3043234b648).

It is reverted from this PR by 57811ed7fa7cc5ed9234f92a9167c8187abaacdf, so the shared native-stage dependency contract (including ONNX Runtime) is restored here. The new acceptance runs are being triggered exclusively against the validation branch.

@XuPeng-SH XuPeng-SH left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Re-reviewed exact head 57811ed7fa7c. The new commit exactly reverts the Dockerfile change that omitted ONNX Runtime; its tree is byte-identical to reviewed head cd36bbbe776e, where the HashBuild allocation-owned admission, remote tombstone lifetime, spill-recovery reservation, ownership/lifecycle paths, and focused package tests were already checked. The shared native stage now again satisfies native-dependency-check.yml. No remaining code blocker found. CI for this head is still running.

@iamlinjunhong iamlinjunhong left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[P1] 24 小时 tombstone 注册表缺少硬空间上限
不完整的远端执行结束时,installRemoteAllocationStatementTombstoneLocked 会把唯一的 executionID@CN key 和一个 timer 放入进程级全局 map:
remoteAllocationStatementGroups.tombstones[key] = tombstone
tombstone.timer = time.AfterFunc(
remoteAllocationStatementTombstoneTimeout,
...
)
该 tombstone 固定保留 MaxRpcTime = 24h,但注册表没有数量、字节或 admission 上限。
触发路径是:
远端计划预计多个 fragment;
dispatch 只成功一部分,或某个 fragment 提前失败;
group 被终止并安装 tombstone;
每次重试使用新的 execution ID,旧条目无法复用;
在网络异常或持续 partial-dispatch 下,CN 保留约 失败速率 × 24h 个 map entry、字符串和 runtime timer。

@aptend

aptend commented Aug 3, 2026

Copy link
Copy Markdown
Contributor Author

Addressed the tombstone-registry P1 in bf244d6.

The fix reserves bounded generation capacity at first remote-group admission: len(byKey) + len(tombstones) < 4096. Existing fragments of an admitted generation reuse that reservation. A partial dispatch can therefore transfer its already-reserved generation into a 24-hour tombstone, but retries cannot create more retained keys or timers than the hard limit. At capacity, only new generations fail closed; no tombstone is evicted, so a late fragment cannot reopen an aborted execution.

The regression fills the registry to the exact boundary, proves an existing sibling is still admitted, a new execution is rejected, and the active partial execution transitions to the 4096th tombstone. Focused tests passed under race with count 100; the full pkg/sql/compile package passed under race, and vet passed.

@mergify

mergify Bot commented Aug 3, 2026

Copy link
Copy Markdown
Contributor

Merge Queue Status

  • Entered queue2026-08-03 12:17 UTC · Rule: main · triggered by rule Automatic queue on approval for main
  • 🚫 Left the queue2026-08-03 12:18 UTC · at bf244d6b5ca6090b8e29ccbcc550816f554ca42e

This pull request spent 27 seconds in the queue, with no time running CI.

Reason

The pull request can't be updated

merge conflict between base and head

Hint

You should update or rebase your pull request manually. If you do, this pull request will automatically be requeued once the queue conditions match again.
If you think this was a flaky issue, you can requeue the pull request, without updating it, by posting a @mergifyio queue comment.

Requeued — the merge queue status continues in this comment ↓.

@mergify

mergify Bot commented Aug 3, 2026

Copy link
Copy Markdown
Contributor

Merge Queue Status

  • Entered queue2026-08-03 13:26 UTC · Rule: main · triggered by rule Automatic queue on approval for main
  • Checks failed · in-place
  • 🚫 Left the queue2026-08-03 14:12 UTC · at b8fb6f4e99d7ef779dc986db7c3c3ce316867da7

This pull request spent 46 minutes 21 seconds in the queue, with no time running CI.

Waiting for
  • any of: [🛡 GitHub branch protection]
    • check-neutral = Matrixone CI / UT Test on Ubuntu/x86
    • check-skipped = Matrixone CI / UT Test on Ubuntu/x86
    • check-success = Matrixone CI / UT Test on Ubuntu/x86
  • any of: [🛡 GitHub branch protection]
    • check-neutral = Matrixone CI / SCA Test on Linux/arm64
    • check-skipped = Matrixone CI / SCA Test on Linux/arm64
    • check-success = Matrixone CI / SCA Test on Linux/arm64
  • any of: [🛡 GitHub branch protection]
    • check-neutral = Matrixone Compose CI / multi cn e2e bvt test docker compose(PROXY)
    • check-skipped = Matrixone Compose CI / multi cn e2e bvt test docker compose(PROXY)
    • check-success = Matrixone Compose CI / multi cn e2e bvt test docker compose(PROXY)
  • any of: [🛡 GitHub branch protection]
    • check-neutral = Matrixone Utils CI / Coverage
    • check-skipped = Matrixone Utils CI / Coverage
    • check-success = Matrixone Utils CI / Coverage
All conditions
  • any of [🛡 GitHub branch protection]:
    • check-neutral = Matrixone CI / UT Test on Ubuntu/x86
    • check-skipped = Matrixone CI / UT Test on Ubuntu/x86
    • check-success = Matrixone CI / UT Test on Ubuntu/x86
  • any of [🛡 GitHub branch protection]:
    • check-neutral = Matrixone CI / SCA Test on Linux/arm64
    • check-skipped = Matrixone CI / SCA Test on Linux/arm64
    • check-success = Matrixone CI / SCA Test on Linux/arm64
  • any of [🛡 GitHub branch protection]:
    • check-neutral = Matrixone Compose CI / multi cn e2e bvt test docker compose(PROXY)
    • check-skipped = Matrixone Compose CI / multi cn e2e bvt test docker compose(PROXY)
    • check-success = Matrixone Compose CI / multi cn e2e bvt test docker compose(PROXY)
  • any of [🛡 GitHub branch protection]:
    • check-neutral = Matrixone Utils CI / Coverage
    • check-skipped = Matrixone Utils CI / Coverage
    • check-success = Matrixone Utils CI / Coverage
  • #review-threads-unresolved = 0 [🛡 GitHub branch protection]
  • github-review-approved [🛡 GitHub branch protection]
  • any of [🛡 GitHub branch protection]:
    • check-success = Matrixone Standlone CI / e2e BVT Test on Linux/x64(LAUNCH, PESSIMISTIC)
    • check-neutral = Matrixone Standlone CI / e2e BVT Test on Linux/x64(LAUNCH, PESSIMISTIC)
    • check-skipped = Matrixone Standlone CI / e2e BVT Test on Linux/x64(LAUNCH, PESSIMISTIC)
  • any of [🛡 GitHub branch protection]:
    • check-success = Matrixone UT Coverage / UT Coverage on Ubuntu/x86
    • check-neutral = Matrixone UT Coverage / UT Coverage on Ubuntu/x86
    • check-skipped = Matrixone UT Coverage / UT Coverage on Ubuntu/x86

Reason

The merge conditions cannot be satisfied due to failing checks

Failing checks:

Hint

You may have to fix your CI before adding the pull request to the queue again.
If you update this pull request, to fix the CI, it will automatically be requeued once the queue conditions match again.
If you think this was a flaky issue instead, you can requeue the pull request, without updating it, by posting a @mergifyio queue comment.

Requeued — the merge queue status continues in this comment ↓.

@mergify

mergify Bot commented Aug 3, 2026

Copy link
Copy Markdown
Contributor

Merge Queue Status

  • Entered queue2026-08-03 15:33 UTC · Rule: main · triggered by rule Automatic queue on approval for main
  • 🟠 Checks running · in-place
  • 🚫 Left the queue2026-08-03 16:05 UTC · at e97b797511370989bbabd474e7b6956bafc678b6

This pull request spent 32 minutes in the queue, with no time running CI.

Waiting for
  • any of: [🛡 GitHub branch protection]
    • check-neutral = Matrixone Standlone CI / e2e BVT Test on Linux/x64(LAUNCH, PESSIMISTIC)
    • check-skipped = Matrixone Standlone CI / e2e BVT Test on Linux/x64(LAUNCH, PESSIMISTIC)
    • check-success = Matrixone Standlone CI / e2e BVT Test on Linux/x64(LAUNCH, PESSIMISTIC)
  • any of: [🛡 GitHub branch protection]
    • check-neutral = Matrixone CI / UT Test on Ubuntu/x86
    • check-skipped = Matrixone CI / UT Test on Ubuntu/x86
    • check-success = Matrixone CI / UT Test on Ubuntu/x86
  • any of: [🛡 GitHub branch protection]
    • check-neutral = Matrixone CI / SCA Test on Linux/arm64
    • check-skipped = Matrixone CI / SCA Test on Linux/arm64
    • check-success = Matrixone CI / SCA Test on Linux/arm64
  • any of: [🛡 GitHub branch protection]
    • check-neutral = Matrixone Compose CI / multi cn e2e bvt test docker compose(PROXY)
    • check-skipped = Matrixone Compose CI / multi cn e2e bvt test docker compose(PROXY)
    • check-success = Matrixone Compose CI / multi cn e2e bvt test docker compose(PROXY)
  • any of: [🛡 GitHub branch protection]
    • check-neutral = Matrixone Utils CI / Coverage
    • check-skipped = Matrixone Utils CI / Coverage
    • check-success = Matrixone Utils CI / Coverage
  • any of: [🛡 GitHub branch protection]
    • check-neutral = Matrixone UT Coverage / UT Coverage on Ubuntu/x86
    • check-skipped = Matrixone UT Coverage / UT Coverage on Ubuntu/x86
    • check-success = Matrixone UT Coverage / UT Coverage on Ubuntu/x86
All conditions
  • any of [🛡 GitHub branch protection]:
    • check-neutral = Matrixone Standlone CI / e2e BVT Test on Linux/x64(LAUNCH, PESSIMISTIC)
    • check-skipped = Matrixone Standlone CI / e2e BVT Test on Linux/x64(LAUNCH, PESSIMISTIC)
    • check-success = Matrixone Standlone CI / e2e BVT Test on Linux/x64(LAUNCH, PESSIMISTIC)
  • any of [🛡 GitHub branch protection]:
    • check-neutral = Matrixone CI / UT Test on Ubuntu/x86
    • check-skipped = Matrixone CI / UT Test on Ubuntu/x86
    • check-success = Matrixone CI / UT Test on Ubuntu/x86
  • any of [🛡 GitHub branch protection]:
    • check-neutral = Matrixone CI / SCA Test on Linux/arm64
    • check-skipped = Matrixone CI / SCA Test on Linux/arm64
    • check-success = Matrixone CI / SCA Test on Linux/arm64
  • any of [🛡 GitHub branch protection]:
    • check-neutral = Matrixone Compose CI / multi cn e2e bvt test docker compose(PROXY)
    • check-skipped = Matrixone Compose CI / multi cn e2e bvt test docker compose(PROXY)
    • check-success = Matrixone Compose CI / multi cn e2e bvt test docker compose(PROXY)
  • any of [🛡 GitHub branch protection]:
    • check-neutral = Matrixone Utils CI / Coverage
    • check-skipped = Matrixone Utils CI / Coverage
    • check-success = Matrixone Utils CI / Coverage
  • any of [🛡 GitHub branch protection]:
    • check-neutral = Matrixone UT Coverage / UT Coverage on Ubuntu/x86
    • check-skipped = Matrixone UT Coverage / UT Coverage on Ubuntu/x86
    • check-success = Matrixone UT Coverage / UT Coverage on Ubuntu/x86
  • #review-threads-unresolved = 0 [🛡 GitHub branch protection]
  • github-review-approved [🛡 GitHub branch protection]

Reason

Pull request #26531 has been dequeued

Pull request from fork cannot be queued. This pull request comes from a fork, and Mergify needs the author's permission to update its branch.

The author needs to enable "Allow edits from maintainers" on this pull request.

Failing checks:

Hint

You should look at the reason for the failure and decide if the pull request needs to be fixed or if you want to requeue it.
If you do update this pull request, it will automatically be requeued once the queue conditions match again.
If you think this was a flaky issue instead, you can requeue the pull request, without updating it, by posting a @mergifyio queue comment.

Tick the box to put this pull request back in the merge queue (same as @mergifyio queue).

  • Requeue this pull request

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

dequeued kind/bug Something isn't working kind/documentation Improvements or additions to documentation kind/enhancement kind/feature kind/refactor Code refactor kind/test-ci size/XXL Denotes a PR that changes 2000+ lines

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants