This is an automated email from the ASF dual-hosted git repository.
martijnvisser pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/flink.git
The following commit(s) were added to refs/heads/master by this push:
new db3777dc627 [FLINK-39107][metrics][test] Run otel container from a
prebuilt image (#27637)
db3777dc627 is described below
commit db3777dc6279715c2de9b0fe5ad097498fa0f2de
Author: Efrat Levitan <[email protected]>
AuthorDate: Tue Feb 24 14:48:17 2026 +0200
[FLINK-39107][metrics][test] Run otel container from a prebuilt image
(#27637)
We are hitting docker build issues when multiple tests are building otel
from a dockerfile in parallel. While it could be addressed by a resource lock,
we realized we could actually use the prebuilt image with a copied output
directory instead of building from dockerfile.
---
.../flink/metrics/otel/OpenTelemetryTestBase.java | 6 ++++-
.../flink/metrics/otel/OtelTestContainer.java | 30 ++++++----------------
2 files changed, 13 insertions(+), 23 deletions(-)
diff --git
a/flink-metrics/flink-metrics-otel/src/test/java/org/apache/flink/metrics/otel/OpenTelemetryTestBase.java
b/flink-metrics/flink-metrics-otel/src/test/java/org/apache/flink/metrics/otel/OpenTelemetryTestBase.java
index a5aa9735584..461a1683573 100644
---
a/flink-metrics/flink-metrics-otel/src/test/java/org/apache/flink/metrics/otel/OpenTelemetryTestBase.java
+++
b/flink-metrics/flink-metrics-otel/src/test/java/org/apache/flink/metrics/otel/OpenTelemetryTestBase.java
@@ -34,6 +34,7 @@ import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Order;
import org.junit.jupiter.api.extension.ExtendWith;
import org.junit.jupiter.api.extension.RegisterExtension;
+import org.junit.jupiter.api.io.TempDir;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.testcontainers.containers.output.BaseConsumer;
@@ -42,6 +43,7 @@ import org.testcontainers.containers.output.Slf4jLogConsumer;
import java.io.BufferedReader;
import java.io.InputStreamReader;
+import java.nio.file.Path;
import java.time.Duration;
import java.util.ArrayList;
import java.util.List;
@@ -54,12 +56,14 @@ public class OpenTelemetryTestBase {
private static final Duration TIME_OUT = Duration.ofMinutes(2);
+ @TempDir static Path outputDir;
+
@RegisterExtension
@Order(1)
private static final
AllCallbackWrapper<TestContainerExtension<OtelTestContainer>>
OTEL_EXTENSION =
new AllCallbackWrapper<>(
- new TestContainerExtension<>(() -> new
OtelTestContainer()));
+ new TestContainerExtension<>(() -> new
OtelTestContainer(outputDir)));
@BeforeEach
public void setup() {
diff --git
a/flink-metrics/flink-metrics-otel/src/test/java/org/apache/flink/metrics/otel/OtelTestContainer.java
b/flink-metrics/flink-metrics-otel/src/test/java/org/apache/flink/metrics/otel/OtelTestContainer.java
index 1989d45e431..d246d42fc99 100644
---
a/flink-metrics/flink-metrics-otel/src/test/java/org/apache/flink/metrics/otel/OtelTestContainer.java
+++
b/flink-metrics/flink-metrics-otel/src/test/java/org/apache/flink/metrics/otel/OtelTestContainer.java
@@ -20,12 +20,11 @@ package org.apache.flink.metrics.otel;
import com.github.dockerjava.api.command.InspectContainerResponse;
import org.testcontainers.containers.GenericContainer;
-import org.testcontainers.images.builder.ImageFromDockerfile;
-import org.testcontainers.images.builder.dockerfile.DockerfileBuilder;
-import
org.testcontainers.images.builder.dockerfile.statement.MultiArgsStatement;
import org.testcontainers.utility.Base58;
+import org.testcontainers.utility.DockerImageName;
import org.testcontainers.utility.MountableFile;
+import java.io.File;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.Locale;
@@ -42,33 +41,20 @@ class OtelTestContainer extends
GenericContainer<OtelTestContainer> {
private static final Path CONFIG_PATH =
Paths.get("src/test/resources/").resolve("otel-config.yaml");
- public OtelTestContainer() {
- super(
- new ImageFromDockerfile("flink/opentelemetry-collector")
- .withDockerfileFromBuilder(
-
OtelTestContainer::buildOpentelemetryCollectorImage));
+ public OtelTestContainer(Path outputDir) {
+ super(DockerImageName.parse("otel/opentelemetry-collector:0.111.0"));
withNetworkAliases(randomString("otel-collector", 6));
addExposedPort(DEFAULT_HTTP_PORT);
addExposedPort(DEFAULT_GRPC_PORT);
withCopyFileToContainer(
MountableFile.forHostPath(CONFIG_PATH.toString()),
"otel-config.yaml");
+ withCopyFileToContainer(
+ MountableFile.forHostPath(
+ new File(outputDir.toFile(),
LOG_FILE).getAbsolutePath(), 755),
+ getOutputLogPath().toString());
withCommand("--config", "otel-config.yaml");
}
- private static void buildOpentelemetryCollectorImage(DockerfileBuilder
builder) {
- builder
- // otel image doesn't have mkdir - use alpine instead.
- .from("alpine:3.20")
- // Create the output data directory - otel image doesn't have
any directory to write
- // to on its own.
- .run("mkdir -p " + DATA_DIR)
- .from("otel/opentelemetry-collector:0.111.0")
- // Copy the output data directory from alpine. It has to be
owned by the otel user.
- .withStatement(
- new MultiArgsStatement("COPY --from=0 --chown=10001",
DATA_DIR, DATA_DIR))
- .build();
- }
-
public Path getOutputLogPath() {
return Path.of(DATA_DIR, LOG_FILE);
}