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);
     }

Reply via email to