Skip to content

Commit e35a85c

Browse files
authored
Support preferable location for connections (#121)
1 parent 3e2a5d7 commit e35a85c

File tree

3 files changed

+53
-2
lines changed

3 files changed

+53
-2
lines changed

repository-ydb-v2/src/main/java/tech/ydb/yoj/repository/ydb/YdbConfig.java

+42
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
package tech.ydb.yoj.repository.ydb;
22

33
import com.google.common.net.HostAndPort;
4+
import lombok.AccessLevel;
5+
import lombok.AllArgsConstructor;
46
import lombok.Builder;
57
import lombok.NonNull;
68
import lombok.Value;
@@ -26,6 +28,7 @@ public static YdbConfig createForTesting(String host, int port, String tablespac
2628
database,
2729
null,
2830
HostAndPort.fromParts(host, port),
31+
null,
2932
SESSION_CREATE_TIMEOUT_DEFAULT,
3033
SESSION_CREATE_RETRY_COUNT_DEFAULT,
3134
SESSION_KEEP_ALIVE_TIME_DEFAULT,
@@ -61,6 +64,9 @@ public static YdbConfig createForTesting(String host, int port, String tablespac
6164
@With
6265
HostAndPort hostAndPort;
6366

67+
@With
68+
BalancingConfig balancingConfig;
69+
6470
@With
6571
Duration sessionCreationTimeout;
6672
@With
@@ -136,4 +142,40 @@ public Duration getTcpKeepaliveTimeout() {
136142
public boolean isUseSingleChannelTransport() {
137143
return Optional.ofNullable(useSingleChannelTransport).orElse(false);
138144
}
145+
146+
@Value
147+
@AllArgsConstructor(access = AccessLevel.PRIVATE)
148+
public static class BalancingConfig {
149+
Policy policy;
150+
String preferableLocation;
151+
152+
/**
153+
* Use all available cluster nodes regardless datacenter locality
154+
*/
155+
static BalancingConfig useAllNodes() {
156+
return new BalancingConfig(Policy.USE_ALL_NODES, null);
157+
}
158+
159+
/**
160+
* Use preferable location (data center)
161+
*
162+
* @param preferableLocation a name of location
163+
*/
164+
static BalancingConfig usePreferableLocation(@NonNull String preferableLocation) {
165+
return new BalancingConfig(Policy.USE_PREFERABLE_LOCATION, preferableLocation);
166+
}
167+
168+
/**
169+
* Detecting of local DC by the latency measuring
170+
*/
171+
static BalancingConfig detectLocalDc() {
172+
return new BalancingConfig(Policy.DETECT_LOCAL_DC, null);
173+
}
174+
175+
public enum Policy {
176+
USE_ALL_NODES,
177+
USE_PREFERABLE_LOCATION,
178+
DETECT_LOCAL_DC,
179+
}
180+
}
139181
}

repository-ydb-v2/src/main/java/tech/ydb/yoj/repository/ydb/YdbRepository.java

+11
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
import org.slf4j.LoggerFactory;
1111
import tech.ydb.auth.AuthProvider;
1212
import tech.ydb.auth.NopAuthProvider;
13+
import tech.ydb.core.grpc.BalancingSettings;
1314
import tech.ydb.core.grpc.GrpcTransport;
1415
import tech.ydb.core.grpc.GrpcTransportBuilder;
1516
import tech.ydb.core.impl.SingleChannelTransport;
@@ -117,6 +118,16 @@ private static GrpcTransportBuilder makeGrpcTransportBuilder(@NonNull YdbConfig
117118
throw new IllegalArgumentException("one of [discoveryEndpoint, hostAndPort] must be set");
118119
}
119120

121+
if (config.getBalancingConfig() != null) {
122+
transportBuilder.withBalancingSettings(
123+
switch (config.getBalancingConfig().getPolicy()) {
124+
case USE_ALL_NODES -> BalancingSettings.fromPolicy(BalancingSettings.Policy.USE_ALL_NODES);
125+
case USE_PREFERABLE_LOCATION -> BalancingSettings.fromLocation(config.getBalancingConfig().getPreferableLocation());
126+
case DETECT_LOCAL_DC -> BalancingSettings.detectLocalDs();
127+
}
128+
);
129+
}
130+
120131
if (config.isUseTLS()) {
121132
if (config.isUseTrustStore()) {
122133
transportBuilder.withSecureConnection();

repository-ydb-v2/src/main/java/tech/ydb/yoj/repository/ydb/yql/YqlOrderBy.java

-2
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,7 @@
1717

1818
import static java.lang.String.format;
1919
import static java.util.Arrays.stream;
20-
import static java.util.Collections.singletonList;
2120
import static java.util.stream.Collectors.joining;
22-
import static java.util.stream.Collectors.toList;
2321
import static java.util.stream.Stream.concat;
2422
import static tech.ydb.yoj.repository.ydb.yql.YqlOrderBy.SortOrder.ASC;
2523
import static tech.ydb.yoj.repository.ydb.yql.YqlOrderBy.SortOrder.DESC;

0 commit comments

Comments
 (0)