mirror of https://github.com/databricks/cli.git
44 lines
768 B
Go
44 lines
768 B
Go
|
package bundle
|
||
|
|
||
|
import (
|
||
|
"context"
|
||
|
"sync"
|
||
|
|
||
|
"github.com/databricks/cli/libs/diag"
|
||
|
)
|
||
|
|
||
|
type parallel struct {
|
||
|
mutators []ReadOnlyMutator
|
||
|
}
|
||
|
|
||
|
func (m *parallel) Name() string {
|
||
|
return "parallel"
|
||
|
}
|
||
|
|
||
|
func (m *parallel) Apply(ctx context.Context, rb ReadOnlyBundle) diag.Diagnostics {
|
||
|
var wg sync.WaitGroup
|
||
|
var mu sync.Mutex
|
||
|
var diags diag.Diagnostics
|
||
|
|
||
|
wg.Add(len(m.mutators))
|
||
|
for _, mutator := range m.mutators {
|
||
|
go func(mutator ReadOnlyMutator) {
|
||
|
defer wg.Done()
|
||
|
d := ApplyReadOnly(ctx, rb, mutator)
|
||
|
|
||
|
mu.Lock()
|
||
|
diags = diags.Extend(d)
|
||
|
mu.Unlock()
|
||
|
}(mutator)
|
||
|
}
|
||
|
wg.Wait()
|
||
|
return diags
|
||
|
}
|
||
|
|
||
|
// Parallel runs the given mutators in parallel.
|
||
|
func Parallel(mutators ...ReadOnlyMutator) ReadOnlyMutator {
|
||
|
return ¶llel{
|
||
|
mutators: mutators,
|
||
|
}
|
||
|
}
|