pub struct FrameIndex {
pub total_padded_size: u64,
pub entries: Vec<FrameIndexEntry>,
pub source_etag: Option<String>,
pub source_compressed_size: Option<u64>,
pub sse_v3: Option<SseChunkBinding>,
}Fields§
§total_padded_size: u64S3 上の object 全体サイズ (padding frame 含む)
entries: Vec<FrameIndexEntry>§source_etag: Option<String>v0.8.4 #73 H-2: backend-reported ETag of the source object the
sidecar describes. Populated by s4-server::put_object from the
backend’s PUT response so the matching GET can head_object and
confirm it’s still talking about the same body. None for legacy
(v1) sidecars decoded out of an existing backend, in which case
the GET path treats the partial-fetch as best-effort and falls
back to a full read on any inconsistency signal.
source_compressed_size: Option<u64>v0.8.4 #73 H-2: backend object’s compressed bytes length the sidecar
was computed against. Cross-check signal alongside source_etag —
some backends (lifecycle moves, multi-object operations) can change
the bytes without a fresh ETag, so a size mismatch is independently
load-bearing. None on legacy v1 sidecars.
sse_v3: Option<SseChunkBinding>v0.9 #106: SSE-S4 chunked (S4E6) geometry binding. Some(..) if
the source object was encrypted with --sse-chunk-size > 0 —
in that case the on-disk body is an S4E6 frame and the GET path
can map compressed_offset (pre-encrypt) → enclosing chunk
index → encrypted byte range, fetch just those chunks, and
decrypt them independently. None for v1 / v2 sidecars and
for v3 sidecars written under non-SSE / SSE-KMS / SSE-C /
S4E2-buffered (which keep the v0.8.12 #120 buffered fallback).
Implementations§
Source§impl FrameIndex
impl FrameIndex
pub fn total_original_size(&self) -> u64
Sourcepub fn lookup_range(&self, start: u64, end_exclusive: u64) -> Option<RangePlan>
pub fn lookup_range(&self, start: u64, end_exclusive: u64) -> Option<RangePlan>
Range request [start, end_exclusive) を解決して必要 frame の (start_idx, end_idx_exclusive)
と S3 上の partial-fetch byte range [byte_start, byte_end_exclusive) を返す。
1 frame でもオーバーラップしていればその frame の 全 byte を fetch する (= 部分 frame は decompress 単位)。
Source§impl FrameIndex
impl FrameIndex
Sourcepub fn encrypted_lookup(&self, plan: &RangePlan) -> Option<EncryptedRangePlan>
pub fn encrypted_lookup(&self, plan: &RangePlan) -> Option<EncryptedRangePlan>
v0.9 #106: extend a RangePlan (pre-encrypt byte range) to
an EncryptedRangePlan that names the actual encrypted
chunks to fetch + decrypt. Returns None if the index lacks
an SseChunkBinding (= non-SSE / v1 / v2 sidecar), or if
the RangePlan’s pre-encrypt range falls outside the SSE
binding’s declared plaintext length (= sidecar / body
mismatch — caller should fall back to the buffered path).
Trait Implementations§
Source§impl Clone for FrameIndex
impl Clone for FrameIndex
Source§fn clone(&self) -> FrameIndex
fn clone(&self) -> FrameIndex
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for FrameIndex
impl Debug for FrameIndex
Source§impl Default for FrameIndex
impl Default for FrameIndex
Source§fn default() -> FrameIndex
fn default() -> FrameIndex
impl Eq for FrameIndex
Source§impl PartialEq for FrameIndex
impl PartialEq for FrameIndex
Source§fn eq(&self, other: &FrameIndex) -> bool
fn eq(&self, other: &FrameIndex) -> bool
self and other values to be equal, and is used by ==.