Subchapter 10.4
references/blob-ingestion-progress.mdMarkdown7 KBView on GitHub
Use when interpreting Blob/ADLS watch output, pauses, or requests for file x/y. This is asynchronous Blob observation, not the synchronous File upload contract. No new SDK, authentication, private-network/UAMI/asset-store or RBAC capability. Normal invocation and receipt-backed continuation: .
The primary read is the selected knowledge source’s
GET knowledgesources/{name}/status?api-version={original-version}.
The helper preserves its equivalent exact OData identity syntax.
Use the admitted 2026-04-01 or 2026-08-01-preview version; no API substitution.
synchronizationStatus describes source availability, not successful ingestion.
The actual service fields are:
currentSynchronizationState.startTime, itemsUpdatesProcessed,
itemsUpdatesFailed, itemsSkipped, errors.lastSynchronizationState.status, startTime, endTime, and the same counters/errors.Missing counters stay unknown, never zero. A missing completion endTime means
keep observing within the watch bounds, not a timestamp failure or completed run.
Require completion after the original cutoff, valid times/counters, zero failed
updates, no relevant errors or current cycle. partialSuccess/failure blocks
readiness even when successful work remains. Recheck also requires nonempty,
zero-skip completion and unchanged source/configuration/Storage evidence.
Source readiness is not verified KB retrieval or whole-corpus content coverage.
Current-run observations take precedence over an older last run. A newer run replaces counters; never add runs together as unique files. After observing a newer start, an older completion cannot finish that watch. Counter decreases replace the observation; never infer a reset is an ingestion failure. The guide does not promise monotonically increasing counters.
Generated indexer /status is supplemental, sharing the status-request/time budget.
Its top-level running means available, not executing/success.
Only a relevant lastResult supplies execution status/start/end and
itemsProcessed (attempted) / itemsFailed. Neither attempted items nor index
documents/chunks are unique input files; execution success can include item errors.
The indexer cannot supply missing primary source counters or readiness.
An observed active execution remains unresolved across primary reads. Require
fresh same-indexer terminal success and a primary completion ending no earlier
than that execution; start times need not be identical. Older executions cannot
clear a newer observation. Retain the resolved execution in private watch evidence.
Show the bounded helper’s message, for example:
Blob ingestion observation ingesting: item updates processed=13; failed=1; skipped=0; file total/remaining unknown (not comparable); elapsed=675s; next check=5s.Do not turn this into “13/25 files ingested; 11 remaining”.
The guide does not establish unique-file identity, processed/failed overlap, or
counter-to-snapshot equivalence. Inventory size, filtered prefixes,
statistics.totalSynchronizations, average items, chunks and index documents
cannot establish that denominator. This helper therefore admits no file-fraction
conversion: total/remaining stay unknown even when an inventory count is known.
No percentages, subtraction, summed retries, ETA or assumed 25-file corpus.
Unchanged observations back off; throttling and the next bounded check are visible. Watch expiry/cancellation pauses observation; service execution is not modified. Resume with the original input/receipt, not another create/run/reset/delete. Repeated unchanged counters alone do not prove a stall. Watch limits remain 3600 seconds/1000 status requests, 60-second initial interval and backoff cap, 30-second status reads. One window per invocation; no daemon. Native response-body deadline exhaustion also pauses when the watch expires. A shorter read deadline with watch budget remaining is a retryable observation, not remote ingestion failure; retain its code/ID and use the existing backoff. Retry-After accepts bounded scalar headers or typed seconds/UTC-date metadata, including the frozen typed protocol’s year-only RFC850 century correction. Missing/invalid metadata uses bounded backoff; an overlong marker or delay outside this watch’s wait budget pauses, never retries early. No transport-wide retry or change to the shared File metadata contract.
Errors can contain document keys, URLs, SAS and content in key, docURL,
componentName, errorMessage, details and documentationLink.
Never echo them or follow their links. Customer errors retain sanitized
status/code and the relevant request ID; full bounded ID trace and error digests
stay private, not in progress messages. No full status JSON or ID wall.
Native readiness.progress and stderr blob_progress share closed schema 1.0:
schema_version, unit: item-updates, denominator: not-comparable-to-files;
total and remaining are null.phase: ingesting, waiting, throttled, paused, completed or failed.run_start: canonical timestamp or null; processed, failed, skipped:
observed nonnegative integers or null.synchronization_status: active, creating, deleting or not-reported.elapsed_seconds: finite nonnegative number; next_check_seconds: null
or a finite number from 0 through 60.Stderr adds this record and a content-free message only for Blob workflows.
Same-phase updates are throttled; phase changes and terminal events are immediate.
--no-progress suppresses stderr without changing HTTP sequence or results.
Legacy retained creation/vector receipts remain readable; new progress must match its own completed cycle and never substitutes for ingestion proof.
Closed compact blob-operation-summary is 1.1 when it includes
readiness.progress; results without progress retain 1.0. Original full private
results, v3 checkpoints, acknowledgements, sanitized binding proof and strict
cleanup ownership are unchanged. No generated-child edits or cleanup on timeout.
Authorities: failure/conflict/uncertainty only.
Official Blob guide (opens in a new tab),
updated 2026-09-02, source commit 78d82fc1240820245ee4143df9f5296641986171.
Indexer status (opens in a new tab).
Public documentation inspection is not live ingestion evidence.