Skip to content

Commit 1e4bea6

Browse files
author
ffffwh
committed
eliminate handle.ctx
1 parent 24d6424 commit 1e4bea6

File tree

2 files changed

+18
-24
lines changed

2 files changed

+18
-24
lines changed

driver/driver.go

+1-9
Original file line numberDiff line numberDiff line change
@@ -560,7 +560,7 @@ func (d *Driver) StartTask(cfg *drivers.TaskConfig) (*drivers.TaskHandle, *drive
560560
return nil, nil, errors.Wrap(err, "SetDriverState")
561561
}
562562

563-
h := newDtleTaskHandle(d.ctx, d.logger, cfg, drivers.TaskStateRunning, time.Now().Round(time.Millisecond))
563+
h := newDtleTaskHandle(d.logger, cfg, drivers.TaskStateRunning, time.Now().Round(time.Millisecond))
564564
h.driverConfig = &common.MySQLDriverConfig{DtleTaskConfig: dtleTaskConfig}
565565
d.tasks.Set(cfg.ID, h)
566566
AllocIdTaskNameToTaskHandler.Set(cfg.AllocID, cfg.Name, cfg.ID, h)
@@ -655,14 +655,6 @@ func (d *Driver) handleWait(ctx context.Context, handle *taskHandle, ch chan *dr
655655
return
656656
case <-d.ctx.Done():
657657
return
658-
case <-handle.ctx.Done():
659-
result := &drivers.ExitResult{
660-
ExitCode: 0,
661-
Signal: 0,
662-
OOMKilled: false,
663-
Err: nil,
664-
}
665-
ch <- result
666658
case result := <-handle.waitCh: // Do not refer to handle.runner.waitCh. It might be nil.
667659
handle.stateLock.Lock()
668660
handle.procState = drivers.TaskStateExited

driver/handle.go

+17-15
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package mysql
22

33
import (
4-
"context"
54
"fmt"
65
"sync"
76
"time"
@@ -33,15 +32,14 @@ type taskHandle struct {
3332

3433
runner DriverHandle
3534

36-
ctx context.Context
37-
cancelFunc context.CancelFunc
38-
waitCh chan *drivers.ExitResult
39-
stats *common.TaskStatistics
35+
waitCh chan *drivers.ExitResult
36+
doneCh chan struct{}
37+
stats *common.TaskStatistics
4038

4139
driverConfig *common.MySQLDriverConfig
4240
}
4341

44-
func newDtleTaskHandle(ctx context.Context, logger g.LoggerType, cfg *drivers.TaskConfig, state drivers.TaskState, started time.Time) *taskHandle {
42+
func newDtleTaskHandle(logger g.LoggerType, cfg *drivers.TaskConfig, state drivers.TaskState, started time.Time) *taskHandle {
4543
h := &taskHandle{
4644
logger: logger,
4745
stateLock: sync.RWMutex{},
@@ -50,9 +48,9 @@ func newDtleTaskHandle(ctx context.Context, logger g.LoggerType, cfg *drivers.Ta
5048
startedAt: started,
5149
completedAt: time.Time{},
5250
exitResult: nil,
53-
waitCh: make(chan *drivers.ExitResult, 1),
51+
waitCh: make(chan *drivers.ExitResult),
52+
doneCh: make(chan struct{}),
5453
}
55-
h.ctx, h.cancelFunc = context.WithCancel(ctx)
5654
return h
5755
}
5856

@@ -137,7 +135,8 @@ func (h *taskHandle) run(d *Driver) {
137135
t := time.NewTimer(0)
138136
for {
139137
select {
140-
case <-h.ctx.Done():
138+
case <-h.doneCh:
139+
t.Stop()
141140
return
142141
case <-t.C:
143142
if h.runner != nil {
@@ -168,12 +167,12 @@ func (h *taskHandle) NewRunner(d *Driver) (runner DriverHandle, err error) {
168167
case common.TaskTypeSrc:
169168
if h.driverConfig.OracleConfig != nil {
170169
h.logger.Debug("found oracle src", "OracleConfig", h.driverConfig.OracleConfig)
171-
runner, err = extractor.NewExtractorOracle(ctx, h.driverConfig, h.logger, d.storeManager, h.waitCh, h.ctx)
170+
runner, err = extractor.NewExtractorOracle(ctx, h.driverConfig, h.logger, d.storeManager, h.waitCh, d.ctx)
172171
if err != nil {
173172
return nil, errors.Wrap(err, "NewExtractor")
174173
}
175174
} else {
176-
runner, err = mysql.NewExtractor(ctx, h.driverConfig, h.logger, d.storeManager, h.waitCh, h.ctx)
175+
runner, err = mysql.NewExtractor(ctx, h.driverConfig, h.logger, d.storeManager, h.waitCh, d.ctx)
177176
if err != nil {
178177
return nil, errors.Wrap(err, "NewOracleExtractor")
179178
}
@@ -183,13 +182,13 @@ func (h *taskHandle) NewRunner(d *Driver) (runner DriverHandle, err error) {
183182
if h.driverConfig.KafkaConfig != nil {
184183
h.logger.Debug("found kafka", "KafkaConfig", h.driverConfig.KafkaConfig)
185184
runner, err = kafka.NewKafkaRunner(ctx, h.driverConfig.KafkaConfig, h.logger,
186-
d.storeManager, d.config.NatsAdvertise, h.waitCh, h.ctx)
185+
d.storeManager, d.config.NatsAdvertise, h.waitCh, d.ctx)
187186
if err != nil {
188187
return nil, errors.Wrap(err, "NewKafkaRunner")
189188
}
190189
} else {
191190
runner, err = mysql.NewApplier(ctx, h.driverConfig, h.logger, d.storeManager,
192-
d.config.NatsAdvertise, h.waitCh, d.eventer, h.taskConfig, h.ctx)
191+
d.config.NatsAdvertise, h.waitCh, d.eventer, h.taskConfig, d.ctx)
193192
if err != nil {
194193
return nil, errors.Wrap(err, "NewApplier")
195194
}
@@ -267,14 +266,17 @@ func (h *taskHandle) emitStats(ru *common.TaskStatistics) {
267266

268267
func (h *taskHandle) Destroy() bool {
269268
h.stateLock.RLock()
270-
//driver.des
271-
h.cancelFunc()
269+
defer h.stateLock.RUnlock()
270+
271+
close(h.doneCh)
272+
272273
if h.runner != nil {
273274
err := h.runner.Shutdown()
274275
if err != nil {
275276
h.logger.Error("error in h.runner.Shutdown", "err", err)
276277
}
277278
}
279+
278280
return h.procState == drivers.TaskStateExited
279281
}
280282

0 commit comments

Comments
 (0)