Попытка исправления загрузки локального блоба

This commit is contained in:
2025-10-30 02:10:01 +03:00
parent 99764eb91f
commit 6845219e94

32
api.go
View File

@@ -487,19 +487,29 @@ func (ag *Agate) RegisterLocalSnapshot(ctx context.Context, snapshotID, parentID
}
// 2. Add the file to the blob store
localFile, err := os.Open(localPath)
if err != nil {
return fmt.Errorf("failed to open local snapshot file: %w", err)
}
defer func() {
if err := localFile.Close(); err != nil {
ag.options.Logger.Printf("ERROR: failed to close local file: %v", err)
// Check if blob already exists. If so, we assume it's the correct one and skip overwriting.
// This is to prevent issues when registering a file that is already in the blob store.
_, err = ag.options.BlobStore.GetBlobPath(ctx, snapshotID)
if err == nil {
ag.options.Logger.Printf("blob for snapshot %s already exists, skipping storing it", snapshotID)
} else if errors.Is(err, models.ErrNotFound) {
// Blob does not exist, so we store it.
localFile, err := os.Open(localPath)
if err != nil {
return fmt.Errorf("failed to open local snapshot file: %w", err)
}
}()
defer func() {
if err := localFile.Close(); err != nil {
ag.options.Logger.Printf("ERROR: failed to close local file: %v", err)
}
}()
_, err = ag.options.BlobStore.StoreBlob(ctx, snapshotID, localFile)
if err != nil {
return fmt.Errorf("failed to store blob from local file: %w", err)
if _, err = ag.options.BlobStore.StoreBlob(ctx, snapshotID, localFile); err != nil {
return fmt.Errorf("failed to store blob from local file: %w", err)
}
} else {
// Another error occurred when checking for the blob.
return fmt.Errorf("failed to check for existing blob: %w", err)
}
// 3. Create and save snapshot metadata