Merge pull request #2038 from spacexnice/master
fix: oss driver would get connection reset by peer when upload large image layer.master
						commit
						4d65dd513e
					
				|  | @ -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) | ||||||
|  |  | ||||||
|  | @ -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 New Issue