This is an automated email from the ASF dual-hosted git repository.
snuyanzin 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 60c7e2fd9cd [FLINK-40876][table] Code splitter should generate same
code after repeated runs
60c7e2fd9cd is described below
commit 60c7e2fd9cddc9a80f04d7f885f6756e89f89a73
Author: Sergey Nuyanzin <[email protected]>
AuthorDate: Fri Oct 2 09:21:36 2026 +0200
[FLINK-40876][table] Code splitter should generate same code after repeated
runs
---
.../apache/flink/table/codesplit/CodeSplitUtil.java | 12 +++++++++---
.../flink/table/codesplit/JavaCodeSplitter.java | 3 +++
.../flink/table/codesplit/JavaCodeSplitterTest.java | 20 ++++++++++++++++++++
3 files changed, 32 insertions(+), 3 deletions(-)
diff --git
a/flink-table/flink-table-code-splitter/src/main/java/org/apache/flink/table/codesplit/CodeSplitUtil.java
b/flink-table/flink-table-code-splitter/src/main/java/org/apache/flink/table/codesplit/CodeSplitUtil.java
index e75738f9ac4..d8a5ccec4c8 100644
---
a/flink-table/flink-table-code-splitter/src/main/java/org/apache/flink/table/codesplit/CodeSplitUtil.java
+++
b/flink-table/flink-table-code-splitter/src/main/java/org/apache/flink/table/codesplit/CodeSplitUtil.java
@@ -29,14 +29,20 @@ import java.util.concurrent.atomic.AtomicLong;
@Internal
public class CodeSplitUtil {
- private static final AtomicLong COUNTER = new AtomicLong(0L);
+ // Per-thread, reset per split() run, so identical input yields identical
names.
+ private static final ThreadLocal<AtomicLong> COUNTER =
+ ThreadLocal.withInitial(() -> new AtomicLong(0L));
public static AtomicLong getCounter() {
- return COUNTER;
+ return COUNTER.get();
}
public static String newName(String name) {
- return name + "$" + COUNTER.getAndIncrement();
+ return name + "$" + COUNTER.get().getAndIncrement();
+ }
+
+ public static void reset() {
+ COUNTER.get().set(0L);
}
public static String getContextString(ParserRuleContext ctx) {
diff --git
a/flink-table/flink-table-code-splitter/src/main/java/org/apache/flink/table/codesplit/JavaCodeSplitter.java
b/flink-table/flink-table-code-splitter/src/main/java/org/apache/flink/table/codesplit/JavaCodeSplitter.java
index 8347ef3049f..99478014782 100644
---
a/flink-table/flink-table-code-splitter/src/main/java/org/apache/flink/table/codesplit/JavaCodeSplitter.java
+++
b/flink-table/flink-table-code-splitter/src/main/java/org/apache/flink/table/codesplit/JavaCodeSplitter.java
@@ -48,6 +48,9 @@ public class JavaCodeSplitter {
return code;
}
+ // reset counter so identical input yields identical output
+ CodeSplitUtil.reset();
+
String returnValueRewrittenCode = new ReturnValueRewriter(code,
maxMethodLength).rewrite();
return Optional.ofNullable(
new DeclarationRewriter(returnValueRewrittenCode,
maxMethodLength)
diff --git
a/flink-table/flink-table-code-splitter/src/test/java/org/apache/flink/table/codesplit/JavaCodeSplitterTest.java
b/flink-table/flink-table-code-splitter/src/test/java/org/apache/flink/table/codesplit/JavaCodeSplitterTest.java
index f6a389b5a43..f02f5589056 100644
---
a/flink-table/flink-table-code-splitter/src/test/java/org/apache/flink/table/codesplit/JavaCodeSplitterTest.java
+++
b/flink-table/flink-table-code-splitter/src/test/java/org/apache/flink/table/codesplit/JavaCodeSplitterTest.java
@@ -41,6 +41,26 @@ class JavaCodeSplitterTest {
runTest("TestNotSplitJavaCode", 4000, 10000);
}
+ @Test
+ void testSplitIsDeterministic() throws Exception {
+ String code =
+ FileUtils.readFileUtf8(
+ new File(
+ JavaCodeSplitterTest.class
+ .getClassLoader()
+
.getResource("splitter/code/TestSplitJavaCode.java")
+ .toURI()));
+
+ try {
+ String first = JavaCodeSplitter.split(code, 100, 3);
+ String second = JavaCodeSplitter.split(code, 100, 3);
+
+ assertThat(second).isEqualTo(first);
+ } finally {
+ CodeSplitUtil.getCounter().set(0L);
+ }
+ }
+
@Test
@Disabled("Disabled in because of
https://issues.apache.org/jira/browse/FLINK-27702")
void testInvalidJavaCode() {