github.com/grafana/pyroscope@v1.18.0/pkg/metastore/raftnode/service.go (about) 1 package raftnode 2 3 import ( 4 "context" 5 6 "github.com/grafana/pyroscope/pkg/metastore/raftnode/raftnodepb" 7 ) 8 9 type RaftNode interface { 10 ReadIndex() (ReadIndex, error) 11 NodeInfo() (*raftnodepb.NodeInfo, error) 12 RemoveNode(request *raftnodepb.RemoveNodeRequest) (*raftnodepb.RemoveNodeResponse, error) 13 AddNode(request *raftnodepb.AddNodeRequest) (*raftnodepb.AddNodeResponse, error) 14 DemoteLeader(request *raftnodepb.DemoteLeaderRequest) (*raftnodepb.DemoteLeaderResponse, error) 15 PromoteToLeader(request *raftnodepb.PromoteToLeaderRequest) (*raftnodepb.PromoteToLeaderResponse, error) 16 } 17 18 type RaftNodeService struct { 19 raftnodepb.RaftNodeServiceServer 20 node RaftNode 21 } 22 23 func NewRaftNodeService(node RaftNode) *RaftNodeService { 24 return &RaftNodeService{node: node} 25 } 26 27 // ReadIndex returns the current commit index and verifies leadership. 28 func (svc *RaftNodeService) ReadIndex( 29 context.Context, 30 *raftnodepb.ReadIndexRequest, 31 ) (*raftnodepb.ReadIndexResponse, error) { 32 read, err := svc.node.ReadIndex() 33 if err != nil { 34 return nil, err 35 } 36 resp := &raftnodepb.ReadIndexResponse{ 37 CommitIndex: read.CommitIndex, 38 Term: read.Term, 39 } 40 return resp, nil 41 } 42 43 func (svc *RaftNodeService) NodeInfo( 44 context.Context, 45 *raftnodepb.NodeInfoRequest, 46 ) (*raftnodepb.NodeInfoResponse, error) { 47 info, err := svc.node.NodeInfo() 48 if err != nil { 49 return nil, err 50 } 51 return &raftnodepb.NodeInfoResponse{Node: info}, nil 52 } 53 54 func (svc *RaftNodeService) RemoveNode( 55 _ context.Context, 56 r *raftnodepb.RemoveNodeRequest, 57 ) (*raftnodepb.RemoveNodeResponse, error) { 58 return svc.node.RemoveNode(r) 59 } 60 61 func (svc *RaftNodeService) AddNode( 62 _ context.Context, 63 r *raftnodepb.AddNodeRequest, 64 ) (*raftnodepb.AddNodeResponse, error) { 65 return svc.node.AddNode(r) 66 } 67 68 func (svc *RaftNodeService) DemoteLeader( 69 _ context.Context, 70 r *raftnodepb.DemoteLeaderRequest, 71 ) (*raftnodepb.DemoteLeaderResponse, error) { 72 return svc.node.DemoteLeader(r) 73 } 74 75 func (svc *RaftNodeService) PromoteToLeader( 76 _ context.Context, 77 r *raftnodepb.PromoteToLeaderRequest, 78 ) (*raftnodepb.PromoteToLeaderResponse, error) { 79 return svc.node.PromoteToLeader(r) 80 }