Skip to content

Commit d2d3769

Browse files
committed
HSEARCH-5464 Remove dependency on ES version class in the client code
1 parent 6136ece commit d2d3769

File tree

4 files changed

+42
-33
lines changed

4 files changed

+42
-33
lines changed

backend/elasticsearch-aws/src/main/java/org/hibernate/search/backend/elasticsearch/aws/impl/ElasticsearchAwsHttpClientConfigurer.java

Lines changed: 26 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,6 @@
44
*/
55
package org.hibernate.search.backend.elasticsearch.aws.impl;
66

7-
import org.hibernate.search.backend.elasticsearch.ElasticsearchDistributionName;
8-
import org.hibernate.search.backend.elasticsearch.ElasticsearchVersion;
97
import org.hibernate.search.backend.elasticsearch.aws.cfg.ElasticsearchAwsBackendSettings;
108
import org.hibernate.search.backend.elasticsearch.aws.cfg.ElasticsearchAwsCredentialsTypeNames;
119
import org.hibernate.search.backend.elasticsearch.aws.logging.impl.AwsLog;
@@ -22,9 +20,11 @@
2220
import software.amazon.awssdk.auth.credentials.AwsCredentialsProvider;
2321
import software.amazon.awssdk.regions.Region;
2422

25-
public class ElasticsearchAwsHttpClientConfigurer implements ElasticsearchHttpClientConfigurer {
23+
import java.util.regex.Pattern;
2624

27-
private static final ConfigurationProperty<Boolean> SIGNING_ENABLED =
25+
public class ElasticsearchAwsHttpClientConfigurer implements ElasticsearchHttpClientConfigurer {
26+
private static final Pattern DISTRIBUTION_NAME_PATTERN = Pattern.compile( "([^\\d]+)?(?:(?<=^)|(?=$)|(?<=.):(?=.))(.+)?" );
27+
private static final ConfigurationProperty<Boolean> SIGNING_ENABLED =
2828
ConfigurationProperty.forKey( ElasticsearchAwsBackendSettings.SIGNING_ENABLED )
2929
.asBoolean()
3030
.withDefault( ElasticsearchAwsBackendSettings.Defaults.SIGNING_ENABLED )
@@ -52,6 +52,11 @@ public class ElasticsearchAwsHttpClientConfigurer implements ElasticsearchHttpCl
5252
.asString()
5353
.build();
5454

55+
static final OptionalConfigurationProperty<String> DISTRIBUTION_NAME =
56+
ConfigurationProperty.forKey( "version" )
57+
.asString()
58+
.build();
59+
5560
@Override
5661
public void configure(ElasticsearchHttpClientConfigurationContext context) {
5762
ConfigurationPropertySource propertySource = context.configurationPropertySource();
@@ -63,17 +68,23 @@ public void configure(ElasticsearchHttpClientConfigurationContext context) {
6368

6469
Region region = REGION.getAndMapOrThrow( propertySource, Region::of, AwsLog.INSTANCE::missingPropertyForSigning );
6570
String service;
66-
switch ( context.configuredVersion().map( ElasticsearchVersion::distribution )
67-
.orElse( ElasticsearchDistributionName.OPENSEARCH ) ) {
68-
case AMAZON_OPENSEARCH_SERVERLESS:
69-
service = "aoss";
70-
break;
71-
case ELASTIC:
72-
case OPENSEARCH:
73-
default:
74-
service = "es";
75-
break;
76-
}
71+
72+
String distributionName = DISTRIBUTION_NAME.getAndTransform(propertySource, v ->
73+
v.map(String::toLowerCase)
74+
.map(DISTRIBUTION_NAME_PATTERN::matcher)
75+
.map(matcher -> {
76+
if (matcher.matches()) {
77+
return matcher.group(1);
78+
}
79+
return null;
80+
}).orElse("opensearch"));
81+
82+
if ("amazon-opensearch-serverless".equals(distributionName)) {
83+
service = "aoss";
84+
} else {
85+
service = "es";
86+
}
87+
7788
AwsCredentialsProvider credentialsProvider = createCredentialsProvider( context.beanResolver(), propertySource );
7889

7990
AwsLog.INSTANCE.signingEnabled( region, service, credentialsProvider );

backend/elasticsearch/src/main/java/org/hibernate/search/backend/elasticsearch/client/ElasticsearchHttpClientConfigurationContext.java

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,9 @@
77
import java.util.Optional;
88

99
import org.hibernate.search.backend.elasticsearch.ElasticsearchVersion;
10+
import org.hibernate.search.backend.elasticsearch.cfg.ElasticsearchBackendSettings;
1011
import org.hibernate.search.engine.cfg.ConfigurationPropertySource;
12+
import org.hibernate.search.engine.cfg.spi.ConfigurationProperty;
1113
import org.hibernate.search.engine.environment.bean.BeanResolver;
1214

1315
import org.apache.http.impl.nio.client.HttpAsyncClientBuilder;
@@ -39,7 +41,15 @@ public interface ElasticsearchHttpClientConfigurationContext {
3941
/**
4042
* @return The version of Elasticsearch/OpenSearch configured on the backend.
4143
* May be empty if not configured explicitly (in which case it will only be known after the client is built).
44+
*
45+
* @deprecated Use the {@link #configurationPropertySource() property source} and inspect the corresponding properties
46+
* (e.g. {@link ElasticsearchBackendSettings#VERSION}) instead.
4247
*/
43-
Optional<ElasticsearchVersion> configuredVersion();
48+
@Deprecated(since = "8.2", forRemoval = true)
49+
default Optional<ElasticsearchVersion> configuredVersion() {
50+
return ConfigurationProperty.forKey(ElasticsearchBackendSettings.VERSION)
51+
.as(ElasticsearchVersion.class, ElasticsearchVersion::of)
52+
.build().get(configurationPropertySource());
53+
}
4454

4555
}

backend/elasticsearch/src/main/java/org/hibernate/search/backend/elasticsearch/client/impl/ElasticsearchClientFactoryImpl.java

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -135,8 +135,7 @@ public class ElasticsearchClientFactoryImpl implements ElasticsearchClientFactor
135135
public ElasticsearchClientImplementor create(BeanResolver beanResolver, ConfigurationPropertySource propertySource,
136136
ThreadProvider threadProvider, String threadNamePrefix,
137137
SimpleScheduledExecutor timeoutExecutorService,
138-
GsonProvider gsonProvider,
139-
Optional<ElasticsearchVersion> configuredVersion) {
138+
GsonProvider gsonProvider) {
140139
Optional<Integer> requestTimeoutMs = REQUEST_TIMEOUT.get( propertySource );
141140
int connectionTimeoutMs = CONNECTION_TIMEOUT.get( propertySource );
142141

@@ -153,7 +152,7 @@ public ElasticsearchClientImplementor create(BeanResolver beanResolver, Configur
153152
ServerUris hosts = ServerUris.fromOptionalStrings( PROTOCOL.get( propertySource ),
154153
HOSTS.get( propertySource ), URIS.get( propertySource ) );
155154
restClientHolder = createClient( beanResolver, propertySource, threadProvider, threadNamePrefix,
156-
configuredVersion, hosts, PATH_PREFIX.get( propertySource ) );
155+
hosts, PATH_PREFIX.get( propertySource ) );
157156
sniffer = createSniffer( propertySource, restClientHolder.get(), hosts );
158157
}
159158

@@ -166,7 +165,6 @@ public ElasticsearchClientImplementor create(BeanResolver beanResolver, Configur
166165

167166
private BeanHolder<? extends RestClient> createClient(BeanResolver beanResolver, ConfigurationPropertySource propertySource,
168167
ThreadProvider threadProvider, String threadNamePrefix,
169-
Optional<ElasticsearchVersion> configuredVersion,
170168
ServerUris hosts, String pathPrefix) {
171169
RestClientBuilder builder = RestClient.builder( hosts.asHostsArray() );
172170
if ( !pathPrefix.isEmpty() ) {
@@ -188,8 +186,7 @@ private BeanHolder<? extends RestClient> createClient(BeanResolver beanResolver,
188186
b,
189187
beanResolver, propertySource,
190188
threadProvider, threadNamePrefix,
191-
configuredVersion, hosts,
192-
httpClientConfigurersHolder.get(), customConfig
189+
hosts, httpClientConfigurersHolder.get(), customConfig
193190
)
194191
)
195192
.build();
@@ -236,7 +233,6 @@ private Sniffer createSniffer(ConfigurationPropertySource propertySource,
236233
private HttpAsyncClientBuilder customizeHttpClientConfig(HttpAsyncClientBuilder builder,
237234
BeanResolver beanResolver, ConfigurationPropertySource propertySource,
238235
ThreadProvider threadProvider, String threadNamePrefix,
239-
Optional<ElasticsearchVersion> configuredVersion,
240236
ServerUris hosts, Iterable<ElasticsearchHttpClientConfigurer> configurers,
241237
Optional<? extends BeanHolder<? extends ElasticsearchHttpClientConfigurer>> customConfig) {
242238
builder.setMaxConnTotal( MAX_TOTAL_CONNECTION.get( propertySource ) )
@@ -270,7 +266,7 @@ private HttpAsyncClientBuilder customizeHttpClientConfig(HttpAsyncClientBuilder
270266
}
271267

272268
ElasticsearchHttpClientConfigurationContextImpl clientConfigurationContext =
273-
new ElasticsearchHttpClientConfigurationContextImpl( beanResolver, propertySource, builder, configuredVersion );
269+
new ElasticsearchHttpClientConfigurationContextImpl( beanResolver, propertySource, builder );
274270

275271
for ( ElasticsearchHttpClientConfigurer configurer : configurers ) {
276272
configurer.configure( clientConfigurationContext );

backend/elasticsearch/src/main/java/org/hibernate/search/backend/elasticsearch/client/impl/ElasticsearchHttpClientConfigurationContextImpl.java

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -18,17 +18,14 @@ final class ElasticsearchHttpClientConfigurationContextImpl
1818
private final BeanResolver beanResolver;
1919
private final ConfigurationPropertySource configurationPropertySource;
2020
private final HttpAsyncClientBuilder clientBuilder;
21-
private final Optional<ElasticsearchVersion> configuredVersion;
2221

2322
ElasticsearchHttpClientConfigurationContextImpl(
2423
BeanResolver beanResolver,
2524
ConfigurationPropertySource configurationPropertySource,
26-
HttpAsyncClientBuilder clientBuilder,
27-
Optional<ElasticsearchVersion> configuredVersion) {
25+
HttpAsyncClientBuilder clientBuilder) {
2826
this.beanResolver = beanResolver;
2927
this.configurationPropertySource = configurationPropertySource;
3028
this.clientBuilder = clientBuilder;
31-
this.configuredVersion = configuredVersion;
3229
}
3330

3431
@Override
@@ -46,9 +43,4 @@ public HttpAsyncClientBuilder clientBuilder() {
4643
return clientBuilder;
4744
}
4845

49-
@Override
50-
public Optional<ElasticsearchVersion> configuredVersion() {
51-
return configuredVersion;
52-
}
53-
5446
}

0 commit comments

Comments
 (0)