@@ -38,6 +38,7 @@ import (
3838 "github.com/pingcap/tidb/pkg/sessionctx"
3939 "github.com/pingcap/tidb/pkg/util/dbutil"
4040 "github.com/pingcap/tidb/pkg/util/filter"
41+ tidblogutil "github.com/pingcap/tidb/pkg/util/logutil"
4142 regexprrouter "github.com/pingcap/tidb/pkg/util/regexpr-router"
4243 router "github.com/pingcap/tidb/pkg/util/table-router"
4344 "github.com/pingcap/tiflow/dm/config"
@@ -97,6 +98,9 @@ const (
9798 skipJobIdx = iota
9899 ddlJobIdx
99100 workerJobTSArrayInitSize // size = skip + ddl
101+
102+ unhandledEventSampleInterval = 5 * time .Minute
103+ unhandledEventSampleFirst = 1
100104)
101105
102106// waitXIDStatus represents the status for waiting XID event when pause/stop task.
@@ -255,7 +259,8 @@ type Syncer struct {
255259 charsetAndDefaultCollation map [string ]string
256260 idAndCollationMap map [int ]string
257261
258- ddlWorker * DDLWorker
262+ ddlWorker * DDLWorker
263+ unhandledEventLogger * zap.Logger
259264}
260265
261266// NewSyncer creates a new Syncer.
@@ -307,6 +312,11 @@ func NewSyncer(cfg *config.SubTaskConfig, etcdClient *clientv3.Client, relay rel
307312 syncer .lastCheckpointFlushedTime = time.Time {}
308313 syncer .relay = relay
309314 syncer .safeMode = sm .NewSafeMode ()
315+ syncer .unhandledEventLogger = tidblogutil .SampleLoggerFactory (
316+ unhandledEventSampleInterval ,
317+ unhandledEventSampleFirst ,
318+ logFields ... ,
319+ )()
310320
311321 return syncer
312322}
@@ -343,6 +353,10 @@ func (s *Syncer) closeJobChans() {
343353 s .jobsClosed .Store (true )
344354}
345355
356+ func (s * Syncer ) recordUnhandledEvent (message string , ev interface {}) {
357+ s .unhandledEventLogger .Warn (message , zap .String ("type" , fmt .Sprintf ("%T" , ev )))
358+ }
359+
346360// Type implements Unit.Type.
347361func (s * Syncer ) Type () pb.UnitType {
348362 return pb .UnitType_Sync
@@ -2443,7 +2457,7 @@ func (s *Syncer) Run(ctx context.Context) (err error) {
24432457 case * replication.TableMapEvent :
24442458 case * replication.FormatDescriptionEvent :
24452459 default :
2446- s .tctx . L (). Warn ( "unhandled event from transaction payload" , zap . String ( "type" , fmt . Sprintf ( "%T" , tpevt )) )
2460+ s .recordUnhandledEvent ( "unhandled event from transaction payload" , tpevt )
24472461 }
24482462 }
24492463 if needContinue {
@@ -2452,7 +2466,7 @@ func (s *Syncer) Run(ctx context.Context) (err error) {
24522466 case * replication.TableMapEvent :
24532467 case * replication.FormatDescriptionEvent :
24542468 default :
2455- s .tctx . L (). Warn ( "unhandled event" , zap . String ( "type" , fmt . Sprintf ( "%T" , ev )) )
2469+ s .recordUnhandledEvent ( "unhandled event" , ev )
24562470 }
24572471 if err2 != nil {
24582472 if err := s .handleEventError (err2 , startLocation , endLocation , e .Header .EventType == replication .QUERY_EVENT , originSQL ); err != nil {
0 commit comments