remotes/ctr: allow to limit max concurrent uploads like downloads
Also add flags for push/pull subcommand to limit max concurrent uploads/downloads. Signed-off-by: Wei Fu <fuweid89@gmail.com>
This commit is contained in:
@@ -109,7 +109,7 @@ type FetchConfig struct {
|
||||
Platforms []string
|
||||
// Whether or not download all metadata
|
||||
AllMetadata bool
|
||||
// RemoteOpts is not used by ctr, but can be used by other CLI tools
|
||||
// RemoteOpts to configure object resolutions and transfers with remote content providers
|
||||
RemoteOpts []containerd.RemoteOpt
|
||||
// TraceHTTP writes DNS and connection information to the log when dealing with a container registry
|
||||
TraceHTTP bool
|
||||
@@ -145,6 +145,16 @@ func NewFetchConfig(ctx context.Context, clicontext *cli.Context) (*FetchConfig,
|
||||
config.AllMetadata = true
|
||||
}
|
||||
|
||||
if clicontext.IsSet("max-concurrent-downloads") {
|
||||
mcd := clicontext.Int("max-concurrent-downloads")
|
||||
config.RemoteOpts = append(config.RemoteOpts, containerd.WithMaxConcurrentDownloads(mcd))
|
||||
}
|
||||
|
||||
if clicontext.IsSet("max-concurrent-uploaded-layers") {
|
||||
mcu := clicontext.Int("max-concurrent-uploaded-layers")
|
||||
config.RemoteOpts = append(config.RemoteOpts, containerd.WithMaxConcurrentUploadedLayers(mcu))
|
||||
}
|
||||
|
||||
return config, nil
|
||||
}
|
||||
|
||||
|
@@ -63,6 +63,10 @@ command. As part of this process, we do the following:
|
||||
Name: "print-chainid",
|
||||
Usage: "Print the resulting image's chain ID",
|
||||
},
|
||||
cli.IntFlag{
|
||||
Name: "max-concurrent-downloads",
|
||||
Usage: "Set the max concurrent downloads for each pull",
|
||||
},
|
||||
),
|
||||
Action: func(context *cli.Context) error {
|
||||
var (
|
||||
|
@@ -64,6 +64,9 @@ var pushCommand = cli.Command{
|
||||
Name: "platform",
|
||||
Usage: "push content from a specific platform",
|
||||
Value: &cli.StringSlice{},
|
||||
}, cli.IntFlag{
|
||||
Name: "max-concurrent-uploaded-layers",
|
||||
Usage: "Set the max concurrent uploaded layers for each push",
|
||||
}),
|
||||
Action: func(context *cli.Context) error {
|
||||
var (
|
||||
@@ -144,10 +147,17 @@ var pushCommand = cli.Command{
|
||||
return nil, nil
|
||||
})
|
||||
|
||||
return client.Push(ctx, ref, desc,
|
||||
ropts := []containerd.RemoteOpt{
|
||||
containerd.WithResolver(resolver),
|
||||
containerd.WithImageHandler(jobHandler),
|
||||
)
|
||||
}
|
||||
|
||||
if context.IsSet("max-concurrent-uploaded-layers") {
|
||||
mcu := context.Int("max-concurrent-uploaded-layers")
|
||||
ropts = append(ropts, containerd.WithMaxConcurrentUploadedLayers(mcu))
|
||||
}
|
||||
|
||||
return client.Push(ctx, ref, desc, ropts...)
|
||||
})
|
||||
|
||||
// don't show progress if debug mode is set
|
||||
|
Reference in New Issue
Block a user