From 39d5d21d483df9e50b003a11a1db707b04cf5ba9 Mon Sep 17 00:00:00 2001 From: sneak Date: Wed, 17 Jun 2026 08:01:56 +0200 Subject: [PATCH] Revert "Merge fix/restore-cache-readat" This reverts commit 44c9008e7e04d5cc8f72d636f9c39fc2cf6794d9, reversing changes made to b55d5763ad8cc2e30b815a4f5840965641ad1bb5. --- internal/vaultik/restore.go | 35 +++++++++++------------------------ 1 file changed, 11 insertions(+), 24 deletions(-) diff --git a/internal/vaultik/restore.go b/internal/vaultik/restore.go index 31e9ae0..5adaf9e 100644 --- a/internal/vaultik/restore.go +++ b/internal/vaultik/restore.go @@ -569,22 +569,14 @@ func (v *Vaultik) restoreRegularFile( return fmt.Errorf("getting blob %s: %w", blobChunk.BlobID, err) } - // If the blob isn't on disk yet, download it (one full readout - // of the plaintext into memory), write it to the cache, and - // satisfy THIS chunk from the in-memory copy. Subsequent files - // needing chunks from the same blob hit the ReadAt branch and - // read only the bytes they actually want — never the whole - // blob — which is the difference between sub-millisecond chunk - // extraction and ~1 s per cache hit on a 10 GB blob. + // Download and decrypt blob if not cached blobHashStr := blob.Hash.String() - var chunkData []byte t0 = time.Now() - blobInCache := blobCache.Has(blobHashStr) + blobData, ok := blobCache.Get(blobHashStr) cacheGetDur += time.Since(t0) - - if !blobInCache { + if !ok { t0 = time.Now() - blobData, err := v.downloadBlob(ctx, blobHashStr, blob.CompressedSize, identity) + blobData, err = v.downloadBlob(ctx, blobHashStr, blob.CompressedSize, identity) downloadDur += time.Since(t0) if err != nil { return fmt.Errorf("downloading blob %s: %w", blobHashStr[:16], err) @@ -597,22 +589,17 @@ func (v *Vaultik) restoreRegularFile( downloadCount++ result.BlobsDownloaded++ result.BytesDownloaded += blob.CompressedSize - - if blobChunk.Offset+blobChunk.Length > int64(len(blobData)) { - return fmt.Errorf("chunk %s extends beyond blob data (offset=%d, length=%d, blob_size=%d)", - fc.ChunkHash[:16], blobChunk.Offset, blobChunk.Length, len(blobData)) - } - chunkData = blobData[blobChunk.Offset : blobChunk.Offset+blobChunk.Length] } else { cacheHitCount++ - t0 = time.Now() - chunkData, err = blobCache.ReadAt(blobHashStr, blobChunk.Offset, blobChunk.Length) - cacheGetDur += time.Since(t0) - if err != nil { - return fmt.Errorf("reading chunk %s from cached blob %s: %w", fc.ChunkHash[:16], blobHashStr[:16], err) - } } + // Extract chunk from blob + if blobChunk.Offset+blobChunk.Length > int64(len(blobData)) { + return fmt.Errorf("chunk %s extends beyond blob data (offset=%d, length=%d, blob_size=%d)", + fc.ChunkHash[:16], blobChunk.Offset, blobChunk.Length, len(blobData)) + } + chunkData := blobData[blobChunk.Offset : blobChunk.Offset+blobChunk.Length] + // Write chunk to output file t0 = time.Now() n, err := outFile.Write(chunkData)