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() {

Reply via email to