Skip to content

Commit b461825

Browse files
committed
Use build items to propagate host and port of search backend deverservice to dashboards devservice
1 parent ef952cd commit b461825

File tree

3 files changed

+39
-27
lines changed

3 files changed

+39
-27
lines changed

extensions/elasticsearch-rest-client-common/deployment/src/main/java/io/quarkus/elasticsearch/restclient/common/deployment/DevServicesElasticsearchDashboardsProcessor.java

Lines changed: 11 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,7 @@ public DevServicesResultBuildItem startElasticsearchDevService(
7575
Optional<ConsoleInstalledBuildItem> consoleInstalledBuildItem,
7676
CuratedApplicationShutdownBuildItem closeBuildItem,
7777
LoggingSetupBuildItem loggingSetupBuildItem,
78+
List<DevservicesElasticsearchConnectionBuildItem> elasticsearchConnectionBuildItems,
7879
DevServicesConfig devServicesConfig,
7980
List<DevservicesElasticsearchBuildItem> devservicesElasticsearchBuildItems) throws BuildException {
8081

@@ -104,7 +105,8 @@ public DevServicesResultBuildItem startElasticsearchDevService(
104105

105106
devDashboardService = startDashboardDevServices(dockerStatusBuildItem, composeProjectBuildItem,
106107
configuration.devservices(),
107-
buildItemsConfig, launchMode, useSharedNetwork, devServicesConfig.timeout());
108+
buildItemsConfig, elasticsearchConnectionBuildItems, launchMode, useSharedNetwork,
109+
devServicesConfig.timeout());
108110
if (devDashboardService == null) {
109111
compressor.closeAndDumpCaptured();
110112
} else {
@@ -147,6 +149,7 @@ private RunningDevService startDashboardDevServices(
147149
DevServicesComposeProjectBuildItem composeProjectBuildItem,
148150
ElasticsearchDevServicesBuildTimeConfig config,
149151
DevservicesElasticsearchBuildItemsConfiguration buildItemConfig,
152+
List<DevservicesElasticsearchConnectionBuildItem> elasticsearchConnectionBuildItems,
150153
LaunchModeBuildItem launchMode, boolean useSharedNetwork, Optional<Duration> timeout) throws BuildException {
151154
if (!config.enabled().orElse(true)) {
152155
// explicitly disabled
@@ -177,31 +180,13 @@ private RunningDevService startDashboardDevServices(
177180
.collect(Collectors.toSet());
178181
} else {
179182
Optional<ContainerAddress> maybeContainerAddressSearchBackend = Optional.empty();
180-
log.info("no elasticsearch hosts config property found, waiting for the elasticsearch container to be started");
181-
for (int i = 0; i < LOCATE_BACKEND_MAX_RETRIES; i++) {
182-
maybeContainerAddressSearchBackend = elasticsearchContainerLocator.locateContainer(
183-
config.serviceName(),
184-
config.shared(),
185-
launchMode.getLaunchMode())
186-
.or(() -> ComposeLocator.locateContainer(composeProjectBuildItem,
187-
List.of(resolvedImageName.getUnversionedPart(), "elasticsearch", "opensearch"),
188-
ELASTICSEARCH_PORT,
189-
launchMode.getLaunchMode(), useSharedNetwork));
190-
if (maybeContainerAddressSearchBackend.isPresent()) {
191-
break;
192-
}
193-
try {
194-
Thread.sleep((long) (LOCATE_BACKEND_INITIAL_WAIT_MILLIS * Math.pow(2, i)));
195-
log.infof("waiting for the elasticsearch container to be started, attempt %d of %d", i + 1,
196-
LOCATE_BACKEND_MAX_RETRIES);
197-
} catch (InterruptedException e) {
198-
throw new RuntimeException(e);
199-
}
200-
}
201-
opensearchHosts = maybeContainerAddressSearchBackend.map(containerAddress -> Set
202-
.of(("http://" + containerAddress.getHost() + ":" + containerAddress.getPort())
203-
.replace("localhost", "host.docker.internal")))
204-
.orElseGet(() -> Set.of());
183+
log.info(
184+
"no elasticsearch hosts config property found, using the host of theelasticsearch dev services container to connect");
185+
186+
opensearchHosts = elasticsearchConnectionBuildItems.stream()
187+
.map(connection -> ("http://" + connection.getHost() + ":" + connection.getPort())
188+
.replace("localhost", "host.docker.internal"))
189+
.collect(Collectors.toSet());
205190
}
206191

207192
final Optional<ContainerAddress> maybeContainerAddress = dashboardContainerLocator.locateContainer(

extensions/elasticsearch-rest-client-common/deployment/src/main/java/io/quarkus/elasticsearch/restclient/common/deployment/DevServicesElasticsearchProcessor.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
import io.quarkus.builder.BuildException;
2626
import io.quarkus.deployment.Feature;
2727
import io.quarkus.deployment.IsDevServicesSupportedByLaunchMode;
28+
import io.quarkus.deployment.annotations.BuildProducer;
2829
import io.quarkus.deployment.annotations.BuildStep;
2930
import io.quarkus.deployment.annotations.BuildSteps;
3031
import io.quarkus.deployment.builditem.CuratedApplicationShutdownBuildItem;
@@ -74,6 +75,7 @@ public DevServicesResultBuildItem startElasticsearchDevService(
7475
CuratedApplicationShutdownBuildItem closeBuildItem,
7576
LoggingSetupBuildItem loggingSetupBuildItem,
7677
DevServicesConfig devServicesConfig,
78+
BuildProducer<DevservicesElasticsearchConnectionBuildItem> connectionBuildItemProducer,
7779
List<DevservicesElasticsearchBuildItem> devservicesElasticsearchBuildItems) throws BuildException {
7880

7981
if (devservicesElasticsearchBuildItems.isEmpty()) {
@@ -100,7 +102,8 @@ public DevServicesResultBuildItem startElasticsearchDevService(
100102
boolean useSharedNetwork = DevServicesSharedNetworkBuildItem.isSharedNetworkRequired(devServicesConfig,
101103
devServicesSharedNetworkBuildItem);
102104
devService = startElasticsearchDevServices(dockerStatusBuildItem, composeProjectBuildItem,
103-
configuration.devservices(), buildItemsConfig, launchMode, useSharedNetwork, devServicesConfig.timeout());
105+
configuration.devservices(), buildItemsConfig, connectionBuildItemProducer, launchMode, useSharedNetwork,
106+
devServicesConfig.timeout());
104107

105108
if (devService == null) {
106109
compressor.closeAndDumpCaptured();
@@ -158,6 +161,7 @@ private RunningDevService startElasticsearchDevServices(
158161
DevServicesComposeProjectBuildItem composeProjectBuildItem,
159162
ElasticsearchDevServicesBuildTimeConfig config,
160163
DevservicesElasticsearchBuildItemsConfiguration buildItemConfig,
164+
BuildProducer<DevservicesElasticsearchConnectionBuildItem> connectionBuildItemProducer,
161165
LaunchModeBuildItem launchMode, boolean useSharedNetwork, Optional<Duration> timeout) throws BuildException {
162166
if (!config.enabled().orElse(true)) {
163167
// explicitly disabled
@@ -214,6 +218,8 @@ private RunningDevService startElasticsearchDevServices(
214218

215219
var httpHost = createdContainer.hostName + ":"
216220
+ (useSharedNetwork ? ELASTICSEARCH_PORT : container.getMappedPort(ELASTICSEARCH_PORT));
221+
connectionBuildItemProducer.produce(new DevservicesElasticsearchConnectionBuildItem(createdContainer.hostName,
222+
container.getMappedPort(ELASTICSEARCH_PORT)));
217223
return new RunningDevService(Feature.ELASTICSEARCH_REST_CLIENT_COMMON.getName(),
218224
container.getContainerId(),
219225
new ContainerShutdownCloseable(container, "Elasticsearch"),
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
package io.quarkus.elasticsearch.restclient.common.deployment;
2+
3+
import io.quarkus.builder.item.MultiBuildItem;
4+
5+
public final class DevservicesElasticsearchConnectionBuildItem extends MultiBuildItem {
6+
private final String host;
7+
private final int port;
8+
9+
public DevservicesElasticsearchConnectionBuildItem(String host, int port) {
10+
this.host = host;
11+
this.port = port;
12+
}
13+
14+
public String getHost() {
15+
return host;
16+
}
17+
18+
public int getPort() {
19+
return port;
20+
}
21+
}

0 commit comments

Comments
 (0)