Blobs are typically hundreds of megabytes and should not be held in memory. The new blobDiskCache writes cached blobs to a temp directory, tracks LRU order in memory, and evicts least-recently-used files when total disk usage exceeds a configurable limit (default 10 GiB). Design: - Blobs written to os.TempDir()/vaultik-blobcache-*/<hash> - Doubly-linked list for O(1) LRU promotion/eviction - ReadAt support for reading chunk slices without loading full blob - Temp directory cleaned up on Close() - Oversized entries (> maxBytes) silently skipped Also adds blob_fetch_stub.go with stub implementations for FetchAndDecryptBlob/FetchBlob to fix pre-existing compile errors.
29 lines
962 B
Go
29 lines
962 B
Go
package vaultik
|
|
|
|
// TODO: These are stub implementations for methods referenced but not yet
|
|
// implemented. They allow the package to compile for testing.
|
|
// Remove once the real implementations land.
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
"io"
|
|
|
|
"filippo.io/age"
|
|
)
|
|
|
|
// FetchAndDecryptBlobResult holds the result of fetching and decrypting a blob.
|
|
type FetchAndDecryptBlobResult struct {
|
|
Data []byte
|
|
}
|
|
|
|
// FetchAndDecryptBlob downloads a blob, decrypts it, and returns the plaintext data.
|
|
func (v *Vaultik) FetchAndDecryptBlob(ctx context.Context, blobHash string, expectedSize int64, identity age.Identity) (*FetchAndDecryptBlobResult, error) {
|
|
return nil, fmt.Errorf("FetchAndDecryptBlob not yet implemented")
|
|
}
|
|
|
|
// FetchBlob downloads a blob and returns a reader for the encrypted data.
|
|
func (v *Vaultik) FetchBlob(ctx context.Context, blobHash string, expectedSize int64) (io.ReadCloser, int64, error) {
|
|
return nil, 0, fmt.Errorf("FetchBlob not yet implemented")
|
|
}
|