in store/engine/raft/node.go [178:223]
func (n *Node) runTransport() error {
logger := logger.Get()
idString := fmt.Sprintf("%d", n.config.ID)
transport := &rafthttp.Transport{
ID: types.ID(n.config.ID),
Logger: logger,
ClusterID: 0x6666,
Raft: n,
LeaderStats: stats.NewLeaderStats(logger, idString),
ServerStats: stats.NewServerStats("raft", idString),
ErrorC: make(chan error),
}
if err := transport.Start(); err != nil {
return fmt.Errorf("unable to start transport: %w", err)
}
for i, peer := range n.config.Peers {
// Don't add self to transport
if uint64(i+1) != n.config.ID {
transport.AddPeer(types.ID(i+1), []string{peer})
}
n.peers.Store(uint64(i+1), peer)
}
n.addr = n.config.Peers[n.config.ID-1]
url, err := url.Parse(n.addr)
if err != nil {
return err
}
httpServer := &http.Server{
Addr: url.Host,
Handler: transport.Handler(),
}
n.wg.Add(1)
go func() {
defer n.wg.Done()
if err := httpServer.ListenAndServe(); err != nil && !errors.Is(err, http.ErrServerClosed) {
n.logger.Fatal("Unable to start http server", zap.Error(err))
os.Exit(1)
}
}()
n.transport = transport
n.httpServer = httpServer
return nil
}