diff --git a/fsm/main.go b/fsm/main.go index 35d67929..fe3e87c1 100644 --- a/fsm/main.go +++ b/fsm/main.go @@ -94,6 +94,31 @@ func StartNode(ServerID string, RaftBind string, gdb *gorm.DB) *StateCluster { return fsm } +func JoinCluster(ServerID string, LeaderAddress string, RaftBind string, gdb *gorm.DB) *StateCluster { + + fsm := StartNode(ServerID, RaftBind, gdb) + + 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()) + } + } + } + + 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 +} + func waitForLeader(ra *raft.Raft) { leaderCh := ra.LeaderCh() diff --git a/server/auth/internal/svc/servicecontext.go b/server/auth/internal/svc/servicecontext.go index 74a9dfe7..afaf5b3a 100644 --- a/server/auth/internal/svc/servicecontext.go +++ b/server/auth/internal/svc/servicecontext.go @@ -24,7 +24,7 @@ type ServiceContext struct { func NewServiceContext(c config.Config) *ServiceContext { conn := initalize.InitMysql(c.SourceMysql) - StateServer := fsm.StartNode(c.Name, fmt.Sprintf("%s:%d", c.Host, c.Port-2000), conn) + StateServer := fsm.StartNode(c.Name, fmt.Sprintf("localhost:%d", c.Port-2001), conn) return &ServiceContext{ Config: c,