Skip to content

Commit 5037e3f

Browse files
committed
Move the round robin supplier to an internal class
1 parent d81a246 commit 5037e3f

File tree

3 files changed

+19
-61
lines changed

3 files changed

+19
-61
lines changed

vertx-sql-client/src/main/java/io/vertx/sqlclient/impl/Utils.java

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,15 @@
11
package io.vertx.sqlclient.impl;
22

3+
import io.vertx.core.Future;
34
import io.vertx.core.buffer.Buffer;
45
import io.vertx.core.json.JsonArray;
56
import io.vertx.core.json.JsonObject;
67

78
import java.lang.reflect.Array;
89
import java.util.ArrayList;
10+
import java.util.List;
11+
import java.util.concurrent.atomic.AtomicLong;
12+
import java.util.function.Supplier;
913

1014
import static io.vertx.sqlclient.Tuple.JSON_NULL;
1115

@@ -39,4 +43,16 @@ public static Object toJson(Object value) {
3943
return value.toString();
4044
}
4145
}
46+
47+
public static <T> Supplier<Future<T>> roundRobinSupplier(List<T> factories) {
48+
return new Supplier<Future<T>>() {
49+
final AtomicLong idx = new AtomicLong();
50+
@Override
51+
public Future<T> get() {
52+
long val = idx.getAndIncrement();
53+
T f = factories.get((int)val % factories.size());
54+
return Future.succeededFuture(f);
55+
}
56+
};
57+
}
4258
}

vertx-sql-client/src/main/java/io/vertx/sqlclient/spi/ConnectionFactory.java

Lines changed: 0 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -5,66 +5,11 @@
55
import io.vertx.sqlclient.SqlConnectOptions;
66
import io.vertx.sqlclient.SqlConnection;
77

8-
import java.util.ArrayList;
9-
import java.util.List;
10-
import java.util.concurrent.atomic.AtomicInteger;
11-
import java.util.concurrent.atomic.AtomicLong;
12-
import java.util.function.Supplier;
13-
148
/**
159
* A connection factory, can be obtained from {@link Driver#createConnectionFactory}
1610
*/
1711
public interface ConnectionFactory extends Closeable {
1812

19-
static <T> Supplier<Future<T>> roundRobinSupplier(List<T> factories) {
20-
return new Supplier<Future<T>>() {
21-
AtomicLong idx = new AtomicLong();
22-
@Override
23-
public Future<T> get() {
24-
long val = idx.getAndIncrement();
25-
T f = factories.get((int)val % factories.size());
26-
return Future.succeededFuture(f);
27-
}
28-
};
29-
}
30-
31-
/**
32-
* @return a connection factory that connects with a round-robin policy
33-
*/
34-
static ConnectionFactory roundRobinSelector(List<ConnectionFactory> factories) {
35-
if (factories.size() == 1) {
36-
return factories.get(0);
37-
} else {
38-
return new ConnectionFactory() {
39-
int idx = 0;
40-
@Override
41-
public Future<SqlConnection> connect(Context context) {
42-
ConnectionFactory f = factories.get(idx);
43-
idx = (idx + 1) % factories.size();
44-
return f.connect(context);
45-
}
46-
@Override
47-
public Future<SqlConnection> connect(Context context, SqlConnectOptions options) {
48-
ConnectionFactory f = factories.get(idx);
49-
idx = (idx + 1) % factories.size();
50-
return f.connect(context, options);
51-
}
52-
@Override
53-
public void close(Promise<Void> promise) {
54-
List<Future> list = new ArrayList<>(factories.size());
55-
for (ConnectionFactory factory : factories) {
56-
Promise<Void> p = Promise.promise();
57-
factory.close(p);
58-
list.add(p.future());
59-
}
60-
CompositeFuture.all(list)
61-
.<Void>mapEmpty()
62-
.onComplete(promise);
63-
}
64-
};
65-
}
66-
}
67-
6813
default Future<SqlConnection> connect(Context context, Future<? extends SqlConnectOptions> fut) {
6914
// The future might be on any context or context-less
7015
// So we need to use a specific context promise

vertx-sql-client/src/main/java/io/vertx/sqlclient/spi/Driver.java

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -25,10 +25,7 @@
2525
import io.vertx.sqlclient.Pool;
2626
import io.vertx.sqlclient.PoolOptions;
2727
import io.vertx.sqlclient.SqlConnectOptions;
28-
import io.vertx.sqlclient.impl.Connection;
29-
import io.vertx.sqlclient.impl.SingletonSupplier;
30-
import io.vertx.sqlclient.impl.SqlConnectionBase;
31-
import io.vertx.sqlclient.impl.SqlConnectionInternal;
28+
import io.vertx.sqlclient.impl.*;
3229

3330
import java.util.List;
3431
import java.util.function.Supplier;
@@ -100,7 +97,7 @@ default Pool createPool(Vertx vertx, Supplier<? extends Future<? extends SqlConn
10097
* @return the connection pool
10198
*/
10299
default Pool createPool(Vertx vertx, List<? extends SqlConnectOptions> databases, PoolOptions options) {
103-
return createPool(vertx, ConnectionFactory.roundRobinSupplier(databases), options);
100+
return createPool(vertx, Utils.roundRobinSupplier(databases), options);
104101
}
105102

106103
/**
@@ -115,7 +112,7 @@ default Pool createPool(Vertx vertx, List<? extends SqlConnectOptions> databases
115112
* @return the connection pool
116113
*/
117114
default Pool newPool(Vertx vertx, List<? extends SqlConnectOptions> databases, PoolOptions options, CloseFuture closeFuture) {
118-
return newPool(vertx, ConnectionFactory.roundRobinSupplier(databases), options, closeFuture);
115+
return newPool(vertx, Utils.roundRobinSupplier(databases), options, closeFuture);
119116
}
120117

121118
/**

0 commit comments

Comments
 (0)