Feat: client method to upload file from master node to slave node
This commit is contained in:
29
pkg/retry/chunk.go
Normal file
29
pkg/retry/chunk.go
Normal file
@@ -0,0 +1,29 @@
|
||||
package retry
|
||||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"github.com/cloudreve/Cloudreve/v3/pkg/filesystem/fsctx"
|
||||
"github.com/cloudreve/Cloudreve/v3/pkg/util"
|
||||
"io"
|
||||
)
|
||||
|
||||
type ChunkProcessFunc func(index int, chunk io.Reader) error
|
||||
|
||||
func Chunk(index int, chunkSize uint64, file fsctx.FileHeader, processor ChunkProcessFunc, backoff Backoff) error {
|
||||
err := processor(index, file)
|
||||
if err != nil {
|
||||
if err != context.Canceled && file.Seekable() && backoff.Next() {
|
||||
if _, seekErr := file.Seek(int64(uint64(index)*chunkSize), io.SeekStart); err != nil {
|
||||
return fmt.Errorf("failed to seek back to chunk start: %w, last error: %w", seekErr, err)
|
||||
}
|
||||
|
||||
util.Log().Debug("Retrying chunk %d, last error: %s", index, err)
|
||||
return Chunk(index, chunkSize, file, processor, backoff)
|
||||
}
|
||||
|
||||
return err
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
Reference in New Issue
Block a user