This is an automated email from the ASF dual-hosted git repository. shuwenwei pushed a commit to branch fixUT0528 in repository https://gitbox.apache.org/repos/asf/iotdb.git
commit 34331bdc4fa0be9cff6272e32117cb24468f94a2 Author: shuwenwei <[email protected]> AuthorDate: Thu May 28 17:30:59 2026 +0800 Fix source scan race in plan visitor test --- .../IPlanVisitorInheritanceConstraintTest.java | 54 +++++++++++++++++++--- 1 file changed, 48 insertions(+), 6 deletions(-) diff --git a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/IPlanVisitorInheritanceConstraintTest.java b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/IPlanVisitorInheritanceConstraintTest.java index a06d0ff6ba8..0b23460b43c 100644 --- a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/IPlanVisitorInheritanceConstraintTest.java +++ b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/IPlanVisitorInheritanceConstraintTest.java @@ -24,9 +24,12 @@ import org.junit.Test; import java.io.IOException; import java.nio.charset.StandardCharsets; +import java.nio.file.FileVisitResult; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; +import java.nio.file.SimpleFileVisitor; +import java.nio.file.attribute.BasicFileAttributes; import java.util.ArrayDeque; import java.util.ArrayList; import java.util.Collections; @@ -38,7 +41,6 @@ import java.util.Map; import java.util.Set; import java.util.regex.Matcher; import java.util.regex.Pattern; -import java.util.stream.Stream; public class IPlanVisitorInheritanceConstraintTest { @@ -58,11 +60,8 @@ public class IPlanVisitorInheritanceConstraintTest { final Path iotdbCoreDir = projectRoot.resolve("iotdb-core"); final Map<String, List<TypeDefinition>> typeDefinitions = new HashMap<>(); - try (Stream<Path> paths = Files.walk(iotdbCoreDir)) { - paths - .filter(path -> path.toString().endsWith(".java")) - .filter(path -> path.toString().contains("/src/main/java/")) - .forEach(path -> collectTypeDefinitions(iotdbCoreDir, path, typeDefinitions)); + for (Path sourceRoot : collectSourceRoots(iotdbCoreDir)) { + collectTypeDefinitionsUnderSourceRoot(iotdbCoreDir, sourceRoot, typeDefinitions); } final List<String> violations = new ArrayList<>(); @@ -107,6 +106,49 @@ public class IPlanVisitorInheritanceConstraintTest { + "Please run the test from the iotdb project workspace."); } + private static List<Path> collectSourceRoots(final Path moduleDir) { + final List<Path> sourceRoots = new ArrayList<>(); + try { + Files.walkFileTree( + moduleDir, + new SimpleFileVisitor<Path>() { + @Override + public FileVisitResult preVisitDirectory( + final Path dir, final BasicFileAttributes attrs) { + if ("target".equals(dir.getFileName().toString())) { + return FileVisitResult.SKIP_SUBTREE; + } + if (dir.endsWith(Paths.get("src", "main", "java"))) { + sourceRoots.add(dir); + return FileVisitResult.SKIP_SUBTREE; + } + return FileVisitResult.CONTINUE; + } + }); + } catch (final IOException e) { + throw new RuntimeException("Failed to collect source roots under " + moduleDir, e); + } + return sourceRoots; + } + + private static void collectTypeDefinitionsUnderSourceRoot( + final Path scanRoot, + final Path sourceRoot, + final Map<String, List<TypeDefinition>> typeDefinitions) + throws IOException { + Files.walkFileTree( + sourceRoot, + new SimpleFileVisitor<Path>() { + @Override + public FileVisitResult visitFile(final Path file, final BasicFileAttributes attrs) { + if (file.toString().endsWith(".java")) { + collectTypeDefinitions(scanRoot, file, typeDefinitions); + } + return FileVisitResult.CONTINUE; + } + }); + } + private static void collectTypeDefinitions( final Path scanRoot, final Path javaFile,
