|
@@ -13,6 +13,7 @@ import (
|
|
|
"github.com/coreos/go-raft"
|
|
"github.com/coreos/go-raft"
|
|
|
"io/ioutil"
|
|
"io/ioutil"
|
|
|
"log"
|
|
"log"
|
|
|
|
|
+ "net"
|
|
|
"net/http"
|
|
"net/http"
|
|
|
"os"
|
|
"os"
|
|
|
"strings"
|
|
"strings"
|
|
@@ -89,6 +90,7 @@ const (
|
|
|
const (
|
|
const (
|
|
|
ELECTIONTIMTOUT = 200 * time.Millisecond
|
|
ELECTIONTIMTOUT = 200 * time.Millisecond
|
|
|
HEARTBEATTIMEOUT = 50 * time.Millisecond
|
|
HEARTBEATTIMEOUT = 50 * time.Millisecond
|
|
|
|
|
+ HTTPTIMEOUT = time.Second
|
|
|
)
|
|
)
|
|
|
|
|
|
|
|
//------------------------------------------------------------------------------
|
|
//------------------------------------------------------------------------------
|
|
@@ -263,12 +265,22 @@ func createTransporter(st int) transporter {
|
|
|
|
|
|
|
|
switch st {
|
|
switch st {
|
|
|
case HTTP:
|
|
case HTTP:
|
|
|
- t.client = nil
|
|
|
|
|
|
|
+ t.https = false
|
|
|
|
|
+
|
|
|
|
|
+ tr := &http.Transport{
|
|
|
|
|
+ Dial: dialTimeout,
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ t.client = &http.Client{
|
|
|
|
|
+ Transport: tr,
|
|
|
|
|
+ }
|
|
|
return t
|
|
return t
|
|
|
|
|
|
|
|
case HTTPS:
|
|
case HTTPS:
|
|
|
fallthrough
|
|
fallthrough
|
|
|
case HTTPSANDVERIFY:
|
|
case HTTPSANDVERIFY:
|
|
|
|
|
+ t.https = true
|
|
|
|
|
+
|
|
|
tlsCert, err := tls.LoadX509KeyPair(serverCertFile, serverKeyFile)
|
|
tlsCert, err := tls.LoadX509KeyPair(serverCertFile, serverKeyFile)
|
|
|
|
|
|
|
|
if err != nil {
|
|
if err != nil {
|
|
@@ -280,6 +292,7 @@ func createTransporter(st int) transporter {
|
|
|
Certificates: []tls.Certificate{tlsCert},
|
|
Certificates: []tls.Certificate{tlsCert},
|
|
|
InsecureSkipVerify: true,
|
|
InsecureSkipVerify: true,
|
|
|
},
|
|
},
|
|
|
|
|
+ Dial: dialTimeout,
|
|
|
DisableCompression: true,
|
|
DisableCompression: true,
|
|
|
}
|
|
}
|
|
|
|
|
|
|
@@ -291,6 +304,11 @@ func createTransporter(st int) transporter {
|
|
|
return transporter{}
|
|
return transporter{}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+// Dial with timeout
|
|
|
|
|
+func dialTimeout(network, addr string) (net.Conn, error) {
|
|
|
|
|
+ return net.DialTimeout(network, addr, HTTPTIMEOUT)
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
// Start to listen and response raft command
|
|
// Start to listen and response raft command
|
|
|
func startRaftTransport(port int, st int) {
|
|
func startRaftTransport(port int, st int) {
|
|
|
|
|
|