@@ -335,7 +335,7 @@ func setupGRPC(r *raft.Raft, st store.MVCCStore, tm *transport.Manager, coordina
335335 return s , gs
336336}
337337
338- func setupRedis (ctx context.Context , lc net.ListenConfig , st store.MVCCStore , coordinator * kv.Coordinate , addr , redisAddr , raftRedisMapStr string , relay * adapter.RedisPubSubRelay ) (* adapter.RedisServer , error ) {
338+ func setupRedis (ctx context.Context , lc net.ListenConfig , st store.MVCCStore , coordinator * kv.Coordinate , addr , redisAddr , raftRedisMapStr string , relay * adapter.RedisPubSubRelay , readTracker * kv. ActiveTimestampTracker ) (* adapter.RedisServer , error ) {
339339 leaderRedis := make (map [raft.ServerAddress ]string )
340340 if raftRedisMapStr != "" {
341341 parts := strings .SplitSeq (raftRedisMapStr , "," )
@@ -354,7 +354,7 @@ func setupRedis(ctx context.Context, lc net.ListenConfig, st store.MVCCStore, co
354354 return nil , errors .WithStack (err )
355355 }
356356 routedStore := kv .NewLeaderRoutedStore (st , coordinator )
357- return adapter .NewRedisServer (l , redisAddr , routedStore , coordinator , leaderRedis , relay ), nil
357+ return adapter .NewRedisServer (l , redisAddr , routedStore , coordinator , leaderRedis , relay , adapter . WithRedisActiveTimestampTracker ( readTracker ) ), nil
358358}
359359
360360func run (ctx context.Context , eg * errgroup.Group , cfg config ) error {
@@ -369,6 +369,7 @@ func run(ctx context.Context, eg *errgroup.Group, cfg config) error {
369369
370370 st := store .NewMVCCStore ()
371371 fsm := kv .NewKvFSM (st )
372+ readTracker := kv .NewActiveTimestampTracker ()
372373
373374 // Config
374375 c := raft .DefaultConfig ()
@@ -402,9 +403,18 @@ func run(ctx context.Context, eg *errgroup.Group, cfg config) error {
402403 distEngine ,
403404 distCatalog ,
404405 adapter .WithDistributionCoordinator (coordinator ),
406+ adapter .WithDistributionActiveTimestampTracker (readTracker ),
405407 )
406408 metricsRegistry := monitoring .NewRegistry (cfg .raftID , cfg .address )
407409 metricsRegistry .RaftObserver ().Start (ctx , []monitoring.RaftRuntime {{GroupID : 1 , Raft : r }}, raftObserveInterval )
410+ compactor := kv .NewFSMCompactor (
411+ []kv.FSMCompactRuntime {{
412+ GroupID : 1 ,
413+ Raft : r ,
414+ Store : st ,
415+ }},
416+ kv .WithFSMCompactorActiveTimestampTracker (readTracker ),
417+ )
408418 relay := adapter .NewRedisPubSubRelay ()
409419
410420 s , grpcSvc := setupGRPC (r , st , tm , coordinator , distServer , relay )
@@ -417,7 +427,7 @@ func run(ctx context.Context, eg *errgroup.Group, cfg config) error {
417427 _ = grpcSock .Close ()
418428 })
419429
420- rd , err := setupRedis (ctx , lc , st , coordinator , cfg .address , cfg .redisAddress , cfg .raftRedisMap , relay )
430+ rd , err := setupRedis (ctx , lc , st , coordinator , cfg .address , cfg .redisAddress , cfg .raftRedisMap , relay , readTracker )
421431 if err != nil {
422432 return err
423433 }
@@ -444,6 +454,7 @@ func run(ctx context.Context, eg *errgroup.Group, cfg config) error {
444454 }
445455
446456 eg .Go (catalogWatcherTask (ctx , distCatalog , distEngine ))
457+ eg .Go (func () error { return compactor .Run (ctx ) })
447458 eg .Go (grpcShutdownTask (ctx , s , grpcSock , cfg .address , grpcSvc ))
448459 eg .Go (grpcServeTask (s , grpcSock , cfg .address ))
449460 eg .Go (redisShutdownTask (ctx , rd , cfg .redisAddress ))
0 commit comments