WIP: Raft consensus for lotus nodes in a cluster
This commit is contained in:
@@ -0,0 +1,66 @@
|
||||
package modules
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
rpc "github.com/libp2p/go-libp2p-gorpc"
|
||||
"github.com/libp2p/go-libp2p/core/host"
|
||||
"github.com/libp2p/go-libp2p/core/peer"
|
||||
"github.com/libp2p/go-libp2p/core/protocol"
|
||||
|
||||
"github.com/filecoin-project/lotus/api"
|
||||
"github.com/filecoin-project/lotus/chain/types"
|
||||
consensus "github.com/filecoin-project/lotus/lib/consensus/raft"
|
||||
"github.com/filecoin-project/lotus/node/impl/full"
|
||||
)
|
||||
|
||||
type RPCHandler struct {
|
||||
mpoolAPI full.MpoolAPI
|
||||
cons *consensus.Consensus
|
||||
}
|
||||
|
||||
//type ConsensusRPCAPI struct {
|
||||
// cons *consensus.Consensus
|
||||
// rpcHandler *RPCHandler
|
||||
//}
|
||||
|
||||
func NewRPCHandler(mpoolAPI full.MpoolAPI, cons *consensus.Consensus) *RPCHandler {
|
||||
return &RPCHandler{mpoolAPI, cons}
|
||||
}
|
||||
|
||||
func (h *RPCHandler) MpoolPushMessage(ctx context.Context, msgWhole *api.MpoolMessageWhole, ret *types.SignedMessage) error {
|
||||
signedMsg, err := h.mpoolAPI.MpoolPushMessage(ctx, msgWhole.Msg, msgWhole.Spec)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
*ret = *signedMsg
|
||||
return nil
|
||||
}
|
||||
|
||||
func (h *RPCHandler) AddPeer(ctx context.Context, pid peer.ID, ret *struct{}) error {
|
||||
return h.cons.AddPeer(ctx, pid)
|
||||
}
|
||||
|
||||
// Add other consensus RPC calls here
|
||||
|
||||
func NewRPCClient(host host.Host) *rpc.Client {
|
||||
protocolID := protocol.ID("/p2p/rpc/ping")
|
||||
return rpc.NewClient(host, protocolID)
|
||||
}
|
||||
|
||||
func NewRPCServer(host host.Host, rpcHandler *RPCHandler) error {
|
||||
protocolID := protocol.ID("/p2p/rpc/ping")
|
||||
rpcServer := rpc.NewServer(host, protocolID)
|
||||
return rpcServer.RegisterName("Consensus", rpcHandler)
|
||||
//return err
|
||||
}
|
||||
|
||||
// contructorsfor rpc client and rpc server
|
||||
// rpc handler
|
||||
|
||||
// rpcClient
|
||||
// Consensus
|
||||
// MessageSigner
|
||||
// MpoolAPI
|
||||
// RPC handler
|
||||
// RPC server
|
||||
Reference in New Issue
Block a user