Skip to content

Commit dd933fb

Browse files
committed
added the Shutdown method
Signed-off-by: bbland1 <[email protected]>
1 parent 65e2f04 commit dd933fb

File tree

2 files changed

+28
-17
lines changed

2 files changed

+28
-17
lines changed

providers/multi-provider/internal/aggregate-errors.go

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,29 +2,29 @@ package internal
22

33
import "fmt"
44

5-
// InitError is how the error in the Init stage of a provider is reported.
6-
type InitError struct {
5+
// StateErr is how the error in the Init of Shutdown stage of a provider is reported.
6+
type StateErr struct {
77
ProviderName string
8-
Err error
8+
Err error
99
}
1010

11-
func (e *InitError) Error() string {
11+
func (e *StateErr) Error() string {
1212
return fmt.Sprintf("Provider %s had an error: %v", e.ProviderName, e.Err)
1313
}
1414

1515
type AggregateError struct {
1616
Message string
17-
Errors []InitError
17+
Errors []StateErr
1818
}
1919

2020
func (ae *AggregateError) Error() string {
2121
return ae.Message
2222
}
2323

24-
func (ae *AggregateError) Construct(providerErrors []InitError) {
24+
func (ae *AggregateError) Construct(providerErrors []StateErr) {
2525
// Show first error message for convenience, but all errors in the object
2626
msg := fmt.Sprintf("Provider errors occurred: %s: %v", providerErrors[0].ProviderName, providerErrors[0].Err)
2727

2828
ae.Message = msg
2929
ae.Errors = providerErrors
30-
}
30+
}

providers/multi-provider/pkg/providers.go

Lines changed: 21 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -52,10 +52,10 @@ func NewMultiProvider(passedProviders []UniqueNameProvider, evaluationStrategy s
5252
return nil, err
5353
}
5454

55-
err = multiProvider.Init(of.EvaluationContext{})
56-
if err != nil {
57-
return nil, err
58-
}
55+
// err = multiProvider.Init(of.EvaluationContext{})
56+
// if err != nil {
57+
// return nil, err
58+
// }
5959

6060
return multiProvider, nil
6161
}
@@ -108,15 +108,15 @@ func registerProviders(mp *MultiProvider, providers []UniqueNameProvider) error
108108
// Init will run the initialize method for all of provides and aggregate the errors.
109109
func (mp *MultiProvider) Init(evalCtx of.EvaluationContext) error {
110110
var wg sync.WaitGroup
111+
errChan := make(chan err.StateErr, len(mp.providersEntries))
111112

112-
errChan := make(chan err.InitError, len(mp.providersEntries))
113113
for _, provider := range mp.providersEntries {
114114
wg.Add(1)
115115
go func(p UniqueNameProvider) {
116116
defer wg.Done()
117-
if initMethod, ok := p.Provider.(of.StateHandler); ok {
118-
if initErr := initMethod.Init(evalCtx); initErr != nil {
119-
errChan <- err.InitError{ProviderName: p.Name, Err: initErr}
117+
if stateHandle, ok := p.Provider.(of.StateHandler); ok {
118+
if initErr := stateHandle.Init(evalCtx); initErr != nil {
119+
errChan <- err.StateErr{ProviderName: p.Name, Err: initErr}
120120
}
121121
}
122122
}(provider)
@@ -127,7 +127,7 @@ func (mp *MultiProvider) Init(evalCtx of.EvaluationContext) error {
127127
close(errChan)
128128
}()
129129

130-
var errors []err.InitError
130+
var errors []err.StateErr
131131
for err := range errChan {
132132
errors = append(errors, err)
133133
}
@@ -138,7 +138,6 @@ func (mp *MultiProvider) Init(evalCtx of.EvaluationContext) error {
138138
return &aggErr
139139
}
140140

141-
142141
return nil
143142
}
144143

@@ -147,7 +146,19 @@ func (mp *MultiProvider) Status() of.State {
147146
}
148147

149148
func (mp *MultiProvider) Shutdown() {
149+
var wg sync.WaitGroup
150+
151+
for _, provider := range mp.providersEntries {
152+
wg.Add(1)
153+
go func(p UniqueNameProvider) {
154+
defer wg.Done()
155+
if stateHandle, ok := p.Provider.(of.StateHandler); ok {
156+
stateHandle.Shutdown()
157+
}
158+
}(provider)
159+
}
150160

161+
wg.Wait()
151162
}
152163

153164
func (mp *MultiProvider) EventChannel() <-chan of.Event {

0 commit comments

Comments
 (0)