|
|
|
package store
|
|
|
|
|
|
|
|
import (
|
|
|
|
"net"
|
|
|
|
"time"
|
|
|
|
|
|
|
|
"github.com/hashicorp/raft"
|
|
|
|
)
|
|
|
|
|
|
|
|
// Listener is the interface expected by the Store for Transports.
|
|
|
|
type Listener interface {
|
|
|
|
net.Listener
|
|
|
|
Dial(address string, timeout time.Duration) (net.Conn, error)
|
|
|
|
}
|
|
|
|
|
|
|
|
// Transport is the network service provided to Raft, and wraps a Listener.
|
|
|
|
type Transport struct {
|
|
|
|
ln Listener
|
|
|
|
}
|
|
|
|
|
|
|
|
// NewTransport returns an initialized Transport.
|
|
|
|
func NewTransport(ln Listener) *Transport {
|
|
|
|
return &Transport{
|
|
|
|
ln: ln,
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// Dial creates a new network connection.
|
|
|
|
func (t *Transport) Dial(addr raft.ServerAddress, timeout time.Duration) (net.Conn, error) {
|
|
|
|
return t.ln.Dial(string(addr), timeout)
|
|
|
|
}
|
|
|
|
|
|
|
|
// Accept waits for the next connection.
|
|
|
|
func (t *Transport) Accept() (net.Conn, error) {
|
|
|
|
return t.ln.Accept()
|
|
|
|
}
|
|
|
|
|
|
|
|
// Close closes the transport
|
|
|
|
func (t *Transport) Close() error {
|
|
|
|
return t.ln.Close()
|
|
|
|
}
|
|
|
|
|
|
|
|
// Addr returns the binding address of the transport.
|
|
|
|
func (t *Transport) Addr() net.Addr {
|
|
|
|
return t.ln.Addr()
|
|
|
|
}
|
|
|
|
|
|
|
|
/// ADD GZIP INTERCEPT FOR SNAPSHOTS
|