RFC 0029: native Azure Blob storage - #440
Merged
Merged
Conversation
roy2392
marked this pull request as ready for review
August 4, 2026 11:22
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Proposes RFC 0029 for native Azure Blob Storage support through canonical
az://<container>/<prefix>roots, the existing Lance + Apache Arrowobject_storeseams, and managed identity.The RFC also defines a reference Azure Container Apps deployment. Importantly,
it does not treat
minReplicas = maxReplicas = 1as a correctness lock:Azure may temporarily pre-warm extra replicas. Instead, every supplied server
and bootstrap writer must pass through one fail-closed PID-1 admission path:
Tini forwards signals and subreaps descendants while its supervised wrapper
owns an infinite per-cluster Blob lease before an OmniGraph child can start.
This is explicitly scoped as a cooperative process-admission mutex, not
engine-level data fencing or multi-writer support.
Architecture
The image was produced and visually reviewed with the
msftse/azure-architecture-proposaldiagram workflow. Its exactreproducible prompt
is committed beside the PNG. The workflow repository is not linked because it
is not publicly reachable to an unauthenticated upstream reviewer.
Why this PR is RFC-only
This follows OmniGraph's public-contribution sequence:
The implementation prototype, deployment package, CI job, docs, and validation
record are intentionally excluded from this branch.
Prototype evidence and evidence boundary
A prototype based on upstream
c62829acc6f5414356304d1c240d95fad38b8984has already passed:Lance data below the same cluster root;
anonymous Blob access disabled, container-scoped Blob RBAC, immutable ACR
image, authenticated mutation/query, restart persistence, physical Blob
inspection, retained-log credential scanning, and confirmed resource-group
cleanup.
That first live run proves the native storage and identity path. It does not
prove the newly specified lease-admitted mutable topology. The RFC therefore
requires a second adversarial live-Azure gate before an implementation PR may
claim support: competing app/job writers, unique lease IDs, lost responses,
graceful long-write drain, unexpected exit, hard-kill stuck-lease behavior,
one-child interval evidence, and explicit break-glass recovery.
Checks for this RFC branch
bash scripts/check-agents-md.sh— 74 links / 69 docs OKgit diff --check— cleanresource names or endpoint URLs, tokens, or proof-row values included
Requested feedback
az://<container>/<prefix>model fit OmniGraph's storageand URI contracts?
enforcement of the existing one-live-writer-process support boundary for the
first Container Apps reference?
before the separate implementation PR?
Greptile Summary
The PR proposes native Azure Blob Storage through canonical
az://roots and a managed-identity-based Azure Container Apps deployment.Confidence Score: 4/5
The RFC should not merge until it identifies an implementable managed-identity-capable client for the mandatory Blob lease protocol or revises the no-Azure-SDK constraint.
The current proposal still requires lease acquire, ownership verification, release, inspection, and break operations, but the named Lance, object_store, and StorageAdapter surfaces do not provide that protocol and the RFC excludes introducing another Azure SDK.
Files Needing Attention: docs/rfcs/0029-azure-blob-storage.md
Important Files Changed
Flowchart
%%{init: {'theme': 'neutral'}}%% flowchart LR Clients[Clients] -->|HTTPS| Server[OmniGraph server] Job[Bootstrap job] --> Gate[Writer admission wrapper] Server --> Gate Gate -->|Exclusive lease| Lease[(Admission lease Blob)] Gate -->|Query / mutate / import| Root[(Azure Blob cluster root)] Identity[User-assigned managed identity] -.-> Lease Identity -.-> Root Registry[Azure Container Registry] --> Server Registry --> Job Server --> Logs[Log Analytics] Job --> LogsReviews (4): Last reviewed commit: "Merge branch 'main' into codex/rfc-0029-..." | Re-trigger Greptile