builder: move node filtering functionality

- add builder method
- allow filtering on load to simplify invocations

Signed-off-by: Ilya Dmitrichenko <errordeveloper@gmail.com>
pull/1466/head
Ilya Dmitrichenko 3 years ago
parent e21f56e801
commit e3d621fec5
No known key found for this signature in database
GPG Key ID: E7889175A6C0CEB9

@ -112,23 +112,6 @@ type NamedContext struct {
State *llb.State
}
func filterAvailableNodes(nodes []builder.Node) ([]builder.Node, error) {
out := make([]builder.Node, 0, len(nodes))
err := errors.Errorf("no drivers found")
for _, n := range nodes {
if n.Err == nil && n.Driver != nil {
out = append(out, n)
}
if n.Err != nil {
err = n.Err
}
}
if len(out) > 0 {
return out, nil
}
return nil, err
}
type driverPair struct {
driverIndex int
platforms []specs.Platform
@ -802,11 +785,6 @@ func BuildWithResultHandler(ctx context.Context, nodes []builder.Node, opt map[s
return nil, errors.Errorf("driver required for build")
}
nodes, err = filterAvailableNodes(nodes)
if err != nil {
return nil, errors.Wrapf(err, "no valid drivers found")
}
var noMobyDriver driver.Driver
for _, n := range nodes {
if !n.Driver.IsMobyDriver() {

@ -34,6 +34,24 @@ func (b *Builder) Nodes() []Node {
return b.nodes
}
// AvailableNodes returns only nodes that are available.
func (b *Builder) AvailableNodes() ([]Node, error) {
out := make([]Node, 0, len(b.nodes))
err := errors.Errorf("no drivers found")
for _, n := range b.nodes {
if n.Err == nil && n.Driver != nil {
out = append(out, n)
}
if n.Err != nil {
err = n.Err
}
}
if len(out) > 0 {
return out, nil
}
return nil, err
}
// LoadNodes loads and returns nodes for this builder.
// TODO: this should be a method on a Node object and lazy load data for each driver.
func (b *Builder) LoadNodes(ctx context.Context, withData bool) (_ []Node, err error) {
@ -163,6 +181,15 @@ func (b *Builder) LoadNodes(ctx context.Context, withData bool) (_ []Node, err e
return b.nodes, nil
}
func (b *Builder) LoadAvailableNodes(ctx context.Context, withData bool) (_ []Node, err error) {
_, err = b.LoadNodes(ctx, withData)
if err != nil {
return nil, err
}
return b.AvailableNodes()
}
func (n *Node) loadData(ctx context.Context) error {
if n.Driver == nil {
return nil

@ -114,7 +114,7 @@ func runBake(dockerCli command.Cli, targets []string, in bakeOptions) (err error
if err = updateLastActivity(dockerCli, b.NodeGroup); err != nil {
return errors.Wrapf(err, "failed to update builder last activity time")
}
nodes, err = b.LoadNodes(ctx, false)
nodes, err = b.LoadAvailableNodes(ctx, false)
if err != nil {
return err
}

@ -266,7 +266,7 @@ func runBuild(dockerCli command.Cli, in buildOptions) (err error) {
if err = updateLastActivity(dockerCli, b.NodeGroup); err != nil {
return errors.Wrapf(err, "failed to update builder last activity time")
}
nodes, err := b.LoadNodes(ctx, false)
nodes, err := b.LoadAvailableNodes(ctx, false)
if err != nil {
return err
}

@ -38,15 +38,10 @@ func runDiskUsage(dockerCli command.Cli, opts duOptions) error {
return err
}
nodes, err := b.LoadNodes(ctx, false)
nodes, err := b.LoadAvailableNodes(ctx, false)
if err != nil {
return err
}
for _, node := range nodes {
if node.Err != nil {
return node.Err
}
}
out := make([][]*client.UsageInfo, len(nodes))

@ -59,15 +59,10 @@ func runPrune(dockerCli command.Cli, opts pruneOptions) error {
return err
}
nodes, err := b.LoadNodes(ctx, false)
nodes, err := b.LoadAvailableNodes(ctx, false)
if err != nil {
return err
}
for _, node := range nodes {
if node.Err != nil {
return node.Err
}
}
ch := make(chan client.UsageInfo)
printed := make(chan struct{})

Loading…
Cancel
Save