From 1741bfa70304e5c359fcf4f0d2765614e1cf71a3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Yoann=20Rodi=C3=A8re?= Date: Mon, 7 Sep 2020 13:49:59 +0200 Subject: [PATCH 1/6] Upgrade to Elasticsearch 7.9.0 Necessary in particular for the Hibernate Search upgrade: 7.8.x and earlier will lead to NoSuchMethodError. --- .github/workflows/ci-actions.yml | 2 +- bom/application/pom.xml | 2 +- build-parent/pom.xml | 2 +- .../runtime/HibernateSearchElasticsearchRuntimeConfig.java | 4 ++-- 4 files changed, 5 insertions(+), 5 deletions(-) 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..674951dc6a1f6 100644 --- a/bom/application/pom.xml +++ b/bom/application/pom.xml @@ -93,7 +93,7 @@ 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/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..b06f046a865c7 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 @@ -374,7 +374,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 +400,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, From c7a1064c22667260f7c74f296ed41b4269141a5d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Yoann=20Rodi=C3=A8re?= Date: Mon, 7 Sep 2020 13:13:19 +0200 Subject: [PATCH 2/6] Upgrade to Hibernate Search 6.0.0.Beta10 --- bom/application/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bom/application/pom.xml b/bom/application/pom.xml index 674951dc6a1f6..4a16e7956a9c0 100644 --- a/bom/application/pom.xml +++ b/bom/application/pom.xml @@ -88,7 +88,7 @@ 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 From 07acb1d78f5549a1a8d9abc3d844e6d7c5a637a6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Yoann=20Rodi=C3=A8re?= Date: Mon, 7 Sep 2020 13:17:24 +0200 Subject: [PATCH 3/6] hsearch-es: Update a use of deprecated @IndexedEmbedded.structure Should have been updated a while ago, but apparently I missed this. --- .../it/hibernate/search/elasticsearch/search/Person.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) 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() { From f419dfcee84aa17244c6c62a26c2a0807633fa52 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Yoann=20Rodi=C3=A8re?= Date: Mon, 7 Sep 2020 13:32:51 +0200 Subject: [PATCH 4/6] hsearch-es: Allow configuring analysis at the index level --- ...HibernateSearchElasticsearchProcessor.java | 12 +++++-- ...ateSearchElasticsearchBuildTimeConfig.java | 24 ++++++++++--- .../HibernateSearchElasticsearchRecorder.java | 35 ++++++++++++++----- ...rnateSearchElasticsearchRuntimeConfig.java | 6 ++-- 4 files changed, 60 insertions(+), 17 deletions(-) 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..d463f36d6185f 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, @@ -143,15 +152,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 b06f046a865c7..496e552593a40 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 @@ -129,14 +129,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 +174,7 @@ public String getHibernateSearchString() { } @ConfigGroup - public static class ElasticsearchIndexConfig { + public static class ElasticsearchIndexRuntimeConfig { /** * Configuration for the schema management of the indexes. */ From 70b65ba35909f99d938dcf7c5b77caf92fcc1eec Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Yoann=20Rodi=C3=A8re?= Date: Mon, 7 Sep 2020 13:36:29 +0200 Subject: [PATCH 5/6] hsearch-es: Update default timeouts to match HSearch 6.0.0.Beta10 defaults --- .../runtime/HibernateSearchElasticsearchRuntimeConfig.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 496e552593a40..6d8468db9e1f0 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 @@ -98,7 +98,7 @@ public static class ElasticsearchBackendRuntimeConfig { /** * The connection timeout. */ - @ConfigItem(defaultValue = "3S") + @ConfigItem(defaultValue = "1S") Duration connectionTimeout; /** From e0a4e1bc5d960f926796c19932cd3a41c95098c1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Yoann=20Rodi=C3=A8re?= Date: Mon, 7 Sep 2020 13:42:52 +0200 Subject: [PATCH 6/6] hsearch-es: Add configuration properties for the read timeout and the request timeout Somehow they got left out in the initial implementation of this extension? --- .../HibernateSearchElasticsearchRecorder.java | 4 ++++ ...bernateSearchElasticsearchRuntimeConfig.java | 17 ++++++++++++++++- 2 files changed, 20 insertions(+), 1 deletion(-) 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 d463f36d6185f..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 @@ -134,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, 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 6d8468db9e1f0..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 = "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. */