Skip to content

Commit 8c9fee8

Browse files
authored
Merge pull request #218 from arangodb/feature/load-balancing-tests
Load balancing tests
2 parents 4c5a2d3 + 289e776 commit 8c9fee8

17 files changed

+393
-49
lines changed

pkg/deployment/client_cache.go

+2-1
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,8 @@ func (cc *clientCache) GetDatabase(ctx context.Context) (driver.Client, error) {
8383
}
8484

8585
// Not found, create a new client
86-
c, err := arangod.CreateArangodDatabaseClient(ctx, cc.kubecli.CoreV1(), cc.apiObject)
86+
shortTimeout := false
87+
c, err := arangod.CreateArangodDatabaseClient(ctx, cc.kubecli.CoreV1(), cc.apiObject, shortTimeout)
8788
if err != nil {
8889
return nil, maskAny(err)
8990
}

pkg/util/arangod/client.go

+42-10
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ var (
6565
Proxy: nhttp.ProxyFromEnvironment,
6666
DialContext: (&net.Dialer{
6767
Timeout: 30 * time.Second,
68-
KeepAlive: 30 * time.Second,
68+
KeepAlive: 90 * time.Second,
6969
DualStack: true,
7070
}).DialContext,
7171
MaxIdleConns: 100,
@@ -77,7 +77,7 @@ var (
7777
Proxy: nhttp.ProxyFromEnvironment,
7878
DialContext: (&net.Dialer{
7979
Timeout: 30 * time.Second,
80-
KeepAlive: 30 * time.Second,
80+
KeepAlive: 90 * time.Second,
8181
DualStack: true,
8282
}).DialContext,
8383
MaxIdleConns: 100,
@@ -86,24 +86,49 @@ var (
8686
ExpectContinueTimeout: 1 * time.Second,
8787
TLSClientConfig: &tls.Config{InsecureSkipVerify: true},
8888
}
89+
sharedHTTPTransportShortTimeout = &nhttp.Transport{
90+
Proxy: nhttp.ProxyFromEnvironment,
91+
DialContext: (&net.Dialer{
92+
Timeout: 30 * time.Second,
93+
KeepAlive: 100 * time.Millisecond,
94+
DualStack: true,
95+
}).DialContext,
96+
MaxIdleConns: 100,
97+
IdleConnTimeout: 100 * time.Millisecond,
98+
TLSHandshakeTimeout: 10 * time.Second,
99+
ExpectContinueTimeout: 1 * time.Second,
100+
}
101+
sharedHTTPSTransportShortTimeout = &nhttp.Transport{
102+
Proxy: nhttp.ProxyFromEnvironment,
103+
DialContext: (&net.Dialer{
104+
Timeout: 30 * time.Second,
105+
KeepAlive: 100 * time.Millisecond,
106+
DualStack: true,
107+
}).DialContext,
108+
MaxIdleConns: 100,
109+
IdleConnTimeout: 100 * time.Millisecond,
110+
TLSHandshakeTimeout: 10 * time.Second,
111+
ExpectContinueTimeout: 1 * time.Second,
112+
TLSClientConfig: &tls.Config{InsecureSkipVerify: true},
113+
}
89114
)
90115

91116
// CreateArangodClient creates a go-driver client for a specific member in the given group.
92117
func CreateArangodClient(ctx context.Context, cli corev1.CoreV1Interface, apiObject *api.ArangoDeployment, group api.ServerGroup, id string) (driver.Client, error) {
93118
// Create connection
94119
dnsName := k8sutil.CreatePodDNSName(apiObject, group.AsRole(), id)
95-
c, err := createArangodClientForDNSName(ctx, cli, apiObject, dnsName)
120+
c, err := createArangodClientForDNSName(ctx, cli, apiObject, dnsName, false)
96121
if err != nil {
97122
return nil, maskAny(err)
98123
}
99124
return c, nil
100125
}
101126

102127
// CreateArangodDatabaseClient creates a go-driver client for accessing the entire cluster (or single server).
103-
func CreateArangodDatabaseClient(ctx context.Context, cli corev1.CoreV1Interface, apiObject *api.ArangoDeployment) (driver.Client, error) {
128+
func CreateArangodDatabaseClient(ctx context.Context, cli corev1.CoreV1Interface, apiObject *api.ArangoDeployment, shortTimeout bool) (driver.Client, error) {
104129
// Create connection
105130
dnsName := k8sutil.CreateDatabaseClientServiceDNSName(apiObject)
106-
c, err := createArangodClientForDNSName(ctx, cli, apiObject, dnsName)
131+
c, err := createArangodClientForDNSName(ctx, cli, apiObject, dnsName, shortTimeout)
107132
if err != nil {
108133
return nil, maskAny(err)
109134
}
@@ -117,7 +142,8 @@ func CreateArangodAgencyClient(ctx context.Context, cli corev1.CoreV1Interface,
117142
dnsName := k8sutil.CreatePodDNSName(apiObject, api.ServerGroupAgents.AsRole(), m.ID)
118143
dnsNames = append(dnsNames, dnsName)
119144
}
120-
connConfig, err := createArangodHTTPConfigForDNSNames(ctx, cli, apiObject, dnsNames)
145+
shortTimeout := false
146+
connConfig, err := createArangodHTTPConfigForDNSNames(ctx, cli, apiObject, dnsNames, shortTimeout)
121147
if err != nil {
122148
return nil, maskAny(err)
123149
}
@@ -147,16 +173,16 @@ func CreateArangodAgencyClient(ctx context.Context, cli corev1.CoreV1Interface,
147173
func CreateArangodImageIDClient(ctx context.Context, deployment k8sutil.APIObject, role, id string) (driver.Client, error) {
148174
// Create connection
149175
dnsName := k8sutil.CreatePodDNSName(deployment, role, id)
150-
c, err := createArangodClientForDNSName(ctx, nil, nil, dnsName)
176+
c, err := createArangodClientForDNSName(ctx, nil, nil, dnsName, false)
151177
if err != nil {
152178
return nil, maskAny(err)
153179
}
154180
return c, nil
155181
}
156182

157183
// CreateArangodClientForDNSName creates a go-driver client for a given DNS name.
158-
func createArangodClientForDNSName(ctx context.Context, cli corev1.CoreV1Interface, apiObject *api.ArangoDeployment, dnsName string) (driver.Client, error) {
159-
connConfig, err := createArangodHTTPConfigForDNSNames(ctx, cli, apiObject, []string{dnsName})
184+
func createArangodClientForDNSName(ctx context.Context, cli corev1.CoreV1Interface, apiObject *api.ArangoDeployment, dnsName string, shortTimeout bool) (driver.Client, error) {
185+
connConfig, err := createArangodHTTPConfigForDNSNames(ctx, cli, apiObject, []string{dnsName}, shortTimeout)
160186
if err != nil {
161187
return nil, maskAny(err)
162188
}
@@ -183,12 +209,18 @@ func createArangodClientForDNSName(ctx context.Context, cli corev1.CoreV1Interfa
183209
}
184210

185211
// createArangodHTTPConfigForDNSNames creates a go-driver HTTP connection config for a given DNS names.
186-
func createArangodHTTPConfigForDNSNames(ctx context.Context, cli corev1.CoreV1Interface, apiObject *api.ArangoDeployment, dnsNames []string) (http.ConnectionConfig, error) {
212+
func createArangodHTTPConfigForDNSNames(ctx context.Context, cli corev1.CoreV1Interface, apiObject *api.ArangoDeployment, dnsNames []string, shortTimeout bool) (http.ConnectionConfig, error) {
187213
scheme := "http"
188214
transport := sharedHTTPTransport
215+
if shortTimeout {
216+
transport = sharedHTTPTransportShortTimeout
217+
}
189218
if apiObject != nil && apiObject.Spec.IsSecure() {
190219
scheme = "https"
191220
transport = sharedHTTPSTransport
221+
if shortTimeout {
222+
transport = sharedHTTPSTransportShortTimeout
223+
}
192224
}
193225
connConfig := http.ConnectionConfig{
194226
Transport: transport,

tests/auth_test.go

+6-6
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ func TestAuthenticationSingleDefaultSecret(t *testing.T) {
6969

7070
// Create a database client
7171
ctx := arangod.WithRequireAuthentication(context.Background())
72-
client := mustNewArangodDatabaseClient(ctx, kubecli, apiObject, t)
72+
client := mustNewArangodDatabaseClient(ctx, kubecli, apiObject, t, nil)
7373

7474
// Wait for single server available
7575
if err := waitUntilVersionUp(client, nil); err != nil {
@@ -118,7 +118,7 @@ func TestAuthenticationSingleCustomSecret(t *testing.T) {
118118

119119
// Create a database client
120120
ctx := arangod.WithRequireAuthentication(context.Background())
121-
client := mustNewArangodDatabaseClient(ctx, kubecli, apiObject, t)
121+
client := mustNewArangodDatabaseClient(ctx, kubecli, apiObject, t, nil)
122122

123123
// Wait for single server available
124124
if err := waitUntilVersionUp(client, nil); err != nil {
@@ -165,7 +165,7 @@ func TestAuthenticationNoneSingle(t *testing.T) {
165165

166166
// Create a database client
167167
ctx := arangod.WithSkipAuthentication(context.Background())
168-
client := mustNewArangodDatabaseClient(ctx, kubecli, apiObject, t)
168+
client := mustNewArangodDatabaseClient(ctx, kubecli, apiObject, t, nil)
169169

170170
// Wait for single server available
171171
if err := waitUntilVersionUp(client, nil); err != nil {
@@ -208,7 +208,7 @@ func TestAuthenticationClusterDefaultSecret(t *testing.T) {
208208

209209
// Create a database client
210210
ctx := arangod.WithRequireAuthentication(context.Background())
211-
client := mustNewArangodDatabaseClient(ctx, kubecli, apiObject, t)
211+
client := mustNewArangodDatabaseClient(ctx, kubecli, apiObject, t, nil)
212212

213213
// Wait for single server available
214214
if err := waitUntilVersionUp(client, nil); err != nil {
@@ -257,7 +257,7 @@ func TestAuthenticationClusterCustomSecret(t *testing.T) {
257257

258258
// Create a database client
259259
ctx := arangod.WithRequireAuthentication(context.Background())
260-
client := mustNewArangodDatabaseClient(ctx, kubecli, apiObject, t)
260+
client := mustNewArangodDatabaseClient(ctx, kubecli, apiObject, t, nil)
261261

262262
// Wait for single server available
263263
if err := waitUntilVersionUp(client, nil); err != nil {
@@ -304,7 +304,7 @@ func TestAuthenticationNoneCluster(t *testing.T) {
304304

305305
// Create a database client
306306
ctx := arangod.WithSkipAuthentication(context.Background())
307-
client := mustNewArangodDatabaseClient(ctx, kubecli, apiObject, t)
307+
client := mustNewArangodDatabaseClient(ctx, kubecli, apiObject, t, nil)
308308

309309
// Wait for single server available
310310
if err := waitUntilVersionUp(client, nil); err != nil {

tests/change_args_test.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ func TestChangeArgsAgents(t *testing.T) {
6666

6767
// Create a database client
6868
ctx := context.Background()
69-
client := mustNewArangodDatabaseClient(ctx, kubecli, apiObject, t)
69+
client := mustNewArangodDatabaseClient(ctx, kubecli, apiObject, t, nil)
7070

7171
// Wait for single server available
7272
if err := waitUntilVersionUp(client, nil); err != nil {
@@ -145,7 +145,7 @@ func TestChangeArgsDBServer(t *testing.T) {
145145

146146
// Create a database client
147147
ctx := context.Background()
148-
client := mustNewArangodDatabaseClient(ctx, kubecli, apiObject, t)
148+
client := mustNewArangodDatabaseClient(ctx, kubecli, apiObject, t, nil)
149149

150150
// Wait for cluster available
151151
if err := waitUntilVersionUp(client, nil); err != nil {

tests/cursor_test.go

+3-3
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ func TestCursorSingle(t *testing.T) {
6363

6464
// Create a database client
6565
ctx := context.Background()
66-
client := mustNewArangodDatabaseClient(ctx, kubecli, apiObject, t)
66+
client := mustNewArangodDatabaseClient(ctx, kubecli, apiObject, t, nil)
6767

6868
// Wait for single server available
6969
if err := waitUntilVersionUp(client, nil); err != nil {
@@ -107,7 +107,7 @@ func TestCursorActiveFailover(t *testing.T) {
107107

108108
// Create a database client
109109
ctx := context.Background()
110-
client := mustNewArangodDatabaseClient(ctx, kubecli, apiObject, t)
110+
client := mustNewArangodDatabaseClient(ctx, kubecli, apiObject, t, nil)
111111

112112
// Wait for single server available
113113
if err := waitUntilVersionUp(client, nil); err != nil {
@@ -151,7 +151,7 @@ func TestCursorCluster(t *testing.T) {
151151

152152
// Create a database client
153153
ctx := context.Background()
154-
client := mustNewArangodDatabaseClient(ctx, kubecli, apiObject, t)
154+
client := mustNewArangodDatabaseClient(ctx, kubecli, apiObject, t, nil)
155155

156156
// Wait for single server available
157157
if err := waitUntilVersionUp(client, nil); err != nil {

tests/deployments_test.go

+3-3
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,7 @@ func deploymentSubTest(t *testing.T, mode api.DeploymentMode, engine api.Storage
9292

9393
// Create a database client
9494
ctx := context.Background()
95-
DBClient := mustNewArangodDatabaseClient(ctx, kubecli, deployment, t)
95+
DBClient := mustNewArangodDatabaseClient(ctx, kubecli, deployment, t, nil)
9696
require.NoError(t, waitUntilArangoDeploymentHealthy(deployment, DBClient, kubecli, ""), fmt.Sprintf("Deployment not healthy in time: %v", err))
9797

9898
// Cleanup
@@ -142,9 +142,9 @@ func TestMultiDeployment(t *testing.T) {
142142

143143
// Create a database clients
144144
ctx := context.Background()
145-
DBClient1 := mustNewArangodDatabaseClient(ctx, kubecli, deployment1, t)
145+
DBClient1 := mustNewArangodDatabaseClient(ctx, kubecli, deployment1, t, nil)
146146
require.NoError(t, waitUntilArangoDeploymentHealthy(deployment1, DBClient1, kubecli, ""), fmt.Sprintf("Deployment not healthy in time: %v", err))
147-
DBClient2 := mustNewArangodDatabaseClient(ctx, kubecli, deployment2, t)
147+
DBClient2 := mustNewArangodDatabaseClient(ctx, kubecli, deployment2, t, nil)
148148
require.NoError(t, waitUntilArangoDeploymentHealthy(deployment1, DBClient1, kubecli, ""), fmt.Sprintf("Deployment not healthy in time: %v", err))
149149

150150
// Test if we are able to create a collections in both deployments.

tests/immutable_test.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ func TestImmutableFields(t *testing.T) {
6363

6464
// Create a database client
6565
ctx := context.Background()
66-
client := mustNewArangodDatabaseClient(ctx, kubecli, apiObject, t)
66+
client := mustNewArangodDatabaseClient(ctx, kubecli, apiObject, t, nil)
6767

6868
// Wait for single server to be completely ready
6969
if err := waitUntilVersionUp(client, nil); err != nil {

0 commit comments

Comments
 (0)