This repository has been archived by the owner on Feb 11, 2022. It is now read-only.
forked from aerospike/aerospike-client-go
-
Notifications
You must be signed in to change notification settings - Fork 0
/
client_policy.go
157 lines (130 loc) · 5.75 KB
/
client_policy.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
// Copyright 2013-2017 Aerospike, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package aerospike
import (
"crypto/tls"
"time"
)
const defaultIdleTimeout = 14 * time.Second
// ClientPolicy encapsulates parameters for client policy command.
type ClientPolicy struct {
// AuthMode specifies authentication mode used when user/password is defined. It is set to AuthModeInternal by default.
AuthMode AuthMode
// User authentication to cluster. Leave empty for clusters running without restricted access.
User string
// Password authentication to cluster. The password will be stored by the client and sent to server
// in hashed format. Leave empty for clusters running without restricted access.
Password string
// ClusterName sets the expected cluster ID. If not null, server nodes must return this cluster ID in order to
// join the client's view of the cluster. Should only be set when connecting to servers that
// support the "cluster-name" info command. (v3.10+)
ClusterName string //=""
// Initial host connection timeout duration. The timeout when opening a connection
// to the server host for the first time.
Timeout time.Duration //= 30 seconds
// Connection idle timeout. Every time a connection is used, its idle
// deadline will be extended by this duration. When this deadline is reached,
// the connection will be closed and discarded from the connection pool.
IdleTimeout time.Duration //= 14 seconds
// LoginTimeout specifies the timeout for login operation for external authentication such as LDAP.
LoginTimeout time.Duration //= 10 seconds
// ConnectionQueueCache specifies the size of the Connection Queue cache PER NODE.
ConnectionQueueSize int //= 256
// If set to true, will not create a new connection
// to the node if there are already `ConnectionQueueSize` active connections.
LimitConnectionsToQueueSize bool //= true
// Throw exception if host connection fails during addHost().
FailIfNotConnected bool //= true
// TendInterval determines interval for checking for cluster state changes.
// Minimum possible interval is 10 Milliseconds.
TendInterval time.Duration //= 1 second
// A IP translation table is used in cases where different clients
// use different server IP addresses. This may be necessary when
// using clients from both inside and outside a local area
// network. Default is no translation.
// The key is the IP address returned from friend info requests to other servers.
// The value is the real IP address used to connect to the server.
IpMap map[string]string
// UseServicesAlternate determines if the client should use "services-alternate" instead of "services"
// in info request during cluster tending.
//"services-alternate" returns server configured external IP addresses that client
// uses to talk to nodes. "services-alternate" can be used in place of providing a client "ipMap".
// This feature is recommended instead of using the client-side IpMap above.
//
// "services-alternate" is available with Aerospike Server versions >= 3.7.1.
UseServicesAlternate bool // false
// RequestProleReplicas determines if prole replicas should be requested from each server node in the cluster tend goroutine.
// This option is required if there is a need to distribute reads across proles.
// If RequestProleReplicas is enabled, all prole partition maps will be cached on the client which results in
// extra storage multiplied by the replication factor.
// The default is false (only request master replicas and never prole replicas).
RequestProleReplicas bool // false
// TlsConfig specifies TLS secure connection policy for TLS enabled servers.
// For better performance, we suggest preferring the server-side ciphers by
// setting PreferServerCipherSuites = true.
TlsConfig *tls.Config //= nil
// IgnoreOtherSubnetAliases helps to ignore aliases that are outside main subnet
IgnoreOtherSubnetAliases bool //= false
}
// NewClientPolicy generates a new ClientPolicy with default values.
func NewClientPolicy() *ClientPolicy {
return &ClientPolicy{
AuthMode: AuthModeInternal,
Timeout: 30 * time.Second,
IdleTimeout: defaultIdleTimeout,
LoginTimeout: 10 * time.Second,
ConnectionQueueSize: 256,
FailIfNotConnected: true,
TendInterval: time.Second,
LimitConnectionsToQueueSize: true,
RequestProleReplicas: false,
IgnoreOtherSubnetAliases: false,
}
}
// RequiresAuthentication returns true if a USer or Password is set for ClientPolicy.
func (cp *ClientPolicy) RequiresAuthentication() bool {
return (cp.User != "") || (cp.Password != "")
}
func (cp *ClientPolicy) servicesString() string {
if cp.UseServicesAlternate {
return "services-alternate"
}
return "services"
}
func (cp *ClientPolicy) serviceString() string {
if cp.TlsConfig == nil {
if cp.UseServicesAlternate {
return "service-clear-alt"
}
return "service-clear-std"
}
if cp.UseServicesAlternate {
return "service-tls-alt"
}
return "service-tls-std"
}
func (cp *ClientPolicy) peersString() string {
if cp.TlsConfig != nil {
if cp.UseServicesAlternate {
return "peers-tls-alt"
} else {
return "peers-tls-std"
}
}
if cp.UseServicesAlternate {
return "peers-clear-alt"
} else {
return "peers-clear-std"
}
}