feat(sync): fix errors and cleanup code

Signed-off-by: Vishwas Rajashekar <dev@vrajashkr.com>
This commit is contained in:
Vishwas Rajashekar
2026-05-16 20:04:21 +05:30
parent 2fb691cd3b
commit 3adf36a6c7
10 changed files with 58 additions and 88 deletions
+2 -1
View File
@@ -9,6 +9,7 @@ import (
"github.com/regclient/regclient/types/blob"
zerr "zotregistry.dev/zot/v2/errors"
"zotregistry.dev/zot/v2/pkg/log"
)
@@ -60,7 +61,7 @@ func (cbr *ChunkedBlobReader) InitReader(r *blob.BReader, numChunksTotal int64)
func (cbr *ChunkedBlobReader) Read(buff []byte) (int, error) {
if cbr.InFlightReader == nil {
return 0, ErrReaderNotInitialized
return 0, zerr.ErrStreamReaderNotInitialized
}
cbr.chunksMu.Lock()
-10
View File
@@ -1,10 +0,0 @@
package sync
import "errors"
var (
ErrReaderNotInitialized = errors.New("reader not initialized")
ErrManifestNotFoundOnDemandDisabl = errors.New("manifest not found in ondemand disabled")
ErrBlobNotFoundInActiveStreams = errors.New("blob not found in active streams")
ErrChunkingReaderNotInitialized = errors.New("chunking blob reader not initialized for this blob!")
)
+1 -1
View File
@@ -21,7 +21,7 @@ func (onDemand *BaseOnDemand) SyncReferrers(ctx context.Context, repo string,
}
func (onDemand *BaseOnDemand) FetchManifest(ctx context.Context, repo, reference string) (manifest.Manifest, error) {
return nil, ErrManifestNotFoundOnDemandDisabl
return manifest.New()
}
func (onDemand *BaseOnDemand) StreamManager() StreamManager {
+15 -16
View File
@@ -25,6 +25,8 @@ type StreamManager interface {
CachedBlobInfo(blobDigest string) (blen int64, mediaType string, err error)
}
const chunkSizeBytes = 32768
type ChunkingStreamManager struct {
tempStore StreamTempStore
// activeStreams maps blob digest to the corresponding chunked blob reader
@@ -33,23 +35,20 @@ type ChunkingStreamManager struct {
// streamingRefs holds the references to the images that are currently being streamed and their corresponding manifest.
streamingRefs map[string]manifestpkg.Manifest
// blobInfo holds blobs and their corresponding descriptor.
blobInfoMap map[string]descriptor.Descriptor
logger log.Logger
streamLock sync.Mutex
chunkSizeBytes int64
blobInfoMap map[string]descriptor.Descriptor
logger log.Logger
streamLock sync.Mutex
}
func NewChunkingStreamManager(config *config.Config, logger log.Logger) *ChunkingStreamManager {
store := NewLocalTempStore(path.Join(config.Storage.RootDirectory, "stream"))
extConf := config.CopyExtensionsConfig()
return &ChunkingStreamManager{
tempStore: store,
activeStreams: map[string]*ChunkedBlobReader{},
streamingRefs: map[string]manifestpkg.Manifest{},
blobInfoMap: map[string]descriptor.Descriptor{},
logger: logger,
chunkSizeBytes: *extConf.Sync.StreamChunkSizeBytes,
tempStore: store,
activeStreams: map[string]*ChunkedBlobReader{},
streamingRefs: map[string]manifestpkg.Manifest{},
blobInfoMap: map[string]descriptor.Descriptor{},
logger: logger,
}
}
@@ -60,7 +59,7 @@ func (sm *ChunkingStreamManager) ConnectClient(blobDigest string, writer io.Writ
stream, ok := sm.activeStreams[blobDigest]
if !ok {
return nil, ErrBlobNotFoundInActiveStreams
return nil, zerr.ErrBlobNotFoundInActiveStreams
}
dig, err := godigest.Parse(blobDigest)
@@ -68,7 +67,7 @@ func (sm *ChunkingStreamManager) ConnectClient(blobDigest string, writer io.Writ
return nil, err
}
copier := NewInFlightBlobCopier(stream, sm.tempStore.BlobPath(dig), writer, sm.chunkSizeBytes, sm.logger)
copier := NewInFlightBlobCopier(stream, sm.tempStore.BlobPath(dig), writer, chunkSizeBytes, sm.logger)
sm.logger.Info().Str("blob", blobDigest).Msg("connected client for blob")
return copier, nil
@@ -99,10 +98,10 @@ func (sm *ChunkingStreamManager) StreamingBlobReader(reader *blob.BReader) (*blo
// as the code here only supplies the reader and the chunk count
chunkingReader, ok := sm.activeStreams[digest]
if !ok {
return nil, ErrChunkingReaderNotInitialized
return nil, zerr.ErrBlobReaderMissing
}
chunkingReader.InitReader(reader, chunkCount(size, sm.chunkSizeBytes))
chunkingReader.InitReader(reader, chunkCount(size, chunkSizeBytes))
sm.logger.Info().Str("blob", digest).Msg("finished init chunked blob reader")
return chunkingReader.ToBReader(), nil
@@ -127,7 +126,7 @@ func (sm *ChunkingStreamManager) prepareActiveStreamForBlob(descriptor descripto
return nil
}
r, err := NewChunkedBlobReader(sm.tempStore.BlobPath(descriptor.Digest), sm.chunkSizeBytes, sm.logger)
r, err := NewChunkedBlobReader(sm.tempStore.BlobPath(descriptor.Digest), chunkSizeBytes, sm.logger)
if err != nil {
return err
}