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:
Wei Fu
2021-03-24 17:28:03 +08:00
parent 548d984f27
commit f8c2f04756
6 changed files with 49 additions and 6 deletions

View File

@@ -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
}

View File

@@ -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 (

View File

@@ -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