mirror of https://github.com/go-redis/redis.git
Merge pull request #840 from go-redis/fix/universal-options
Add missing options to UniversalOptions
This commit is contained in:
commit
03f059067f
|
@ -54,10 +54,11 @@ type ClusterOptions struct {
|
||||||
|
|
||||||
OnConnect func(*Conn) error
|
OnConnect func(*Conn) error
|
||||||
|
|
||||||
|
Password string
|
||||||
|
|
||||||
MaxRetries int
|
MaxRetries int
|
||||||
MinRetryBackoff time.Duration
|
MinRetryBackoff time.Duration
|
||||||
MaxRetryBackoff time.Duration
|
MaxRetryBackoff time.Duration
|
||||||
Password string
|
|
||||||
|
|
||||||
DialTimeout time.Duration
|
DialTimeout time.Duration
|
||||||
ReadTimeout time.Duration
|
ReadTimeout time.Duration
|
||||||
|
|
|
@ -0,0 +1,65 @@
|
||||||
|
package redis
|
||||||
|
|
||||||
|
import (
|
||||||
|
. "github.com/onsi/ginkgo"
|
||||||
|
. "github.com/onsi/gomega"
|
||||||
|
)
|
||||||
|
|
||||||
|
var _ = Describe("newClusterState", func() {
|
||||||
|
var state *clusterState
|
||||||
|
|
||||||
|
createClusterState := func(slots []ClusterSlot) *clusterState {
|
||||||
|
nodes := newClusterNodes(&ClusterOptions{})
|
||||||
|
state, err := newClusterState(nodes, slots, "10.10.10.10:1234")
|
||||||
|
Expect(err).NotTo(HaveOccurred())
|
||||||
|
return state
|
||||||
|
}
|
||||||
|
|
||||||
|
Describe("sorting", func() {
|
||||||
|
BeforeEach(func() {
|
||||||
|
state = createClusterState([]ClusterSlot{{
|
||||||
|
Start: 1000,
|
||||||
|
End: 1999,
|
||||||
|
}, {
|
||||||
|
Start: 0,
|
||||||
|
End: 999,
|
||||||
|
}, {
|
||||||
|
Start: 2000,
|
||||||
|
End: 2999,
|
||||||
|
}})
|
||||||
|
})
|
||||||
|
|
||||||
|
It("sorts slots", func() {
|
||||||
|
Expect(state.slots).To(Equal([]*clusterSlot{
|
||||||
|
{start: 0, end: 999, nodes: nil},
|
||||||
|
{start: 1000, end: 1999, nodes: nil},
|
||||||
|
{start: 2000, end: 2999, nodes: nil},
|
||||||
|
}))
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
Describe("loopback", func() {
|
||||||
|
BeforeEach(func() {
|
||||||
|
state = createClusterState([]ClusterSlot{{
|
||||||
|
Nodes: []ClusterNode{{Addr: "127.0.0.1:7001"}},
|
||||||
|
}, {
|
||||||
|
Nodes: []ClusterNode{{Addr: "127.0.0.1:7002"}},
|
||||||
|
}, {
|
||||||
|
Nodes: []ClusterNode{{Addr: "1.2.3.4:1234"}},
|
||||||
|
}, {
|
||||||
|
Nodes: []ClusterNode{{Addr: ":1234"}},
|
||||||
|
}})
|
||||||
|
})
|
||||||
|
|
||||||
|
It("replaces loopback hosts in addresses", func() {
|
||||||
|
slotAddr := func(slot *clusterSlot) string {
|
||||||
|
return slot.nodes[0].Client.Options().Addr
|
||||||
|
}
|
||||||
|
|
||||||
|
Expect(slotAddr(state.slots[0])).To(Equal("10.10.10.10:7001"))
|
||||||
|
Expect(slotAddr(state.slots[1])).To(Equal("10.10.10.10:7002"))
|
||||||
|
Expect(slotAddr(state.slots[2])).To(Equal("1.2.3.4:1234"))
|
||||||
|
Expect(slotAddr(state.slots[3])).To(Equal(":1234"))
|
||||||
|
})
|
||||||
|
})
|
||||||
|
})
|
|
@ -29,13 +29,17 @@ type FailoverOptions struct {
|
||||||
Password string
|
Password string
|
||||||
DB int
|
DB int
|
||||||
|
|
||||||
MaxRetries int
|
MaxRetries int
|
||||||
|
MinRetryBackoff time.Duration
|
||||||
|
MaxRetryBackoff time.Duration
|
||||||
|
|
||||||
DialTimeout time.Duration
|
DialTimeout time.Duration
|
||||||
ReadTimeout time.Duration
|
ReadTimeout time.Duration
|
||||||
WriteTimeout time.Duration
|
WriteTimeout time.Duration
|
||||||
|
|
||||||
PoolSize int
|
PoolSize int
|
||||||
|
MinIdleConns int
|
||||||
|
MaxConnAge time.Duration
|
||||||
PoolTimeout time.Duration
|
PoolTimeout time.Duration
|
||||||
IdleTimeout time.Duration
|
IdleTimeout time.Duration
|
||||||
IdleCheckFrequency time.Duration
|
IdleCheckFrequency time.Duration
|
||||||
|
|
106
universal.go
106
universal.go
|
@ -12,35 +12,38 @@ type UniversalOptions struct {
|
||||||
// of cluster/sentinel nodes.
|
// of cluster/sentinel nodes.
|
||||||
Addrs []string
|
Addrs []string
|
||||||
|
|
||||||
// The sentinel master name.
|
|
||||||
// Only failover clients.
|
|
||||||
MasterName string
|
|
||||||
|
|
||||||
// Database to be selected after connecting to the server.
|
// Database to be selected after connecting to the server.
|
||||||
// Only single-node and failover clients.
|
// Only single-node and failover clients.
|
||||||
DB int
|
DB int
|
||||||
|
|
||||||
// Only cluster clients.
|
// Common options.
|
||||||
|
|
||||||
// Enables read only queries on slave nodes.
|
|
||||||
ReadOnly bool
|
|
||||||
|
|
||||||
MaxRedirects int
|
|
||||||
RouteByLatency bool
|
|
||||||
|
|
||||||
// Common options
|
|
||||||
|
|
||||||
OnConnect func(*Conn) error
|
OnConnect func(*Conn) error
|
||||||
MaxRetries int
|
|
||||||
Password string
|
Password string
|
||||||
|
MaxRetries int
|
||||||
|
MinRetryBackoff time.Duration
|
||||||
|
MaxRetryBackoff time.Duration
|
||||||
DialTimeout time.Duration
|
DialTimeout time.Duration
|
||||||
ReadTimeout time.Duration
|
ReadTimeout time.Duration
|
||||||
WriteTimeout time.Duration
|
WriteTimeout time.Duration
|
||||||
PoolSize int
|
PoolSize int
|
||||||
|
MinIdleConns int
|
||||||
|
MaxConnAge time.Duration
|
||||||
PoolTimeout time.Duration
|
PoolTimeout time.Duration
|
||||||
IdleTimeout time.Duration
|
IdleTimeout time.Duration
|
||||||
IdleCheckFrequency time.Duration
|
IdleCheckFrequency time.Duration
|
||||||
TLSConfig *tls.Config
|
TLSConfig *tls.Config
|
||||||
|
|
||||||
|
// Only cluster clients.
|
||||||
|
|
||||||
|
MaxRedirects int
|
||||||
|
ReadOnly bool
|
||||||
|
RouteByLatency bool
|
||||||
|
RouteRandomly bool
|
||||||
|
|
||||||
|
// The sentinel master name.
|
||||||
|
// Only failover clients.
|
||||||
|
MasterName string
|
||||||
}
|
}
|
||||||
|
|
||||||
func (o *UniversalOptions) cluster() *ClusterOptions {
|
func (o *UniversalOptions) cluster() *ClusterOptions {
|
||||||
|
@ -49,22 +52,31 @@ func (o *UniversalOptions) cluster() *ClusterOptions {
|
||||||
}
|
}
|
||||||
|
|
||||||
return &ClusterOptions{
|
return &ClusterOptions{
|
||||||
Addrs: o.Addrs,
|
Addrs: o.Addrs,
|
||||||
MaxRedirects: o.MaxRedirects,
|
OnConnect: o.OnConnect,
|
||||||
RouteByLatency: o.RouteByLatency,
|
|
||||||
ReadOnly: o.ReadOnly,
|
Password: o.Password,
|
||||||
|
|
||||||
|
MaxRedirects: o.MaxRedirects,
|
||||||
|
ReadOnly: o.ReadOnly,
|
||||||
|
RouteByLatency: o.RouteByLatency,
|
||||||
|
RouteRandomly: o.RouteRandomly,
|
||||||
|
|
||||||
|
MaxRetries: o.MaxRetries,
|
||||||
|
MinRetryBackoff: o.MinRetryBackoff,
|
||||||
|
MaxRetryBackoff: o.MaxRetryBackoff,
|
||||||
|
|
||||||
OnConnect: o.OnConnect,
|
|
||||||
MaxRetries: o.MaxRetries,
|
|
||||||
Password: o.Password,
|
|
||||||
DialTimeout: o.DialTimeout,
|
DialTimeout: o.DialTimeout,
|
||||||
ReadTimeout: o.ReadTimeout,
|
ReadTimeout: o.ReadTimeout,
|
||||||
WriteTimeout: o.WriteTimeout,
|
WriteTimeout: o.WriteTimeout,
|
||||||
PoolSize: o.PoolSize,
|
PoolSize: o.PoolSize,
|
||||||
|
MinIdleConns: o.MinIdleConns,
|
||||||
|
MaxConnAge: o.MaxConnAge,
|
||||||
PoolTimeout: o.PoolTimeout,
|
PoolTimeout: o.PoolTimeout,
|
||||||
IdleTimeout: o.IdleTimeout,
|
IdleTimeout: o.IdleTimeout,
|
||||||
IdleCheckFrequency: o.IdleCheckFrequency,
|
IdleCheckFrequency: o.IdleCheckFrequency,
|
||||||
TLSConfig: o.TLSConfig,
|
|
||||||
|
TLSConfig: o.TLSConfig,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -76,19 +88,27 @@ func (o *UniversalOptions) failover() *FailoverOptions {
|
||||||
return &FailoverOptions{
|
return &FailoverOptions{
|
||||||
SentinelAddrs: o.Addrs,
|
SentinelAddrs: o.Addrs,
|
||||||
MasterName: o.MasterName,
|
MasterName: o.MasterName,
|
||||||
DB: o.DB,
|
OnConnect: o.OnConnect,
|
||||||
|
|
||||||
|
DB: o.DB,
|
||||||
|
Password: o.Password,
|
||||||
|
|
||||||
|
MaxRetries: o.MaxRetries,
|
||||||
|
MinRetryBackoff: o.MinRetryBackoff,
|
||||||
|
MaxRetryBackoff: o.MaxRetryBackoff,
|
||||||
|
|
||||||
|
DialTimeout: o.DialTimeout,
|
||||||
|
ReadTimeout: o.ReadTimeout,
|
||||||
|
WriteTimeout: o.WriteTimeout,
|
||||||
|
|
||||||
OnConnect: o.OnConnect,
|
|
||||||
MaxRetries: o.MaxRetries,
|
|
||||||
Password: o.Password,
|
|
||||||
DialTimeout: o.DialTimeout,
|
|
||||||
ReadTimeout: o.ReadTimeout,
|
|
||||||
WriteTimeout: o.WriteTimeout,
|
|
||||||
PoolSize: o.PoolSize,
|
PoolSize: o.PoolSize,
|
||||||
|
MinIdleConns: o.MinIdleConns,
|
||||||
|
MaxConnAge: o.MaxConnAge,
|
||||||
PoolTimeout: o.PoolTimeout,
|
PoolTimeout: o.PoolTimeout,
|
||||||
IdleTimeout: o.IdleTimeout,
|
IdleTimeout: o.IdleTimeout,
|
||||||
IdleCheckFrequency: o.IdleCheckFrequency,
|
IdleCheckFrequency: o.IdleCheckFrequency,
|
||||||
TLSConfig: o.TLSConfig,
|
|
||||||
|
TLSConfig: o.TLSConfig,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -99,20 +119,28 @@ func (o *UniversalOptions) simple() *Options {
|
||||||
}
|
}
|
||||||
|
|
||||||
return &Options{
|
return &Options{
|
||||||
Addr: addr,
|
Addr: addr,
|
||||||
DB: o.DB,
|
OnConnect: o.OnConnect,
|
||||||
|
|
||||||
|
DB: o.DB,
|
||||||
|
Password: o.Password,
|
||||||
|
|
||||||
|
MaxRetries: o.MaxRetries,
|
||||||
|
MinRetryBackoff: o.MinRetryBackoff,
|
||||||
|
MaxRetryBackoff: o.MaxRetryBackoff,
|
||||||
|
|
||||||
|
DialTimeout: o.DialTimeout,
|
||||||
|
ReadTimeout: o.ReadTimeout,
|
||||||
|
WriteTimeout: o.WriteTimeout,
|
||||||
|
|
||||||
OnConnect: o.OnConnect,
|
|
||||||
MaxRetries: o.MaxRetries,
|
|
||||||
Password: o.Password,
|
|
||||||
DialTimeout: o.DialTimeout,
|
|
||||||
ReadTimeout: o.ReadTimeout,
|
|
||||||
WriteTimeout: o.WriteTimeout,
|
|
||||||
PoolSize: o.PoolSize,
|
PoolSize: o.PoolSize,
|
||||||
|
MinIdleConns: o.MinIdleConns,
|
||||||
|
MaxConnAge: o.MaxConnAge,
|
||||||
PoolTimeout: o.PoolTimeout,
|
PoolTimeout: o.PoolTimeout,
|
||||||
IdleTimeout: o.IdleTimeout,
|
IdleTimeout: o.IdleTimeout,
|
||||||
IdleCheckFrequency: o.IdleCheckFrequency,
|
IdleCheckFrequency: o.IdleCheckFrequency,
|
||||||
TLSConfig: o.TLSConfig,
|
|
||||||
|
TLSConfig: o.TLSConfig,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue