Split blob-hydration and directory-enumeration failure telemetry by cause#2071
Draft
tyrielv wants to merge 1 commit into
Draft
Split blob-hydration and directory-enumeration failure telemetry by cause#2071tyrielv wants to merge 1 commit into
tyrielv wants to merge 1 commit into
Conversation
…ause The GVFS telemetry "Blob hydration failure" and "Directory enumeration failure" buckets conflate causes outside gvfs.exe's control (network, local disk/IO, ProjFS) with actionable ones (a missing object on the server, a size mismatch, or GVFS's own stale-enumeration eviction). Stamp a cause tag on the failure telemetry so the release-readiness dashboard can bucket them apart. No behavior changes: - BlobHydrationFailureCategory (nested in GVFSGitObjects) is now returned from TryCopyBlobContentStream via an out parameter as well as stamped on the terminal telemetry, so the virtualizer's own terminal event is tagged with the same cause rather than left uncategorized. Categories: NetworkUnavailable / DownloadFailed / LocalIO / ProjFSWriteFailed (not gvfs-fixable) vs ObjectNotOnServer / LocalCopyFailed / SizeMismatch / Unexpected (actionable). The size-mismatch, IOException, and WriteFileData failure sites were previously logged with a message the dashboard did not match; they now carry the tag so they are counted. - EnumerationFailureReason (nested enum) on "Failed to find active enumeration ID": Evicted (GVFS eviction removed a live enumeration; self-inflicted) vs Unknown (ProjFS delivered an id GVFS never held or already ended). The eviction-tracking map is populated before the entry is removed from the active set (closing a mislabel race) and pruned on every sweep so it cannot outlive its window. Unit tests assert each cause value deterministically. Assisted-by: Claude Opus 4.8 Signed-off-by: Tyrie Vella <tyrielv@gmail.com>
tyrielv
force-pushed
the
tyrielv/split-hydration-enum-telemetry
branch
from
July 20, 2026 19:12
a667a05 to
46c694f
Compare
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.
What
The GVFS release-readiness telemetry has two error buckets that mix causes outside gvfs.exe's control (network, local disk/IO, ProjFS) with actionable ones (a missing object on the server, a size mismatch, or GVFS's own stale-enumeration eviction), so a release manager can't tell whether a spike is fixable:
TryCopyBlobContentStreamcan't serve file contents to ProjFSFailed to find active enumeration IDThis stamps a cause tag on the failure telemetry so the dashboard can split each bucket. No behavior changes — metadata only.
Changes
BlobHydrationFailureCategory(new enum) on the terminal blob-hydration errors:NetworkUnavailable,LocalIO,ProjFSWriteFailedObjectNotOnServer,LocalCopyFailed,SizeMismatch,UnexpectedGVFSGitObjects.TryCopyBlobContentStream'sboolreturn before the error was logged; it's now captured. The size-mismatch / IOException / WriteFileData failure sites were logged with a message the dashboard didn't match — they now carry the tag so they're counted.EnumerationFailureReasononFailed to find active enumeration ID:Evicted— GVFS's stale-enumeration eviction (gvfs.max-active-enumerations, off by default) removed a live enumeration (self-inflicted).Unknown— ProjFS delivered an id GVFS never held or already ended.Testing
TerminalBlobHydrationFailureIsTaggedWithCategory,GetDirectoryEnumerationTagsEvictedVersusUnknownId,OnGetFileStreamHandlesWriteFailure.Target branch
master— observability enrichment for the shippable line, no behavior change; the enumeration-eviction feature this diagnoses already lives on master.Companion
The dashboard-side split (KQL) that consumes these tags is a separate PR in
devprod.git.telemetry(Azure DevOps): EngSys PR 16223444.