忽略掉后台

This commit is contained in:
eson
2023-07-26 10:52:33 +08:00
parent 852c5e4a94
commit 4c104b56ae
17 changed files with 97 additions and 70 deletions

View File

@@ -5,6 +5,7 @@ import (
"encoding/gob"
"fmt"
"fusenapi/initalize"
"fusenapi/utils/autoconfig"
"log"
"net"
"os"
@@ -17,7 +18,7 @@ import (
func test1() {
log.SetFlags(log.Llongfile)
fsm := StartNode("fs1", "localhost:5500", initalize.InitMysql("fusentest:XErSYmLELKMnf3Dh@tcp(110.41.19.98:3306)/fusentest"))
fsm := StartNode("fs1", "localhost:5500", nil, initalize.InitMysql("fusentest:XErSYmLELKMnf3Dh@tcp(110.41.19.98:3306)/fusentest"))
time.Sleep(time.Second * 5)
@@ -31,7 +32,7 @@ func test1() {
}
// StartNode 启动节点
func StartNode(ServerID string, RaftBind string, gdb *gorm.DB) *StateCluster {
func StartNode(ServerID string, RaftBind string, serverconfigs []*autoconfig.ConfigServer, gdb *gorm.DB) *StateCluster {
fsm := &StateCluster{
store: make(map[int64]*UserState),
@@ -74,62 +75,80 @@ func StartNode(ServerID string, RaftBind string, gdb *gorm.DB) *StateCluster {
panic(err)
}
configuration := raft.Configuration{
Servers: []raft.Server{
{
Suffrage: raft.Voter,
ID: config.LocalID,
Address: transport.LocalAddr(),
},
var dup map[string]bool = make(map[string]bool)
var rserver []raft.Server = []raft.Server{
{
Suffrage: raft.Voter,
ID: config.LocalID,
Address: transport.LocalAddr(),
},
}
dup[string(config.LocalID)] = true
dup[string("backend")] = true
dup[string("product-model")] = true
dup[string("product-template")] = true
for _, cfg := range serverconfigs {
if _, ok := dup[cfg.Name]; !ok {
dup[cfg.Name] = true
rserver = append(rserver, raft.Server{
Suffrage: raft.Voter,
ID: raft.ServerID(cfg.Name),
Address: raft.ServerAddress(fmt.Sprintf("%s:%d", cfg.Host, cfg.Port-2000)),
})
}
}
configuration := raft.Configuration{
Servers: rserver,
}
fu := fsm.ra.BootstrapCluster(configuration)
if err := fu.Error(); err != nil {
log.Println(err)
}
waitForLeader(fsm.ra)
waitForCluster(fsm.ra)
return fsm
}
func JoinCluster(ServerID string, LeaderAddress string, RaftBind string, gdb *gorm.DB) *StateCluster {
// func JoinCluster(ServerID string, LeaderAddress string, RaftBind string, gdb *gorm.DB) *StateCluster {
fsm := StartNode(ServerID, RaftBind, gdb)
// fsm := StartNode(ServerID, RaftBind, gdb)
configFuture := fsm.ra.GetConfiguration()
if err := configFuture.Error(); err != nil {
log.Fatalf("failed to get raft configuration: %v", err)
}
// configFuture := fsm.ra.GetConfiguration()
// if err := configFuture.Error(); err != nil {
// log.Fatalf("failed to get raft configuration: %v", err)
// }
for _, srv := range configFuture.Configuration().Servers {
if srv.ID == raft.ServerID(ServerID) && srv.Address == raft.ServerAddress(LeaderAddress) {
if future := fsm.ra.RemoveServer(srv.ID, 0, 0); future.Error() != nil {
log.Fatalf("Error removing existing server [%s]: %v", ServerID, future.Error())
}
}
}
// for _, srv := range configFuture.Configuration().Servers {
// if srv.ID == raft.ServerID(ServerID) && srv.Address == raft.ServerAddress(LeaderAddress) {
// if future := fsm.ra.RemoveServer(srv.ID, 0, 0); future.Error() != nil {
// log.Fatalf("Error removing existing server [%s]: %v", ServerID, future.Error())
// }
// }
// }
f := fsm.ra.AddVoter(raft.ServerID(ServerID), raft.ServerAddress(RaftBind), 0, 0)
if f.Error() != nil {
log.Fatalf("Error adding voter: %v", f.Error())
}
// f := fsm.ra.AddVoter(raft.ServerID(ServerID), raft.ServerAddress(RaftBind), 0, 0)
// if f.Error() != nil {
// log.Fatalf("Error adding voter: %v", f.Error())
// }
return fsm
}
// return fsm
// }
func waitForLeader(ra *raft.Raft) {
leaderCh := ra.LeaderCh()
func waitForCluster(ra *raft.Raft) {
ticker := time.NewTicker(500 * time.Millisecond)
defer ticker.Stop()
for {
select {
case isLeader := <-leaderCh:
if isLeader {
return
}
case <-time.After(10 * time.Second):
log.Println("Still waiting for the leader...")
for range ticker.C {
state := ra.State()
if state == raft.Leader || state == raft.Follower {
log.Println("Raft cluster is running")
return
} else {
log.Println("Still waiting for the cluster to start...")
}
}
}