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 5c56320f1ce [FLINK-40109][yarn][tests] Include rolled logs in the
keytab log check
5c56320f1ce is described below
commit 5c56320f1ce74223d26bdf8721284de4c3b0a9c8
Author: Martijn Visser <[email protected]>
AuthorDate: Mon Sep 28 14:44:57 2026 +0200
[FLINK-40109][yarn][tests] Include rolled logs in the keytab log check
- The distribution's log4j config can roll a container log shortly after
startup, which moves the keytab login into jobmanager.log.1 or
taskmanager.log.1
- verifyStringsInNamedLogFiles now also reads <file>.<n>
- Check once instead of polling for 60s: the login line is written at
startup, long before the application is killed
Generated-by: Claude Code (Claude Opus 5.5)
---
.../flink/yarn/YARNSessionFIFOSecuredITCase.java | 22 +++++-----------------
.../java/org/apache/flink/yarn/YarnTestBase.java | 6 +++++-
2 files changed, 10 insertions(+), 18 deletions(-)
diff --git
a/flink-yarn-tests/src/test/java/org/apache/flink/yarn/YARNSessionFIFOSecuredITCase.java
b/flink-yarn-tests/src/test/java/org/apache/flink/yarn/YARNSessionFIFOSecuredITCase.java
index 3ef2992ec93..aabeb39712f 100644
---
a/flink-yarn-tests/src/test/java/org/apache/flink/yarn/YARNSessionFIFOSecuredITCase.java
+++
b/flink-yarn-tests/src/test/java/org/apache/flink/yarn/YARNSessionFIFOSecuredITCase.java
@@ -20,7 +20,6 @@ package org.apache.flink.yarn;
import org.apache.flink.configuration.Configuration;
import org.apache.flink.configuration.SecurityOptions;
-import org.apache.flink.core.testutils.CommonTestUtils;
import org.apache.flink.runtime.security.SecurityConfiguration;
import org.apache.flink.runtime.security.SecurityUtils;
import org.apache.flink.runtime.security.contexts.HadoopSecurityContext;
@@ -47,7 +46,6 @@ import org.junit.jupiter.api.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import java.time.Duration;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
@@ -196,22 +194,12 @@ class YARNSessionFIFOSecuredITCase extends
YARNSessionFIFOITCase {
private static void verifyResultContainsKerberosKeytab(
ApplicationId applicationId, String viewAcls, String modifyAcls)
throws Exception {
final String[] mustHave = {"Login successful for user", "using keytab
file"};
- // The application has been killed by now, so all container output is
flushed. A
- // short-lived TaskManager's startup login line can still be briefly
unreadable right
- // after teardown (FLINK-17662), so poll each log instead of reading
it once.
for (final String logFile : new String[] {"jobmanager.log",
"taskmanager.log"}) {
- log.info("Waiting until {} contains the Kerberos keytab login",
logFile);
- CommonTestUtils.waitUtil(
- () -> verifyStringsInNamedLogFiles(mustHave,
applicationId, logFile),
- Duration.ofSeconds(60),
- Duration.ofMillis(500),
- "Kerberos keytab login "
- + Arrays.toString(mustHave)
- + " not found in "
- + logFile
- + " for application "
- + applicationId
- + " within the timeout; inspect the uploaded
container logs.");
+ assertThat(verifyStringsInNamedLogFiles(mustHave, applicationId,
logFile))
+ .as(
+ "Kerberos keytab login %s in %s or its rolled
files for %s",
+ Arrays.toString(mustHave), logFile, applicationId)
+ .isTrue();
}
final List<String> amRMTokens =
diff --git
a/flink-yarn-tests/src/test/java/org/apache/flink/yarn/YarnTestBase.java
b/flink-yarn-tests/src/test/java/org/apache/flink/yarn/YarnTestBase.java
index a2621e090fe..1fdcdc02b4b 100644
--- a/flink-yarn-tests/src/test/java/org/apache/flink/yarn/YarnTestBase.java
+++ b/flink-yarn-tests/src/test/java/org/apache/flink/yarn/YarnTestBase.java
@@ -640,7 +640,11 @@ public abstract class YarnTestBase {
new FilenameFilter() {
@Override
public boolean accept(File dir, String name) {
- if (fileName != null &&
!name.equals(fileName)) {
+ // Container logs go through a RollingFile
appender, so earlier
+ // lines may be in <fileName>.<n>.
+ if (fileName != null
+ && !name.equals(fileName)
+ &&
!name.matches(Pattern.quote(fileName) + "\\.\\d+")) {
return false;
}
final File f = new File(dir.getAbsolutePath(),
name);