@@ -30,7 +30,6 @@ import (
3030 "github.com/hashicorp/raft"
3131 "golang.org/x/sync/errgroup"
3232 "google.golang.org/grpc"
33- "google.golang.org/grpc/credentials/insecure"
3433)
3534
3635var (
@@ -206,7 +205,7 @@ func joinCluster(ctx context.Context, nodes []config) error {
206205 }
207206
208207 // Connect to leader
209- conn , err := grpc .NewClient (leader .address , grpc . WithTransportCredentials ( insecure . NewCredentials ()) )
208+ conn , err := grpc .NewClient (leader .address , internalutil . GRPCDialOptions () ... )
210209 if err != nil {
211210 return fmt .Errorf ("failed to dial leader: %w" , err )
212211 }
@@ -322,7 +321,7 @@ func setupStorage(dir string) (raft.LogStore, raft.StableStore, raft.SnapshotSto
322321}
323322
324323func setupGRPC (r * raft.Raft , st store.MVCCStore , tm * transport.Manager , coordinator * kv.Coordinate , distServer * adapter.DistributionServer , relay * adapter.RedisPubSubRelay ) (* grpc.Server , * adapter.GRPCServer ) {
325- s := grpc .NewServer ()
324+ s := grpc .NewServer (internalutil . GRPCServerOptions () ... )
326325 trx := kv .NewTransaction (r )
327326 routedStore := kv .NewLeaderRoutedStore (st , coordinator )
328327 gs := adapter .NewGRPCServer (routedStore , coordinator , adapter .WithCloseStore ())
@@ -336,7 +335,7 @@ func setupGRPC(r *raft.Raft, st store.MVCCStore, tm *transport.Manager, coordina
336335 return s , gs
337336}
338337
339- 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 ) {
340339 leaderRedis := make (map [raft.ServerAddress ]string )
341340 if raftRedisMapStr != "" {
342341 parts := strings .SplitSeq (raftRedisMapStr , "," )
@@ -355,7 +354,7 @@ func setupRedis(ctx context.Context, lc net.ListenConfig, st store.MVCCStore, co
355354 return nil , errors .WithStack (err )
356355 }
357356 routedStore := kv .NewLeaderRoutedStore (st , coordinator )
358- return adapter .NewRedisServer (l , redisAddr , routedStore , coordinator , leaderRedis , relay ), nil
357+ return adapter .NewRedisServer (l , redisAddr , routedStore , coordinator , leaderRedis , relay , adapter . WithRedisActiveTimestampTracker ( readTracker ) ), nil
359358}
360359
361360func run (ctx context.Context , eg * errgroup.Group , cfg config ) error {
@@ -370,6 +369,7 @@ func run(ctx context.Context, eg *errgroup.Group, cfg config) error {
370369
371370 st := store .NewMVCCStore ()
372371 fsm := kv .NewKvFSM (st )
372+ readTracker := kv .NewActiveTimestampTracker ()
373373
374374 // Config
375375 c := raft .DefaultConfig ()
@@ -381,9 +381,7 @@ func run(ctx context.Context, eg *errgroup.Group, cfg config) error {
381381 })
382382
383383 // Transport
384- tm := transport .New (raft .ServerAddress (cfg .address ), []grpc.DialOption {
385- grpc .WithTransportCredentials (insecure .NewCredentials ()),
386- })
384+ tm := transport .New (raft .ServerAddress (cfg .address ), internalutil .GRPCDialOptions ())
387385
388386 r , err := raft .NewRaft (c , fsm , ldb , sdb , fss , tm .Transport ())
389387 if err != nil {
@@ -405,9 +403,18 @@ func run(ctx context.Context, eg *errgroup.Group, cfg config) error {
405403 distEngine ,
406404 distCatalog ,
407405 adapter .WithDistributionCoordinator (coordinator ),
406+ adapter .WithDistributionActiveTimestampTracker (readTracker ),
408407 )
409408 metricsRegistry := monitoring .NewRegistry (cfg .raftID , cfg .address )
410409 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+ )
411418 relay := adapter .NewRedisPubSubRelay ()
412419
413420 s , grpcSvc := setupGRPC (r , st , tm , coordinator , distServer , relay )
@@ -420,7 +427,7 @@ func run(ctx context.Context, eg *errgroup.Group, cfg config) error {
420427 _ = grpcSock .Close ()
421428 })
422429
423- 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 )
424431 if err != nil {
425432 return err
426433 }
@@ -447,6 +454,7 @@ func run(ctx context.Context, eg *errgroup.Group, cfg config) error {
447454 }
448455
449456 eg .Go (catalogWatcherTask (ctx , distCatalog , distEngine ))
457+ eg .Go (func () error { return compactor .Run (ctx ) })
450458 eg .Go (grpcShutdownTask (ctx , s , grpcSock , cfg .address , grpcSvc ))
451459 eg .Go (grpcServeTask (s , grpcSock , cfg .address ))
452460 eg .Go (redisShutdownTask (ctx , rd , cfg .redisAddress ))
0 commit comments