Skip to content

Commit 62d049c

Browse files
committed
Code style improvements of StepRunner
Signed-off-by: Ilya <[email protected]>
1 parent 5efe6d8 commit 62d049c

File tree

2 files changed

+34
-32
lines changed

2 files changed

+34
-32
lines changed

pkg/runner/step_runner.go

Lines changed: 32 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -30,23 +30,24 @@ type StepResult struct {
3030
type StepRunner struct {
3131
mu sync.Mutex
3232

33-
stepIn chan *target.Target
34-
reportedTargets map[string]struct{}
35-
36-
started bool
37-
runningLoopActive bool
33+
input chan *target.Target
3834
stopOnce sync.Once
35+
resultsChan chan<- StepRunnerEvent
36+
runningLoopActive bool
3937
finishedCh chan struct{}
4038

4139
resultErr error
4240
resultResumeState json.RawMessage
4341
notifyStoppedOnce sync.Once
44-
resultsChan chan<- StepRunnerEvent
4542
}
4643

4744
func (sr *StepRunner) AddTarget(ctx xcontext.Context, tgt *target.Target) error {
45+
if tgt == nil {
46+
return fmt.Errorf("target should not be nil")
47+
}
48+
4849
select {
49-
case sr.stepIn <- tgt:
50+
case sr.input <- tgt:
5051
case <-ctx.Until(xcontext.ErrPaused):
5152
return xcontext.ErrPaused
5253
case <-ctx.Done():
@@ -61,20 +62,15 @@ func (sr *StepRunner) Run(
6162
ev testevent.Emitter,
6263
resumeState json.RawMessage,
6364
) (<-chan StepRunnerEvent, error) {
64-
err := func() error {
65-
sr.mu.Lock()
66-
defer sr.mu.Unlock()
67-
if sr.started {
68-
return &cerrors.ErrAlreadyDone{}
69-
}
70-
sr.started = true
71-
return nil
72-
}()
73-
if err != nil {
74-
return nil, err
65+
sr.mu.Lock()
66+
defer sr.mu.Unlock()
67+
68+
if sr.resultsChan != nil {
69+
return nil, &cerrors.ErrAlreadyDone{}
7570
}
7671

77-
sr.finishedCh = make(chan struct{})
72+
finishedCh := make(chan struct{})
73+
sr.finishedCh = finishedCh
7874
resultsChan := make(chan StepRunnerEvent, 1)
7975
sr.resultsChan = resultsChan
8076

@@ -95,10 +91,11 @@ func (sr *StepRunner) Run(
9591
ctx.Debugf("StepRunner finished")
9692
}
9793

94+
stepIn := sr.input
9895
stepOut := make(chan test.TestStepResult)
9996
go func() {
10097
defer finish()
101-
sr.runningLoop(ctx, stepOut, bundle, ev, resumeState)
98+
sr.runningLoop(ctx, stepIn, stepOut, bundle, ev, resumeState)
10299
ctx.Debugf("Running loop finished")
103100
}()
104101

@@ -107,21 +104,22 @@ func (sr *StepRunner) Run(
107104
sr.readingLoop(ctx, stepOut, bundle.TestStepLabel)
108105
ctx.Debugf("Reading loop finished")
109106
}()
107+
110108
return resultsChan, nil
111109
}
112110

113111
func (sr *StepRunner) Started() bool {
114112
sr.mu.Lock()
115113
defer sr.mu.Unlock()
116114

117-
return sr.started
115+
return sr.resultsChan != nil
118116
}
119117

120118
func (sr *StepRunner) Running() bool {
121119
sr.mu.Lock()
122120
defer sr.mu.Unlock()
123121

124-
return sr.started && sr.finishedCh != nil
122+
return sr.resultsChan != nil && sr.finishedCh != nil
125123
}
126124

127125
// WaitResults returns TestStep.Run() output
@@ -161,7 +159,7 @@ func (sr *StepRunner) WaitResults(ctx context.Context) (stepResult StepResult, e
161159
// Stop triggers TestStep to stop running by closing input channel
162160
func (sr *StepRunner) Stop() {
163161
sr.stopOnce.Do(func() {
164-
close(sr.stepIn)
162+
close(sr.input)
165163
})
166164
}
167165

@@ -170,6 +168,7 @@ func (sr *StepRunner) readingLoop(
170168
stepOut chan test.TestStepResult,
171169
testStepLabel string,
172170
) {
171+
reportedTargets := make(map[string]struct{})
173172
for {
174173
select {
175174
case res, ok := <-stepOut:
@@ -191,10 +190,8 @@ func (sr *StepRunner) readingLoop(
191190
}
192191
ctx.Infof("Obtained '%v' for target '%s'", res, res.Target.ID)
193192

194-
sr.mu.Lock()
195-
_, found := sr.reportedTargets[res.Target.ID]
196-
sr.reportedTargets[res.Target.ID] = struct{}{}
197-
sr.mu.Unlock()
193+
_, found := reportedTargets[res.Target.ID]
194+
reportedTargets[res.Target.ID] = struct{}{}
198195

199196
if found {
200197
sr.setErr(ctx, &cerrors.ErrTestStepReturnedDuplicateResult{StepName: testStepLabel, Target: res.Target.ID})
@@ -219,6 +216,7 @@ func (sr *StepRunner) readingLoop(
219216

220217
func (sr *StepRunner) runningLoop(
221218
ctx xcontext.Context,
219+
stepIn <-chan *target.Target,
222220
stepOut chan test.TestStepResult,
223221
bundle test.TestStepBundle,
224222
ev testevent.Emitter,
@@ -249,7 +247,7 @@ func (sr *StepRunner) runningLoop(
249247
}
250248
}()
251249

252-
inChannels := test.TestStepChannels{In: sr.stepIn, Out: stepOut}
250+
inChannels := test.TestStepChannels{In: stepIn, Out: stepOut}
253251
return bundle.TestStep.Run(ctx, inChannels, bundle.Parameters, ev, resumeState)
254252
}()
255253
ctx.Debugf("TestStep finished '%v', rs %s", err, string(resultResumeState))
@@ -273,7 +271,11 @@ func (sr *StepRunner) setErrLocked(ctx xcontext.Context, err error) {
273271
}
274272
ctx.Errorf("err: %v", err)
275273
sr.resultErr = err
276-
sr.notifyStopped(sr.resultErr)
274+
275+
// notifyStopped is a blocking operation: should release the lock
276+
sr.mu.Unlock()
277+
sr.notifyStopped(err)
278+
sr.mu.Lock()
277279
}
278280

279281
func (sr *StepRunner) notifyStopped(err error) {
@@ -296,7 +298,6 @@ func safeCloseOutCh(ch chan test.TestStepResult) (recoverOccurred bool) {
296298
// NewStepRunner creates a new StepRunner object
297299
func NewStepRunner() *StepRunner {
298300
return &StepRunner{
299-
stepIn: make(chan *target.Target),
300-
reportedTargets: make(map[string]struct{}),
301+
input: make(chan *target.Target),
301302
}
302303
}

pkg/runner/test_runner.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -538,6 +538,7 @@ func (tr *TestRunner) runStepIfNeeded(ss *stepState) error {
538538
return
539539
}
540540
if stepResult.Target == nil {
541+
ss.ctx.Errorf("step runner results an err: %v", err)
541542
tr.mu.Lock()
542543
ss.setErrLocked(stepResult.Err)
543544
tr.mu.Unlock()
@@ -564,7 +565,7 @@ func (ss *stepState) setErrLocked(err error) {
564565
if err == nil || ss.runErr != nil {
565566
return
566567
}
567-
ss.ctx.Errorf("err: %v", err)
568+
ss.ctx.Errorf("setErrLocked: %v", err)
568569
ss.runErr = err
569570
}
570571

0 commit comments

Comments
 (0)