forked from TrueCloudLab/distribution
Merge pull request #2038 from spacexnice/master
fix: oss driver would get connection reset by peer when upload large image layer.
This commit is contained in:
commit
4d65dd513e
3 changed files with 12 additions and 10 deletions
6
Godeps/Godeps.json
generated
6
Godeps/Godeps.json
generated
|
@ -167,15 +167,15 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "github.com/denverdino/aliyungo/common",
|
"ImportPath": "github.com/denverdino/aliyungo/common",
|
||||||
"Rev": "ce70ed03a598bb3ba258ff9c90a83a257959067c"
|
"Rev": "afedced274aa9a7fcdd47ac97018f0f8db4e5de2"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "github.com/denverdino/aliyungo/oss",
|
"ImportPath": "github.com/denverdino/aliyungo/oss",
|
||||||
"Rev": "ce70ed03a598bb3ba258ff9c90a83a257959067c"
|
"Rev": "afedced274aa9a7fcdd47ac97018f0f8db4e5de2"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "github.com/denverdino/aliyungo/util",
|
"ImportPath": "github.com/denverdino/aliyungo/util",
|
||||||
"Rev": "ce70ed03a598bb3ba258ff9c90a83a257959067c"
|
"Rev": "afedced274aa9a7fcdd47ac97018f0f8db4e5de2"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "github.com/docker/goamz/aws",
|
"ImportPath": "github.com/docker/goamz/aws",
|
||||||
|
|
|
@ -389,15 +389,17 @@ func (d *driver) List(ctx context.Context, opath string) ([]string, error) {
|
||||||
return append(files, directories...), nil
|
return append(files, directories...), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const maxConcurrency = 10
|
||||||
|
|
||||||
// Move moves an object stored at sourcePath to destPath, removing the original
|
// Move moves an object stored at sourcePath to destPath, removing the original
|
||||||
// object.
|
// object.
|
||||||
func (d *driver) Move(ctx context.Context, sourcePath string, destPath string) error {
|
func (d *driver) Move(ctx context.Context, sourcePath string, destPath string) error {
|
||||||
logrus.Infof("Move from %s to %s", d.ossPath(sourcePath), d.ossPath(destPath))
|
logrus.Infof("Move from %s to %s", d.ossPath(sourcePath), d.ossPath(destPath))
|
||||||
|
err := d.Bucket.CopyLargeFileInParallel(d.ossPath(sourcePath), d.ossPath(destPath),
|
||||||
err := d.Bucket.CopyLargeFile(d.ossPath(sourcePath), d.ossPath(destPath),
|
|
||||||
d.getContentType(),
|
d.getContentType(),
|
||||||
getPermissions(),
|
getPermissions(),
|
||||||
oss.Options{})
|
oss.Options{},
|
||||||
|
maxConcurrency)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logrus.Errorf("Failed for move from %s to %s: %v", d.ossPath(sourcePath), d.ossPath(destPath), err)
|
logrus.Errorf("Failed for move from %s to %s: %v", d.ossPath(sourcePath), d.ossPath(destPath), err)
|
||||||
return parseError(sourcePath, err)
|
return parseError(sourcePath, err)
|
||||||
|
|
6
vendor/github.com/denverdino/aliyungo/oss/client.go
generated
vendored
6
vendor/github.com/denverdino/aliyungo/oss/client.go
generated
vendored
|
@ -1313,7 +1313,7 @@ func (b *Bucket) CopyLargeFile(sourcePath string, destPath string, contentType s
|
||||||
}
|
}
|
||||||
|
|
||||||
const defaultChunkSize = int64(128 * 1024 * 1024) //128MB
|
const defaultChunkSize = int64(128 * 1024 * 1024) //128MB
|
||||||
const maxCopytSize = int64(1024 * 1024 * 1024) //1G
|
const maxCopytSize = int64(128 * 1024 * 1024) //128MB
|
||||||
|
|
||||||
// Copy large file in the same bucket
|
// Copy large file in the same bucket
|
||||||
func (b *Bucket) CopyLargeFileInParallel(sourcePath string, destPath string, contentType string, perm ACL, options Options, maxConcurrency int) error {
|
func (b *Bucket) CopyLargeFileInParallel(sourcePath string, destPath string, contentType string, perm ACL, options Options, maxConcurrency int) error {
|
||||||
|
@ -1322,10 +1322,10 @@ func (b *Bucket) CopyLargeFileInParallel(sourcePath string, destPath string, con
|
||||||
maxConcurrency = 1
|
maxConcurrency = 1
|
||||||
}
|
}
|
||||||
|
|
||||||
log.Printf("Copy large file from %s to %s\n", sourcePath, destPath)
|
|
||||||
|
|
||||||
currentLength, err := b.GetContentLength(sourcePath)
|
currentLength, err := b.GetContentLength(sourcePath)
|
||||||
|
|
||||||
|
log.Printf("Parallel Copy large file[size: %d] from %s to %s\n",currentLength, sourcePath, destPath)
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue