Skip to content

Commit 3e72695

Browse files
committed
* search: update to ES 9.0.0
Signed-off-by: neo <[email protected]>
1 parent fb5743a commit 3e72695

21 files changed

+215
-286
lines changed

CHANGELOG.md

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,10 @@
44

55
* java: update to 24
66
> refer to https://openjdk.org/jeps/491
7-
* search: remove opentelemetry dependency from es lib
7+
* search: update to ES 9.0.0
8+
> migrated to apache httpclient 5
9+
> simplify logging
10+
> remove opentelemetry dependency
811
912
### 9.1.8 (3/7/2025 - 4/24/2025)
1013

build.gradle.kts

Lines changed: 17 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,18 @@ apply(plugin = "project")
88
subprojects {
99
group = "core.framework"
1010
version = "9.2.0"
11+
repositories {
12+
maven {
13+
url = uri("https://neowu.github.io/maven-repo/")
14+
content {
15+
includeGroup("core.framework.elasticsearch.module")
16+
}
17+
}
18+
}
1119
}
1220

13-
val elasticVersion = "8.15.0"
14-
val jacksonVersion = "2.17.2"
21+
val elasticVersion = "9.0.0"
22+
val jacksonVersion = "2.18.3"
1523
val junitVersion = "5.12.2"
1624
val mockitoVersion = "5.17.0"
1725
val assertjVersion = "3.27.3"
@@ -82,6 +90,7 @@ project("core-ng-search") {
8290
api("co.elastic.clients:elasticsearch-java:${elasticVersion}") {
8391
exclude(group = "io.opentelemetry")
8492
}
93+
implementation("commons-logging:commons-logging:1.3.5")
8594
implementation("com.fasterxml.jackson.core:jackson-databind:${jacksonVersion}")
8695
testImplementation(project(":core-ng-test"))
8796
}
@@ -96,10 +105,12 @@ project("core-ng-search-test") {
96105
exclude(group = "io.opentelemetry")
97106
}
98107
implementation("org.elasticsearch.plugin:transport-netty4:${elasticVersion}")
99-
implementation("org.codelibs.elasticsearch.module:mapper-extras:${elasticVersion}") // used by elasticsearch scaled_float
100-
implementation("org.codelibs.elasticsearch.module:lang-painless:${elasticVersion}")
101-
implementation("org.codelibs.elasticsearch.module:analysis-common:${elasticVersion}") // used by elasticsearch stemmer
102-
implementation("org.codelibs.elasticsearch.module:reindex:${elasticVersion}@jar") // used by elasticsearch deleteByQuery
108+
implementation("core.framework.elasticsearch.module:mapper-extras:${elasticVersion}") // used by elasticsearch scaled_float
109+
implementation("core.framework.elasticsearch.module:lang-painless:${elasticVersion}")
110+
implementation("core.framework.elasticsearch.module:analysis-common:${elasticVersion}") // used by elasticsearch stemmer
111+
implementation("core.framework.elasticsearch.module:reindex:${elasticVersion}") // used by elasticsearch deleteByQuery
112+
implementation("org.apache.httpcomponents:httpasyncclient:4.1.5") // used by reindex
113+
runtimeOnly("org.apache.logging.log4j:log4j-to-slf4j:2.24.3")
103114
}
104115
}
105116

buildSrc/src/main/kotlin/project.gradle.kts

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -25,12 +25,6 @@ subprojects {
2525

2626
repositories {
2727
mavenCentral()
28-
maven {
29-
url = uri("https://maven.codelibs.org/")
30-
content {
31-
includeGroup("org.codelibs.elasticsearch.module")
32-
}
33-
}
3428
mavenLocal()
3529
}
3630

core-ng-search-test/src/main/java/core/framework/search/impl/ESLoggerConfigFactory.java

Lines changed: 0 additions & 72 deletions
This file was deleted.

core-ng-search-test/src/main/java/core/framework/search/impl/LocalElasticSearch.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
import core.framework.util.Files;
44
import core.framework.util.StopWatch;
5-
import org.apache.http.HttpHost;
5+
import org.apache.hc.core5.http.HttpHost;
66
import org.elasticsearch.cluster.ClusterName;
77
import org.elasticsearch.common.network.NetworkService;
88
import org.elasticsearch.common.settings.Settings;

core-ng-search-test/src/main/java/core/framework/search/module/TestSearchConfig.java

Lines changed: 4 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,9 @@
22

33
import core.framework.internal.module.ModuleContext;
44
import core.framework.internal.module.ShutdownHook;
5-
import core.framework.search.impl.ESLoggerConfigFactory;
65
import core.framework.search.impl.LocalElasticSearch;
7-
import org.apache.http.HttpHost;
8-
import org.apache.logging.log4j.core.config.ConfigurationFactory;
9-
import org.elasticsearch.common.logging.internal.LoggerFactoryImpl;
10-
import org.elasticsearch.logging.internal.spi.LoggerFactory;
6+
import org.apache.hc.core5.http.HttpHost;
7+
import org.elasticsearch.common.logging.LogConfigurator;
118

129
import java.util.concurrent.locks.ReentrantLock;
1310

@@ -31,7 +28,6 @@ public class TestSearchConfig extends SearchConfig {
3128
@Override
3229
protected void initialize(ModuleContext context, String name) {
3330
super.initialize(context, name);
34-
configureLogger();
3531
startLocalElasticSearch(context);
3632
}
3733

@@ -40,6 +36,8 @@ private void startLocalElasticSearch(ModuleContext context) {
4036
try {
4137
// in test env, config is initialized in order and within same thread, so no threading issue
4238
if (localESHost == null) {
39+
LogConfigurator.configureESLogging();
40+
4341
var server = new LocalElasticSearch();
4442
localESHost = server.start();
4543
context.shutdownHook.add(ShutdownHook.STAGE_6, timeout -> server.close());
@@ -56,27 +54,5 @@ public void host(String host) {
5654

5755
@Override
5856
public void auth(String apiKeyId, String apiKeySecret) {
59-
60-
}
61-
62-
// ES uses log4j2 core api directly, cannot use log4j-to-slf4j to bridge, refer to following exception
63-
// here is to bridge to core-ng logger
64-
/*
65-
java.lang.ClassCastException: class org.apache.logging.slf4j.SLF4JLoggerContext cannot be cast to class org.apache.logging.log4j.core.LoggerContext (org.apache.logging.slf4j.SLF4JLoggerContext and org.apache.logging.log4j.core.LoggerContext are in unnamed module of loader 'app')
66-
at org.apache.logging.log4j.core.LoggerContext.getContext(LoggerContext.java:231)
67-
at org.apache.logging.log4j.core.config.Configurator.setLevel(Configurator.java:366)
68-
at org.elasticsearch.common.logging.Loggers.setLevel(Loggers.java:114)
69-
at org.elasticsearch.index.SearchSlowLog.<init>(SearchSlowLog.java:111)
70-
at org.elasticsearch.index.IndexModule.<init>(IndexModule.java:176)
71-
* */
72-
void configureLogger() {
73-
// ES starts to migrate log4j api to its own logger api, once important info migrated (like node info), we will remove log4j adapter
74-
if (LoggerFactory.provider() == null) LoggerFactory.setInstance(new LoggerFactoryImpl());
75-
76-
if (System.getProperty(ConfigurationFactory.CONFIGURATION_FACTORY_PROPERTY) != null) return;
77-
System.setProperty(ConfigurationFactory.CONFIGURATION_FACTORY_PROPERTY, ESLoggerConfigFactory.class.getName());
78-
// refer to org.apache.logging.log4j.core.jmx.Server.PROPERTY_DISABLE_JMX, disable to reduce overhead
79-
System.setProperty("log4j2.disable.jmx", "true");
80-
ESLoggerConfigFactory.configureLogger();
8157
}
8258
}

core-ng-search-test/src/main/java/org/elasticsearch/node/LocalNode.java

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,21 +6,23 @@
66
import org.elasticsearch.index.mapper.extras.MapperExtrasPlugin;
77
import org.elasticsearch.painless.PainlessPlugin;
88
import org.elasticsearch.plugins.LocalPluginsService;
9+
import org.elasticsearch.plugins.PluginsLoader;
910
import org.elasticsearch.plugins.PluginsService;
1011
import org.elasticsearch.reindex.ReindexPlugin;
1112
import org.elasticsearch.transport.netty4.Netty4Plugin;
1213

14+
import java.util.Collections;
1315
import java.util.List;
1416

1517
/**
1618
* @author neo
1719
*/
1820
public class LocalNode extends Node {
1921
public LocalNode(Settings settings) {
20-
super(NodeConstruction.prepareConstruction(new Environment(settings, null), new NodeServiceProvider() {
22+
super(NodeConstruction.prepareConstruction(new Environment(settings, null), PluginsLoader.createPluginsLoader(Collections.emptySet(), Collections.emptySet(), Collections.emptyMap(), false), new NodeServiceProvider() {
2123
@Override
22-
PluginsService newPluginService(Environment environment, Settings settings) {
23-
return new LocalPluginsService(settings,
24+
PluginsService newPluginService(Environment initialEnvironment, PluginsLoader pluginsLoader) {
25+
return new LocalPluginsService(settings, pluginsLoader,
2426
List.of(Netty4Plugin.class, // for http transport
2527
MapperExtrasPlugin.class, // for scaled_float type
2628
PainlessPlugin.class,

core-ng-search-test/src/main/java/org/elasticsearch/plugins/LocalPluginsService.java

Lines changed: 4 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,10 @@
22

33
import org.elasticsearch.Version;
44
import org.elasticsearch.common.settings.Settings;
5-
import org.elasticsearch.jdk.ModuleQualifiedExportsService;
65

76
import java.util.ArrayList;
87
import java.util.Collection;
98
import java.util.List;
10-
import java.util.Map;
119

1210
/**
1311
* @author neo
@@ -18,8 +16,8 @@ public class LocalPluginsService extends PluginsService {
1816
// refer to https://github.com/elastic/elasticsearch/blob/main/test/framework/src/main/java/org/elasticsearch/plugins/MockPluginsService.java
1917
// refer to https://github.com/elastic/elasticsearch/blob/main/test/framework/src/main/java/org/elasticsearch/node/MockNode.java
2018
// refer to https://github.com/elastic/elasticsearch/blob/main/test/framework/src/main/java/org/elasticsearch/test/ESSingleNodeTestCase.java
21-
public LocalPluginsService(Settings settings, Collection<Class<? extends Plugin>> pluginClasses) {
22-
super(settings, null, null, null);
19+
public LocalPluginsService(Settings settings, PluginsLoader loader, Collection<Class<? extends Plugin>> pluginClasses) {
20+
super(settings, null, loader);
2321
plugins = new ArrayList<>(pluginClasses.size());
2422
for (Class<? extends Plugin> pluginClass : pluginClasses) {
2523
Plugin plugin = loadPlugin(pluginClass, settings, null);
@@ -28,15 +26,15 @@ public LocalPluginsService(Settings settings, Collection<Class<? extends Plugin>
2826
"classpath plugin",
2927
"NA",
3028
Version.CURRENT.toString(),
31-
"21",
29+
"24",
3230
pluginClass.getName(),
3331
null,
3432
List.of(),
3533
false,
3634
false,
3735
false,
3836
false);
39-
plugins.add(new LoadedPlugin(descriptor, plugin, Thread.currentThread().getContextClassLoader(), ModuleLayer.boot()));
37+
plugins.add(new LoadedPlugin(descriptor, plugin, Thread.currentThread().getContextClassLoader()));
4038
}
4139
loadExtensions(plugins);
4240
}
@@ -45,8 +43,4 @@ public LocalPluginsService(Settings settings, Collection<Class<? extends Plugin>
4543
protected final List<LoadedPlugin> plugins() {
4644
return this.plugins;
4745
}
48-
49-
@Override
50-
protected void addServerExportsService(Map<String, List<ModuleQualifiedExportsService>> qualifiedExports) {
51-
}
5246
}

core-ng-search-test/src/test/java/core/framework/search/impl/ElasticSearchAggregationIntegrationTest.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@
1515
import org.junit.jupiter.api.BeforeAll;
1616
import org.junit.jupiter.api.Test;
1717
import org.junit.jupiter.api.TestInstance;
18+
import org.slf4j.Logger;
19+
import org.slf4j.LoggerFactory;
1820

1921
import java.time.ZonedDateTime;
2022
import java.util.List;
@@ -27,6 +29,7 @@
2729
*/
2830
@TestInstance(TestInstance.Lifecycle.PER_CLASS)
2931
class ElasticSearchAggregationIntegrationTest extends IntegrationTest {
32+
private static final Logger log = LoggerFactory.getLogger(ElasticSearchAggregationIntegrationTest.class);
3033
@Inject
3134
ElasticSearch elasticSearch;
3235
@Inject
@@ -62,7 +65,7 @@ void aggregate() {
6265
assertThat(response.hits).hasSize(1);
6366
assertThat(response.aggregations).containsKeys("total_value");
6467

65-
int sum = (int) response.aggregations.get("total_value").sum().value();
68+
int sum = response.aggregations.get("total_value").sum().value().intValue();
6669
assertThat(sum).isEqualTo(21);
6770
}
6871

core-ng-search-test/src/test/java/core/framework/search/impl/ElasticSearchIntegrationTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -124,7 +124,7 @@ void search() {
124124
.filter(term("enum_field", JSON.toEnumValue(TestDocument.TestEnum.VALUE1))));
125125

126126
request.sorts.add(SortOptions.of(builder -> builder.script(s ->
127-
s.script(script -> script.source("doc['int_field'].value * 3")).type(ScriptSortType.Number))));
127+
s.script(script -> script.source(source -> source.scriptString("doc['int_field'].value * 3"))).type(ScriptSortType.Number))));
128128

129129
SearchResponse<TestDocument> response = documentType.search(request);
130130

core-ng-search-test/src/test/java/core/framework/search/module/TestSearchConfigTest.java

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,6 @@
33
import org.junit.jupiter.api.BeforeEach;
44
import org.junit.jupiter.api.Test;
55

6-
import static org.assertj.core.api.Assertions.assertThat;
7-
86
/**
97
* @author neo
108
*/
@@ -17,9 +15,7 @@ void createTestSearchConfig() {
1715
}
1816

1917
@Test
20-
void configureLogger() {
21-
config.configureLogger();
22-
23-
assertThat(System.getProperty("log4j.configurationFactory")).isNotNull();
18+
void auth() {
19+
config.auth("id", "secret");
2420
}
2521
}

core-ng-search/src/main/java/core/framework/search/ElasticSearchMigration.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
import core.framework.internal.module.PropertyManager;
44
import core.framework.search.impl.ElasticSearchHost;
55
import core.framework.search.impl.ElasticSearchImpl;
6-
import org.apache.http.HttpHost;
6+
import org.apache.hc.core5.http.HttpHost;
77
import org.slf4j.Logger;
88
import org.slf4j.LoggerFactory;
99

core-ng-search/src/main/java/core/framework/search/impl/ElasticSearchHost.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package core.framework.search.impl;
22

33
import core.framework.util.Strings;
4-
import org.apache.http.HttpHost;
4+
import org.apache.hc.core5.http.HttpHost;
55

66
/**
77
* @author neo
@@ -34,6 +34,6 @@ private static HttpHost host(String value) {
3434
port = Integer.parseInt(value.substring(portIndex + 1));
3535
hostEnd = portIndex;
3636
}
37-
return new HttpHost(value.substring(hostStart, hostEnd), port, schema);
37+
return new HttpHost(schema, value.substring(hostStart, hostEnd), port);
3838
}
3939
}

0 commit comments

Comments
 (0)