diff --git a/jdbc/src/main/java/tech/ydb/jdbc/settings/YdbConfig.java b/jdbc/src/main/java/tech/ydb/jdbc/settings/YdbConfig.java index ee7ae8f..07e666d 100644 --- a/jdbc/src/main/java/tech/ydb/jdbc/settings/YdbConfig.java +++ b/jdbc/src/main/java/tech/ydb/jdbc/settings/YdbConfig.java @@ -202,6 +202,7 @@ public DriverPropertyInfo[] toPropertyInfo() throws SQLException { YdbConnectionProperties.USE_METADATA.toInfo(properties), YdbConnectionProperties.IAM_ENDPOINT.toInfo(properties), YdbConnectionProperties.METADATA_URL.toInfo(properties), + YdbConnectionProperties.GRPC_COMPRESSION.toInfo(properties), YdbClientProperties.KEEP_QUERY_TEXT.toInfo(properties), YdbClientProperties.SESSION_KEEP_ALIVE_TIME.toInfo(properties), diff --git a/jdbc/src/main/java/tech/ydb/jdbc/settings/YdbConnectionProperties.java b/jdbc/src/main/java/tech/ydb/jdbc/settings/YdbConnectionProperties.java index 0e7e8f1..e07584a 100644 --- a/jdbc/src/main/java/tech/ydb/jdbc/settings/YdbConnectionProperties.java +++ b/jdbc/src/main/java/tech/ydb/jdbc/settings/YdbConnectionProperties.java @@ -9,6 +9,7 @@ import tech.ydb.auth.iam.CloudAuthHelper; import tech.ydb.core.auth.StaticCredentials; import tech.ydb.core.grpc.BalancingSettings; +import tech.ydb.core.grpc.GrpcCompression; import tech.ydb.core.grpc.GrpcTransportBuilder; import tech.ydb.jdbc.YdbDriver; @@ -47,6 +48,10 @@ public class YdbConnectionProperties { static final YdbProperty METADATA_URL = YdbProperty.content("metadataURL", "Custom URL for the metadata service authentication"); + static final YdbProperty GRPC_COMPRESSION = YdbProperty.string( + "grpcCompression", "Use specified GRPC compressor (supported only none and gzip)" + ); + private final String username; private final String password; @@ -60,6 +65,7 @@ public class YdbConnectionProperties { private final YdbValue useMetadata; private final YdbValue iamEndpoint; private final YdbValue metadataUrl; + private final YdbValue grpcCompression; public YdbConnectionProperties(YdbConfig config) throws SQLException { this.username = config.getUsername(); @@ -77,6 +83,7 @@ public YdbConnectionProperties(YdbConfig config) throws SQLException { this.useMetadata = USE_METADATA.readValue(props); this.iamEndpoint = IAM_ENDPOINT.readValue(props); this.metadataUrl = METADATA_URL.readValue(props); + this.grpcCompression = GRPC_COMPRESSION.readValue(props); } String getLocalDataCenter() { @@ -175,6 +182,17 @@ public GrpcTransportBuilder applyToGrpcTransport(GrpcTransportBuilder builder) { } } + if (grpcCompression.hasValue()) { + String value = grpcCompression.getValue(); + if ("none".equalsIgnoreCase(value)) { + builder = builder.withGrpcCompression(GrpcCompression.NO_COMPRESSION); + } else if ("gzip".equalsIgnoreCase(value)) { + builder = builder.withGrpcCompression(GrpcCompression.GZIP); + } else { + LOGGER.log(Level.WARNING, "Unknown value for option 'grpcCompression' : {0}", value); + } + } + return builder; } } diff --git a/jdbc/src/test/java/tech/ydb/jdbc/impl/YdbConnectionImplTest.java b/jdbc/src/test/java/tech/ydb/jdbc/impl/YdbConnectionImplTest.java index abacbc2..fe67b21 100644 --- a/jdbc/src/test/java/tech/ydb/jdbc/impl/YdbConnectionImplTest.java +++ b/jdbc/src/test/java/tech/ydb/jdbc/impl/YdbConnectionImplTest.java @@ -40,7 +40,8 @@ public class YdbConnectionImplTest { private static final YdbHelperExtension ydb = new YdbHelperExtension(); @RegisterExtension - private static final JdbcConnectionExtention jdbc = new JdbcConnectionExtention(ydb); + private static final JdbcConnectionExtention jdbc = new JdbcConnectionExtention(ydb) + .withArg("grpcCompression", "gzip"); private static final SqlQueries QUERIES = new SqlQueries("ydb_connection_test"); private static final String SELECT_2_2 = "select 2 + 2"; diff --git a/jdbc/src/test/java/tech/ydb/jdbc/impl/YdbTableConnectionImplTest.java b/jdbc/src/test/java/tech/ydb/jdbc/impl/YdbTableConnectionImplTest.java index 11492c6..e3ddb5e 100644 --- a/jdbc/src/test/java/tech/ydb/jdbc/impl/YdbTableConnectionImplTest.java +++ b/jdbc/src/test/java/tech/ydb/jdbc/impl/YdbTableConnectionImplTest.java @@ -41,7 +41,8 @@ public class YdbTableConnectionImplTest { @RegisterExtension private static final JdbcConnectionExtention jdbc = new JdbcConnectionExtention(ydb) - .withArg("useQueryService", "false"); + .withArg("useQueryService", "false") + .withArg("grpcCompression", "none"); private static final SqlQueries QUERIES = new SqlQueries("ydb_connection_test"); private static final String SELECT_2_2 = "select 2 + 2"; diff --git a/jdbc/src/test/java/tech/ydb/jdbc/settings/YdbDriverProperitesTest.java b/jdbc/src/test/java/tech/ydb/jdbc/settings/YdbDriverProperitesTest.java index 8de9f26..a974c78 100644 --- a/jdbc/src/test/java/tech/ydb/jdbc/settings/YdbDriverProperitesTest.java +++ b/jdbc/src/test/java/tech/ydb/jdbc/settings/YdbDriverProperitesTest.java @@ -316,6 +316,7 @@ static DriverPropertyInfo[] defaultPropertyInfo(@Nullable String localDatacenter new DriverPropertyInfo("useMetadata", ""), new DriverPropertyInfo("iamEndpoint", ""), new DriverPropertyInfo("metadataURL", ""), + new DriverPropertyInfo("grpcCompression", ""), new DriverPropertyInfo("keepQueryText", ""), new DriverPropertyInfo("sessionKeepAliveTime", ""), new DriverPropertyInfo("sessionMaxIdleTime", ""), @@ -360,6 +361,7 @@ static DriverPropertyInfo[] customizedPropertyInfo() { new DriverPropertyInfo("useMetadata", "true"), new DriverPropertyInfo("iamEndpoint", "iam.endpoint.com"), new DriverPropertyInfo("metadataURL", "https://metadata.com"), + new DriverPropertyInfo("grpcCompression", "gzip"), new DriverPropertyInfo("keepQueryText", "true"), new DriverPropertyInfo("sessionKeepAliveTime", "15m"), new DriverPropertyInfo("sessionMaxIdleTime", "5m"),