You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
package repl_util
import ( "github.com/chrislusf/seaweedfs/weed/filer" "github.com/chrislusf/seaweedfs/weed/glog" "github.com/chrislusf/seaweedfs/weed/replication/source" "github.com/chrislusf/seaweedfs/weed/util" )
func CopyFromChunkViews(chunkViews []*filer.ChunkView, filerSource *source.FilerSource, writeFunc func(data []byte) error) error {
for _, chunk := range chunkViews {
fileUrls, err := filerSource.LookupFileId(chunk.FileId) if err != nil { return err }
var writeErr error var shouldRetry bool
for _, fileUrl := range fileUrls { shouldRetry, err = util.ReadUrlAsStream(fileUrl, nil, false, chunk.IsFullChunk(), chunk.Offset, int(chunk.Size), func(data []byte) { writeErr = writeFunc(data) }) if err != nil { glog.V(1).Infof("read from %s: %v", fileUrl, err) } else if writeErr != nil { glog.V(1).Infof("copy from %s: %v", fileUrl, writeErr) } else { break } } if shouldRetry && err != nil { return err } if writeErr != nil { return writeErr } } return nil }
|