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  }