package main
|
|
|
|
import (
|
|
"flag"
|
|
"simple-kv-store/internal/logprovider"
|
|
"simple-kv-store/internal/nodes"
|
|
"go.uber.org/zap"
|
|
"strconv"
|
|
"strings"
|
|
)
|
|
|
|
var log, _ = logprovider.CreateDefaultZapLogger(zap.InfoLevel)
|
|
|
|
func main() {
|
|
defer func() {
|
|
if err := recover(); err != nil {
|
|
log.Info("i get a panic", zap.Any("panic error", err))
|
|
}
|
|
}()
|
|
|
|
port := flag.String("port", ":9091", "rpc listen port")
|
|
cluster := flag.String("cluster", "127.0.0.1:9092,127.0.0.1:9093", "comma sep")
|
|
id := flag.Int("id", 1, "node ID")
|
|
pipe := flag.String("pipe", "", "input from scripts")
|
|
isLeader := flag.Bool("isleader", false, "init node state")
|
|
|
|
// 参数解析
|
|
flag.Parse()
|
|
clusters := strings.Split(*cluster, ",")
|
|
node := nodes.Init(*id, clusters, *pipe)
|
|
|
|
log.Info("id: " + strconv.Itoa(*id) + "节点开始监听: " + *port + "端口")
|
|
|
|
// 监听rpc
|
|
node.Rpc(*port)
|
|
// 开启 raft
|
|
nodes.Start(node, *isLeader)
|
|
|
|
select {}
|
|
}
|