diff --git a/.github/workflows/ci-actions.yml b/.github/workflows/ci-actions.yml index a4a7ca1b88099..4e105d8b658ea 100644 --- a/.github/workflows/ci-actions.yml +++ b/.github/workflows/ci-actions.yml @@ -632,7 +632,7 @@ jobs: run: | docker run --rm --publish 9200:9200 --name build-elasticsearch \ -e discovery.type=single-node \ - -d docker.elastic.co/elasticsearch/elasticsearch-oss:7.8.0 + -d docker.elastic.co/elasticsearch/elasticsearch-oss:7.9.0 if: matrix.elasticsearch - uses: actions/checkout@v2 - name: Set up JDK 11 diff --git a/bom/application/pom.xml b/bom/application/pom.xml index 74b9d738a66ad..4a16e7956a9c0 100644 --- a/bom/application/pom.xml +++ b/bom/application/pom.xml @@ -88,12 +88,12 @@ 5.4.21.Final 1.0.0.Alpha9 6.1.5.Final - 6.0.0.Beta9 + 6.0.0.Beta10 5.10.5.Final 1.1.1.Final 1.8 7.6.0.Final - 7.8.0 + 7.9.0 1.3.8 2.2.19 1.0.6.Final diff --git a/build-parent/pom.xml b/build-parent/pom.xml index c4be9b13f68c0..7cc91f049ada7 100644 --- a/build-parent/pom.xml +++ b/build-parent/pom.xml @@ -75,7 +75,7 @@ 4.7.2 - 7.8.0 + 7.9.0 docker.elastic.co/elasticsearch/elasticsearch-oss:${elasticsearch-server.version} http diff --git a/extensions/hibernate-search-elasticsearch/deployment/src/main/java/io/quarkus/hibernate/search/elasticsearch/HibernateSearchElasticsearchProcessor.java b/extensions/hibernate-search-elasticsearch/deployment/src/main/java/io/quarkus/hibernate/search/elasticsearch/HibernateSearchElasticsearchProcessor.java index e9efa2ee424c2..9f06943d13e48 100644 --- a/extensions/hibernate-search-elasticsearch/deployment/src/main/java/io/quarkus/hibernate/search/elasticsearch/HibernateSearchElasticsearchProcessor.java +++ b/extensions/hibernate-search-elasticsearch/deployment/src/main/java/io/quarkus/hibernate/search/elasticsearch/HibernateSearchElasticsearchProcessor.java @@ -131,9 +131,17 @@ private static void checkConfig(HibernateSearchElasticsearchBuildTimeConfig buil private void registerReflection(IndexView index, BuildProducer reflectiveClass) { Set reflectiveClassCollector = new HashSet<>(); - if (buildTimeConfig.defaultBackend.analysis.configurer.isPresent()) { + if (buildTimeConfig.defaultBackend.indexDefaults.analysis.configurer.isPresent()) { reflectiveClass.produce( - new ReflectiveClassBuildItem(true, false, buildTimeConfig.defaultBackend.analysis.configurer.get())); + new ReflectiveClassBuildItem(true, false, + buildTimeConfig.defaultBackend.indexDefaults.analysis.configurer.get())); + } + for (HibernateSearchElasticsearchBuildTimeConfig.ElasticsearchIndexBuildTimeConfig indexConfig : buildTimeConfig.defaultBackend.indexes + .values()) { + if (indexConfig.analysis.configurer.isPresent()) { + reflectiveClass.produce( + new ReflectiveClassBuildItem(true, false, indexConfig.analysis.configurer.get())); + } } if (buildTimeConfig.defaultBackend.layout.strategy.isPresent()) { diff --git a/extensions/hibernate-search-elasticsearch/runtime/src/main/java/io/quarkus/hibernate/search/elasticsearch/runtime/HibernateSearchElasticsearchBuildTimeConfig.java b/extensions/hibernate-search-elasticsearch/runtime/src/main/java/io/quarkus/hibernate/search/elasticsearch/runtime/HibernateSearchElasticsearchBuildTimeConfig.java index 32c9834567674..0a3d23e058148 100644 --- a/extensions/hibernate-search-elasticsearch/runtime/src/main/java/io/quarkus/hibernate/search/elasticsearch/runtime/HibernateSearchElasticsearchBuildTimeConfig.java +++ b/extensions/hibernate-search-elasticsearch/runtime/src/main/java/io/quarkus/hibernate/search/elasticsearch/runtime/HibernateSearchElasticsearchBuildTimeConfig.java @@ -67,16 +67,32 @@ public static class ElasticsearchBackendBuildTimeConfig { public Optional version; /** - * Configuration for full-text analysis. + * Configuration for the index layout. */ @ConfigItem - public AnalysisConfig analysis; + public LayoutConfig layout; /** - * Configuration for the index layout. + * The default configuration for the Elasticsearch indexes. + */ + @ConfigItem(name = ConfigItem.PARENT) + public ElasticsearchIndexBuildTimeConfig indexDefaults; + + /** + * Per-index specific configuration. */ @ConfigItem - public LayoutConfig layout; + @ConfigDocMapKey("index-name") + public Map indexes; + } + + @ConfigGroup + public static class ElasticsearchIndexBuildTimeConfig { + /** + * Configuration for full-text analysis. + */ + @ConfigItem + public AnalysisConfig analysis; } @ConfigGroup diff --git a/extensions/hibernate-search-elasticsearch/runtime/src/main/java/io/quarkus/hibernate/search/elasticsearch/runtime/HibernateSearchElasticsearchRecorder.java b/extensions/hibernate-search-elasticsearch/runtime/src/main/java/io/quarkus/hibernate/search/elasticsearch/runtime/HibernateSearchElasticsearchRecorder.java index 399a4261af487..e4eada04259f7 100644 --- a/extensions/hibernate-search-elasticsearch/runtime/src/main/java/io/quarkus/hibernate/search/elasticsearch/runtime/HibernateSearchElasticsearchRecorder.java +++ b/extensions/hibernate-search-elasticsearch/runtime/src/main/java/io/quarkus/hibernate/search/elasticsearch/runtime/HibernateSearchElasticsearchRecorder.java @@ -22,8 +22,9 @@ import io.quarkus.hibernate.orm.runtime.integration.HibernateOrmIntegrationListener; import io.quarkus.hibernate.orm.runtime.integration.HibernateOrmIntegrations; import io.quarkus.hibernate.search.elasticsearch.runtime.HibernateSearchElasticsearchBuildTimeConfig.ElasticsearchBackendBuildTimeConfig; +import io.quarkus.hibernate.search.elasticsearch.runtime.HibernateSearchElasticsearchBuildTimeConfig.ElasticsearchIndexBuildTimeConfig; import io.quarkus.hibernate.search.elasticsearch.runtime.HibernateSearchElasticsearchRuntimeConfig.ElasticsearchBackendRuntimeConfig; -import io.quarkus.hibernate.search.elasticsearch.runtime.HibernateSearchElasticsearchRuntimeConfig.ElasticsearchIndexConfig; +import io.quarkus.hibernate.search.elasticsearch.runtime.HibernateSearchElasticsearchRuntimeConfig.ElasticsearchIndexRuntimeConfig; import io.quarkus.runtime.annotations.Recorder; @Recorder @@ -103,14 +104,22 @@ private void contributeBackendBuildTimeProperties(BiConsumer pro ElasticsearchBackendSettings.TYPE_NAME); addBackendConfig(propertyCollector, backendName, ElasticsearchBackendSettings.VERSION, elasticsearchBackendConfig.version); - addBackendConfig(propertyCollector, backendName, - ElasticsearchBackendSettings.ANALYSIS_CONFIGURER, - elasticsearchBackendConfig.analysis.configurer, - Optional::isPresent, c -> c.get().getName()); addBackendConfig(propertyCollector, backendName, ElasticsearchBackendSettings.LAYOUT_STRATEGY, elasticsearchBackendConfig.layout.strategy, Optional::isPresent, c -> c.get().getName()); + + // Index defaults at the backend level + contributeBackendIndexBuildTimeProperties(propertyCollector, backendName, null, + elasticsearchBackendConfig.indexDefaults); + + // Per-index properties + for (Entry indexConfigEntry : elasticsearchBackendConfig.indexes + .entrySet()) { + String indexName = indexConfigEntry.getKey(); + ElasticsearchIndexBuildTimeConfig indexConfig = indexConfigEntry.getValue(); + contributeBackendIndexBuildTimeProperties(propertyCollector, backendName, indexName, indexConfig); + } } private void contributeBackendRuntimeProperties(BiConsumer propertyCollector, String backendName, @@ -125,6 +134,10 @@ private void contributeBackendRuntimeProperties(BiConsumer prope elasticsearchBackendConfig.password); addBackendConfig(propertyCollector, backendName, ElasticsearchBackendSettings.CONNECTION_TIMEOUT, elasticsearchBackendConfig.connectionTimeout.toMillis()); + addBackendConfig(propertyCollector, backendName, ElasticsearchBackendSettings.READ_TIMEOUT, + elasticsearchBackendConfig.readTimeout.toMillis()); + addBackendConfig(propertyCollector, backendName, ElasticsearchBackendSettings.REQUEST_TIMEOUT, + elasticsearchBackendConfig.requestTimeout, Optional::isPresent, d -> d.get().toMillis()); addBackendConfig(propertyCollector, backendName, ElasticsearchBackendSettings.MAX_CONNECTIONS, elasticsearchBackendConfig.maxConnections); addBackendConfig(propertyCollector, backendName, ElasticsearchBackendSettings.MAX_CONNECTIONS_PER_ROUTE, @@ -143,15 +156,25 @@ private void contributeBackendRuntimeProperties(BiConsumer prope contributeBackendIndexRuntimeProperties(propertyCollector, backendName, null, elasticsearchBackendConfig.indexDefaults); - for (Entry indexConfigEntry : runtimeConfig.defaultBackend.indexes.entrySet()) { + // Per-index properties + for (Entry indexConfigEntry : runtimeConfig.defaultBackend.indexes + .entrySet()) { String indexName = indexConfigEntry.getKey(); - ElasticsearchIndexConfig indexConfig = indexConfigEntry.getValue(); + ElasticsearchIndexRuntimeConfig indexConfig = indexConfigEntry.getValue(); contributeBackendIndexRuntimeProperties(propertyCollector, backendName, indexName, indexConfig); } } + private void contributeBackendIndexBuildTimeProperties(BiConsumer propertyCollector, + String backendName, String indexName, ElasticsearchIndexBuildTimeConfig indexConfig) { + addBackendIndexConfig(propertyCollector, backendName, indexName, + ElasticsearchBackendSettings.ANALYSIS_CONFIGURER, + indexConfig.analysis.configurer, + Optional::isPresent, c -> c.get().getName()); + } + private void contributeBackendIndexRuntimeProperties(BiConsumer propertyCollector, - String backendName, String indexName, ElasticsearchIndexConfig indexConfig) { + String backendName, String indexName, ElasticsearchIndexRuntimeConfig indexConfig) { addBackendIndexConfig(propertyCollector, backendName, indexName, ElasticsearchIndexSettings.SCHEMA_MANAGEMENT_MINIMAL_REQUIRED_STATUS, indexConfig.schemaManagement.requiredStatus); diff --git a/extensions/hibernate-search-elasticsearch/runtime/src/main/java/io/quarkus/hibernate/search/elasticsearch/runtime/HibernateSearchElasticsearchRuntimeConfig.java b/extensions/hibernate-search-elasticsearch/runtime/src/main/java/io/quarkus/hibernate/search/elasticsearch/runtime/HibernateSearchElasticsearchRuntimeConfig.java index d0fcf52d2cdde..e96ce0014acc9 100644 --- a/extensions/hibernate-search-elasticsearch/runtime/src/main/java/io/quarkus/hibernate/search/elasticsearch/runtime/HibernateSearchElasticsearchRuntimeConfig.java +++ b/extensions/hibernate-search-elasticsearch/runtime/src/main/java/io/quarkus/hibernate/search/elasticsearch/runtime/HibernateSearchElasticsearchRuntimeConfig.java @@ -96,11 +96,26 @@ public static class ElasticsearchBackendRuntimeConfig { Optional password; /** - * The connection timeout. + * The timeout when establishing a connection to an Elasticsearch server. */ - @ConfigItem(defaultValue = "3S") + @ConfigItem(defaultValue = "1S") Duration connectionTimeout; + /** + * The timeout when reading responses from an Elasticsearch server. + */ + @ConfigItem(defaultValue = "30S") + Duration readTimeout; + + /** + * The timeout when executing a request to an Elasticsearch server. + *

+ * This includes the time needed to wait for a connection to be available, + * send the request and read the response. + */ + @ConfigItem + Optional requestTimeout; + /** * The maximum number of connections to all the Elasticsearch servers. */ @@ -129,14 +144,14 @@ public static class ElasticsearchBackendRuntimeConfig { * The default configuration for the Elasticsearch indexes. */ @ConfigItem(name = ConfigItem.PARENT) - ElasticsearchIndexConfig indexDefaults; + ElasticsearchIndexRuntimeConfig indexDefaults; /** * Per-index specific configuration. */ @ConfigItem @ConfigDocMapKey("index-name") - Map indexes; + Map indexes; } public enum ElasticsearchClientProtocol { @@ -174,7 +189,7 @@ public String getHibernateSearchString() { } @ConfigGroup - public static class ElasticsearchIndexConfig { + public static class ElasticsearchIndexRuntimeConfig { /** * Configuration for the schema management of the indexes. */ @@ -374,7 +389,7 @@ public static class ElasticsearchIndexIndexingConfig { * which may lead to higher indexing throughput, * but incurs a risk of overloading Elasticsearch, * i.e. of overflowing its HTTP request buffers and tripping - * circuit breakers, + * circuit breakers, * leading to Elasticsearch giving up on some request and resulting in indexing failures. */ // We can't set an actual default value here: see comment on this class. @@ -400,7 +415,7 @@ public static class ElasticsearchIndexIndexingConfig { * which may lead to higher indexing throughput, * but incurs a risk of overloading Elasticsearch, * i.e. of overflowing its HTTP request buffers and tripping - * circuit breakers, + * circuit breakers, * leading to Elasticsearch giving up on some request and resulting in indexing failures. *

* Note that raising this number above the queue size has no effect, diff --git a/integration-tests/hibernate-search-elasticsearch/src/main/java/io/quarkus/it/hibernate/search/elasticsearch/search/Person.java b/integration-tests/hibernate-search-elasticsearch/src/main/java/io/quarkus/it/hibernate/search/elasticsearch/search/Person.java index ab66e88134ed9..96535302012e5 100644 --- a/integration-tests/hibernate-search-elasticsearch/src/main/java/io/quarkus/it/hibernate/search/elasticsearch/search/Person.java +++ b/integration-tests/hibernate-search-elasticsearch/src/main/java/io/quarkus/it/hibernate/search/elasticsearch/search/Person.java @@ -8,7 +8,7 @@ import javax.persistence.Id; import javax.persistence.ManyToOne; -import org.hibernate.search.engine.backend.document.model.dsl.ObjectFieldStorage; +import org.hibernate.search.engine.backend.types.ObjectStructure; import org.hibernate.search.engine.backend.types.Sortable; import org.hibernate.search.mapper.pojo.mapping.definition.annotation.FullTextField; import org.hibernate.search.mapper.pojo.mapping.definition.annotation.Indexed; @@ -28,7 +28,7 @@ public class Person { private String name; @ManyToOne(cascade = CascadeType.ALL, fetch = FetchType.LAZY) - @IndexedEmbedded(storage = ObjectFieldStorage.NESTED) + @IndexedEmbedded(structure = ObjectStructure.NESTED) private Address address; public Person() {