@@ -16,7 +16,9 @@ package keyspan
16
16
import (
17
17
"bytes"
18
18
"context"
19
+ "encoding/hex"
19
20
"math"
21
+ "time"
20
22
21
23
"github.com/pingcap/log"
22
24
"github.com/pingcap/tiflow/cdc/model"
@@ -44,8 +46,9 @@ func newRegionCountSplitter(
44
46
func (m * regionCountSplitter ) split (
45
47
ctx context.Context , span tablepb.Span , captureNum int ,
46
48
) []tablepb.Span {
49
+ startTimestamp := time .Now ()
47
50
bo := tikv .NewBackoffer (ctx , 500 )
48
- regions , err := m .regionCache .ListRegionIDsInKeyRange (bo , span .StartKey , span .EndKey )
51
+ regions , err := m .regionCache .LoadRegionsInKeyRange (bo , span .StartKey , span .EndKey )
49
52
if err != nil {
50
53
log .Warn ("schedulerv3: list regions failed, skip split span" ,
51
54
zap .String ("namespace" , m .changefeedID .Namespace ),
@@ -72,38 +75,23 @@ func (m *regionCountSplitter) split(
72
75
spans := make ([]tablepb.Span , 0 , stepper .SpanCount ())
73
76
start , end := 0 , stepper .Step ()
74
77
for {
75
- startRegion , err := m .regionCache .LocateRegionByID (bo , regions [start ])
76
- if err != nil {
77
- log .Warn ("schedulerv3: get regions failed, skip split span" ,
78
- zap .String ("namespace" , m .changefeedID .Namespace ),
79
- zap .String ("changefeed" , m .changefeedID .ID ),
80
- zap .String ("span" , span .String ()),
81
- zap .Error (err ))
82
- return []tablepb.Span {span }
83
- }
84
- endRegion , err := m .regionCache .LocateRegionByID (bo , regions [end - 1 ])
85
- if err != nil {
86
- log .Warn ("schedulerv3: get regions failed, skip split span" ,
87
- zap .String ("namespace" , m .changefeedID .Namespace ),
88
- zap .String ("changefeed" , m .changefeedID .ID ),
89
- zap .String ("span" , span .String ()),
90
- zap .Error (err ))
91
- return []tablepb.Span {span }
92
- }
78
+ startKey := regions [start ].StartKey ()
79
+ endKey := regions [end - 1 ].EndKey ()
93
80
if len (spans ) > 0 &&
94
- bytes .Compare (spans [len (spans )- 1 ].EndKey , startRegion . StartKey ) > 0 {
81
+ bytes .Compare (spans [len (spans )- 1 ].EndKey , startKey ) > 0 {
95
82
log .Warn ("schedulerv3: list region out of order detected" ,
96
83
zap .String ("namespace" , m .changefeedID .Namespace ),
97
84
zap .String ("changefeed" , m .changefeedID .ID ),
98
85
zap .String ("span" , span .String ()),
99
86
zap .Stringer ("lastSpan" , & spans [len (spans )- 1 ]),
100
- zap .Stringer ("region" , startRegion ))
87
+ zap .String ("startKey" , hex .EncodeToString (startKey )),
88
+ zap .String ("endKey" , hex .EncodeToString (endKey )))
101
89
return []tablepb.Span {span }
102
90
}
103
91
spans = append (spans , tablepb.Span {
104
92
TableID : span .TableID ,
105
- StartKey : startRegion . StartKey ,
106
- EndKey : endRegion . EndKey ,
93
+ StartKey : startKey ,
94
+ EndKey : endKey ,
107
95
})
108
96
109
97
if end == len (regions ) {
@@ -128,7 +116,8 @@ func (m *regionCountSplitter) split(
128
116
zap .Int ("totalCaptures" , captureNum ),
129
117
zap .Int ("regionCount" , len (regions )),
130
118
zap .Int ("regionThreshold" , m .regionThreshold ),
131
- zap .Int ("spanRegionLimit" , spanRegionLimit ))
119
+ zap .Int ("spanRegionLimit" , spanRegionLimit ),
120
+ zap .Duration ("time" , time .Since (startTimestamp )))
132
121
return spans
133
122
}
134
123
0 commit comments