Commit fe3f42be authored by Zach Howard's avatar Zach Howard Committed by GitHub

op-conductor: Adds connection test to conductor addServer* apis (#11210)

parent 0db615dc
...@@ -32,6 +32,16 @@ type RaftConsensus struct { ...@@ -32,6 +32,16 @@ type RaftConsensus struct {
unsafeTracker *unsafeHeadTracker unsafeTracker *unsafeHeadTracker
} }
// checkTCPPortOpen attempts to connect to the specified address and returns an error if the connection fails.
func checkTCPPortOpen(address string) error {
conn, err := net.DialTimeout("tcp", address, 5*time.Second)
if err != nil {
return err
}
defer conn.Close()
return nil
}
// NewRaftConsensus creates a new RaftConsensus instance. // NewRaftConsensus creates a new RaftConsensus instance.
func NewRaftConsensus(log log.Logger, serverID, serverAddr, storageDir string, bootstrap bool, rollupCfg *rollup.Config) (*RaftConsensus, error) { func NewRaftConsensus(log log.Logger, serverID, serverAddr, storageDir string, bootstrap bool, rollupCfg *rollup.Config) (*RaftConsensus, error) {
rc := raft.DefaultConfig() rc := raft.DefaultConfig()
...@@ -113,6 +123,10 @@ func NewRaftConsensus(log log.Logger, serverID, serverAddr, storageDir string, b ...@@ -113,6 +123,10 @@ func NewRaftConsensus(log log.Logger, serverID, serverAddr, storageDir string, b
// AddNonVoter implements Consensus, it tries to add a non-voting member into the cluster. // AddNonVoter implements Consensus, it tries to add a non-voting member into the cluster.
func (rc *RaftConsensus) AddNonVoter(id string, addr string, version uint64) error { func (rc *RaftConsensus) AddNonVoter(id string, addr string, version uint64) error {
if err := checkTCPPortOpen(addr); err != nil {
rc.log.Error("connection test to member addr failed", "id", id, "addr", addr, "err", err)
return err
}
if err := rc.r.AddNonvoter(raft.ServerID(id), raft.ServerAddress(addr), version, defaultTimeout).Error(); err != nil { if err := rc.r.AddNonvoter(raft.ServerID(id), raft.ServerAddress(addr), version, defaultTimeout).Error(); err != nil {
rc.log.Error("failed to add non-voter", "id", id, "addr", addr, "version", version, "err", err) rc.log.Error("failed to add non-voter", "id", id, "addr", addr, "version", version, "err", err)
return err return err
...@@ -122,6 +136,10 @@ func (rc *RaftConsensus) AddNonVoter(id string, addr string, version uint64) err ...@@ -122,6 +136,10 @@ func (rc *RaftConsensus) AddNonVoter(id string, addr string, version uint64) err
// AddVoter implements Consensus, it tries to add a voting member into the cluster. // AddVoter implements Consensus, it tries to add a voting member into the cluster.
func (rc *RaftConsensus) AddVoter(id string, addr string, version uint64) error { func (rc *RaftConsensus) AddVoter(id string, addr string, version uint64) error {
if err := checkTCPPortOpen(addr); err != nil {
rc.log.Error("connection test to member addr failed", "id", id, "addr", addr, "err", err)
return err
}
if err := rc.r.AddVoter(raft.ServerID(id), raft.ServerAddress(addr), version, defaultTimeout).Error(); err != nil { if err := rc.r.AddVoter(raft.ServerID(id), raft.ServerAddress(addr), version, defaultTimeout).Error(); err != nil {
rc.log.Error("failed to add voter", "id", id, "addr", addr, "version", version, "err", err) rc.log.Error("failed to add voter", "id", id, "addr", addr, "version", version, "err", err)
return err return err
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment