jkube
jkube copied to clipboard
Incorrect `PathMatcher` Pattern leads to Stack Overflow
Component
JKube Kit
Task description
Task Description
Propose a solution for the problem given below and add a correct exclusion condition for the destination subdirectory (target/myapp) for successful copy operation.
Description
Related To #2733
While working on the above mentioned issue I have found that an ill designed PathMatcher statement is leading to StackOverflow in AssemblyFileSetUtils.copy().
This is a recursive function and as I suspect it's expected to copy DockerFile and docker-build.tar from the output directory (here, target) to the subdirectory of the same output directory (here, target/myapp/build/maven) in the context of build_withDockerfileModeAndAssembly_shouldSucceed()
The exclusion condition for the destination subdirectory is mentioned, here, in AssemblyManager.createDockerExcludesList()
But as the outputDirectory definition is creating the a incorrect path due to initialization with target.getAbsolute(). It creates a incorrect file path in Linux & Windows. In Linux, it leads to the creation of incorrect destination path and in Windows it leads to test failure.
Destination File Path in Linux:
Error in Windows:
And when I change this outputDirectory to target.getName() to create the right directory. It leads to StackOverflow caused by the infinite recursion due to the incorrect exclusion statement which is not excluding any files or after changing the relativized path leads to exclusion of all files and directories.
Expected Behavior
As per my analysis, I believe the that the expected behavior is to copy all the files and directories in output directory (target) to the subdirectory (for example, target/myapp/build/maven) except for the subdirectory itself.
@rohanKanojia & @manusa, Could you guys please look into this and let me know if I'm right about it.
Acceptance Criteria
- [ ]
OpenshiftBuildServiceIntegrationTest.build_withDockerfileModeAndAssembly_shouldSucceed()should pass - [ ]
AssemblyFileSetUtils.copy()should lead to successfully copying of files and directories intarget
@rohanKanojia / @manusa, Please look into this issue and if it seems a genuine issue, then assign it to me.
Hi @l3002
I'm sorry, but I'm failing to see the issue at hand. The "Error in windows:" screenshot shows a truncated stacktrace precisely where the most critical part is, could you please attach that line using (backtic/code blocks)
```
$theStackTraceLine
```
Why is the path wrong in *nix-compatible file systems?
Would the issue be fixed for Windows in case the / character was changed to \ in the following line:
https://github.com/eclipse/jkube/blob/5da6068d7756784aef9569568ee80f98da97e296/jkube-kit/build/api/src/main/java/org/eclipse/jkube/kit/build/api/assembly/AssemblyManager.java#L456
Hi @manusa, Sorry for the messy description, There was a lot to cover. The issue persists with both Windows and Linux.
In Windows:
at org.eclipse.jkube.kit.config.service.openshift.OpenshiftBuildService.buildSingleImage(OpenshiftBuildService.java:170)
at org.eclipse.jkube.kit.config.service.AbstractImageBuildService.processImage(AbstractImageBuildService.java:57)
at org.eclipse.jkube.kit.config.service.AbstractImageBuildService.build(AbstractImageBuildService.java:36)
at org.eclipse.jkube.kit.config.service.openshift.OpenshiftBuildServiceIntegrationTest.build_withDockerfileModeAndAssembly_shouldSucceed(OpenshiftBuildServiceIntegrationTest.java:254)
at java.base/java.lang.reflect.Method.invoke(Method.java:568)
at java.base/java.util.ArrayList.forEach(ArrayList.java:1511)
at java.base/java.util.ArrayList.forEach(ArrayList.java:1511)
Caused by: java.util.regex.PatternSyntaxException: Stack overflow during pattern compilation near index 12
^target(?:(?:\\.*)|(?:))$
^
at java.base/java.util.regex.Pattern.error(Pattern.java:2028)
at java.base/java.util.regex.Pattern.<init>(Pattern.java:1432)
at java.base/java.util.regex.Pattern.compile(Pattern.java:1095)
at java.base/sun.nio.fs.WindowsFileSystem.getPathMatcher(WindowsFileSystem.java:282)
at org.eclipse.jkube.kit.common.archive.AssemblyFileSetUtils.lambda$excludePathMatchers$5(AssemblyFileSetUtils.java:198)
at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197)
at java.base/java.util.Collections$2.tryAdvance(Collections.java:4853)
at java.base/java.util.Collections$2.forEachRemaining(Collections.java:4861)
at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509)
at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499)
at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:921)
at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
at java.base/java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:682)
at org.eclipse.jkube.kit.common.archive.AssemblyFileSetUtils.excludePathMatchers(AssemblyFileSetUtils.java:199)
at org.eclipse.jkube.kit.common.archive.AssemblyFileSetUtils.isNotExcluded(AssemblyFileSetUtils.java:190)
at org.eclipse.jkube.kit.common.archive.AssemblyFileSetUtils.copy(AssemblyFileSetUtils.java:166)
at org.eclipse.jkube.kit.common.archive.AssemblyFileSetUtils.copy(AssemblyFileSetUtils.java:170)
at org.eclipse.jkube.kit.common.archive.AssemblyFileSetUtils.copy(AssemblyFileSetUtils.java:170)
at org.eclipse.jkube.kit.common.archive.AssemblyFileSetUtils.copy(AssemblyFileSetUtils.java:170)
at org.eclipse.jkube.kit.common.archive.AssemblyFileSetUtils.copy(AssemblyFileSetUtils.java:170)
at org.eclipse.jkube.kit.common.archive.AssemblyFileSetUtils.copy(AssemblyFileSetUtils.java:170)
at org.eclipse.jkube.kit.common.archive.AssemblyFileSetUtils.copy(AssemblyFileSetUtils.java:170)
at org.eclipse.jkube.kit.common.archive.AssemblyFileSetUtils.copy(AssemblyFileSetUtils.java:170)
at org.eclipse.jkube.kit.common.archive.AssemblyFileSetUtils.copy(AssemblyFileSetUtils.java:170)
at org.eclipse.jkube.kit.common.archive.AssemblyFileSetUtils.copy(AssemblyFileSetUtils.java:170)
at org.eclipse.jkube.kit.common.archive.AssemblyFileSetUtils.copy(AssemblyFileSetUtils.java:170)
at org.eclipse.jkube.kit.common.archive.AssemblyFileSetUtils.copy(AssemblyFileSetUtils.java:170)
at org.eclipse.jkube.kit.common.archive.AssemblyFileSetUtils.copy(AssemblyFileSetUtils.java:170)
at org.eclipse.jkube.kit.common.archive.AssemblyFileSetUtils.copy(AssemblyFileSetUtils.java:170)
at org.eclipse.jkube.kit.common.archive.AssemblyFileSetUtils.copy(AssemblyFileSetUtils.java:170)
at org.eclipse.jkube.kit.common.archive.AssemblyFileSetUtils.copy(AssemblyFileSetUtils.java:170)
at org.eclipse.jkube.kit.common.archive.AssemblyFileSetUtils.copy(AssemblyFileSetUtils.java:170)
at org.eclipse.jkube.kit.common.archive.AssemblyFileSetUtils.copy(AssemblyFileSetUtils.java:170)
at org.eclipse.jkube.kit.common.archive.AssemblyFileSetUtils.copy(AssemblyFileSetUtils.java:170)
at org.eclipse.jkube.kit.common.archive.AssemblyFileSetUtils.copy(AssemblyFileSetUtils.java:170)
at org.eclipse.jkube.kit.common.archive.AssemblyFileSetUtils.copy(AssemblyFileSetUtils.java:170)
at org.eclipse.jkube.kit.common.archive.AssemblyFileSetUtils.copy(AssemblyFileSetUtils.java:170)
at org.eclipse.jkube.kit.common.archive.AssemblyFileSetUtils.copy(AssemblyFileSetUtils.java:170)
at org.eclipse.jkube.kit.common.archive.AssemblyFileSetUtils.copy(AssemblyFileSetUtils.java:170)
at org.eclipse.jkube.kit.common.archive.AssemblyFileSetUtils.copy(AssemblyFileSetUtils.java:170)
at org.eclipse.jkube.kit.common.archive.AssemblyFileSetUtils.copy(AssemblyFileSetUtils.java:170)
at org.eclipse.jkube.kit.common.archive.AssemblyFileSetUtils.copy(AssemblyFileSetUtils.java:170)
at org.eclipse.jkube.kit.common.archive.AssemblyFileSetUtils.copy(AssemblyFileSetUtils.java:170)
at org.eclipse.jkube.kit.common.archive.AssemblyFileSetUtils.copy(AssemblyFileSetUtils.java:170)
at org.eclipse.jkube.kit.common.archive.AssemblyFileSetUtils.copy(AssemblyFileSetUtils.java:170)
at org.eclipse.jkube.kit.common.archive.AssemblyFileSetUtils.copy(AssemblyFileSetUtils.java:170)
at org.eclipse.jkube.kit.common.archive.AssemblyFileSetUtils.copy(AssemblyFileSetUtils.java:170)
at org.eclipse.jkube.kit.common.archive.AssemblyFileSetUtils.copy(AssemblyFileSetUtils.java:170)
at org.eclipse.jkube.kit.common.archive.AssemblyFileSetUtils.copy(AssemblyFileSetUtils.java:170)
at org.eclipse.jkube.kit.common.archive.AssemblyFileSetUtils.copy(AssemblyFileSetUtils.java:170)
at org.eclipse.jkube.kit.common.archive.AssemblyFileSetUtils.copy(AssemblyFileSetUtils.java:170)
at org.eclipse.jkube.kit.common.archive.AssemblyFileSetUtils.copy(AssemblyFileSetUtils.java:170)
at org.eclipse.jkube.kit.common.archive.AssemblyFileSetUtils.copy(AssemblyFileSetUtils.java:170)
at org.eclipse.jkube.kit.common.archive.AssemblyFileSetUtils.copy(AssemblyFileSetUtils.java:170)
at org.eclipse.jkube.kit.common.archive.AssemblyFileSetUtils.copy(AssemblyFileSetUtils.java:170)
at org.eclipse.jkube.kit.common.archive.AssemblyFileSetUtils.copy(AssemblyFileSetUtils.java:170)
at org.eclipse.jkube.kit.common.archive.AssemblyFileSetUtils.copy(AssemblyFileSetUtils.java:170)
at org.eclipse.jkube.kit.common.archive.AssemblyFileSetUtils.copy(AssemblyFileSetUtils.java:170)
at org.eclipse.jkube.kit.common.archive.AssemblyFileSetUtils.copy(AssemblyFileSetUtils.java:170)
at org.eclipse.jkube.kit.common.archive.AssemblyFileSetUtils.copy(AssemblyFileSetUtils.java:170)
at org.eclipse.jkube.kit.common.archive.AssemblyFileSetUtils.copy(AssemblyFileSetUtils.java:170)
at org.eclipse.jkube.kit.common.archive.AssemblyFileSetUtils.copy(AssemblyFileSetUtils.java:170)
at org.eclipse.jkube.kit.common.archive.AssemblyFileSetUtils.copy(AssemblyFileSetUtils.java:170)
at org.eclipse.jkube.kit.common.archive.AssemblyFileSetUtils.copy(AssemblyFileSetUtils.java:170)
at org.eclipse.jkube.kit.common.archive.AssemblyFileSetUtils.copy(AssemblyFileSetUtils.java:170)
at org.eclipse.jkube.kit.common.archive.AssemblyFileSetUtils.copy(AssemblyFileSetUtils.java:170)
at org.eclipse.jkube.kit.common.archive.AssemblyFileSetUtils.copy(AssemblyFileSetUtils.java:170)
at org.eclipse.jkube.kit.common.archive.AssemblyFileSetUtils.copy(AssemblyFileSetUtils.java:170)
at org.eclipse.jkube.kit.common.archive.AssemblyFileSetUtils.copy(AssemblyFileSetUtils.java:170)
at org.eclipse.jkube.kit.common.archive.AssemblyFileSetUtils.copy(AssemblyFileSetUtils.java:170)
at org.eclipse.jkube.kit.common.archive.AssemblyFileSetUtils.copy(AssemblyFileSetUtils.java:170)
at org.eclipse.jkube.kit.common.archive.AssemblyFileSetUtils.copy(AssemblyFileSetUtils.java:170)
at org.eclipse.jkube.kit.common.archive.AssemblyFileSetUtils.copy(AssemblyFileSetUtils.java:170)
at org.eclipse.jkube.kit.common.archive.AssemblyFileSetUtils.copy(AssemblyFileSetUtils.java:170)
at org.eclipse.jkube.kit.common.archive.AssemblyFileSetUtils.copy(AssemblyFileSetUtils.java:170)
at org.eclipse.jkube.kit.common.archive.AssemblyFileSetUtils.copy(AssemblyFileSetUtils.java:170)
at org.eclipse.jkube.kit.common.archive.AssemblyFileSetUtils.copy(AssemblyFileSetUtils.java:170)
at org.eclipse.jkube.kit.common.archive.AssemblyFileSetUtils.copy(AssemblyFileSetUtils.java:170)
at org.eclipse.jkube.kit.common.archive.AssemblyFileSetUtils.copy(AssemblyFileSetUtils.java:170)
at org.eclipse.jkube.kit.common.archive.AssemblyFileSetUtils.copy(AssemblyFileSetUtils.java:170)
at org.eclipse.jkube.kit.common.archive.AssemblyFileSetUtils.copy(AssemblyFileSetUtils.java:170)
at org.eclipse.jkube.kit.common.archive.AssemblyFileSetUtils.copy(AssemblyFileSetUtils.java:170)
at org.eclipse.jkube.kit.common.archive.AssemblyFileSetUtils.copy(AssemblyFileSetUtils.java:170)
at org.eclipse.jkube.kit.common.archive.AssemblyFileSetUtils.copy(AssemblyFileSetUtils.java:170)
at org.eclipse.jkube.kit.common.archive.AssemblyFileSetUtils.copy(AssemblyFileSetUtils.java:170)
at org.eclipse.jkube.kit.common.archive.AssemblyFileSetUtils.copy(AssemblyFileSetUtils.java:170)
at org.eclipse.jkube.kit.common.archive.AssemblyFileSetUtils.copy(AssemblyFileSetUtils.java:170)
at org.eclipse.jkube.kit.common.archive.AssemblyFileSetUtils.copy(AssemblyFileSetUtils.java:170)
at org.eclipse.jkube.kit.common.archive.AssemblyFileSetUtils.copy(AssemblyFileSetUtils.java:170)
at org.eclipse.jkube.kit.common.archive.AssemblyFileSetUtils.copy(AssemblyFileSetUtils.java:170)
at org.eclipse.jkube.kit.common.archive.AssemblyFileSetUtils.copy(AssemblyFileSetUtils.java:170)
at org.eclipse.jkube.kit.common.archive.AssemblyFileSetUtils.copy(AssemblyFileSetUtils.java:170)
at org.eclipse.jkube.kit.common.archive.AssemblyFileSetUtils.copy(AssemblyFileSetUtils.java:170)
at org.eclipse.jkube.kit.common.archive.AssemblyFileSetUtils.copy(AssemblyFileSetUtils.java:170)
at org.eclipse.jkube.kit.common.archive.AssemblyFileSetUtils.copy(AssemblyFileSetUtils.java:170)
at org.eclipse.jkube.kit.common.archive.AssemblyFileSetUtils.copy(AssemblyFileSetUtils.java:170)
at org.eclipse.jkube.kit.common.archive.AssemblyFileSetUtils.copy(AssemblyFileSetUtils.java:170)
at org.eclipse.jkube.kit.common.archive.AssemblyFileSetUtils.copy(AssemblyFileSetUtils.java:170)
at org.eclipse.jkube.kit.common.archive.AssemblyFileSetUtils.copy(AssemblyFileSetUtils.java:170)
at org.eclipse.jkube.kit.common.archive.AssemblyFileSetUtils.copy(AssemblyFileSetUtils.java:170)
at org.eclipse.jkube.kit.common.archive.AssemblyFileSetUtils.copy(AssemblyFileSetUtils.java:170)
at org.eclipse.jkube.kit.common.archive.AssemblyFileSetUtils.copy(AssemblyFileSetUtils.java:170)
at org.eclipse.jkube.kit.common.archive.AssemblyFileSetUtils.copy(AssemblyFileSetUtils.java:170)
at org.eclipse.jkube.kit.common.archive.AssemblyFileSetUtils.copy(AssemblyFileSetUtils.java:170)
at org.eclipse.jkube.kit.common.archive.AssemblyFileSetUtils.copy(AssemblyFileSetUtils.java:170)
at org.eclipse.jkube.kit.common.archive.AssemblyFileSetUtils.copy(AssemblyFileSetUtils.java:170)
at org.eclipse.jkube.kit.common.archive.AssemblyFileSetUtils.copy(AssemblyFileSetUtils.java:170)
at org.eclipse.jkube.kit.common.archive.AssemblyFileSetUtils.copy(AssemblyFileSetUtils.java:170)
at org.eclipse.jkube.kit.common.archive.AssemblyFileSetUtils.copy(AssemblyFileSetUtils.java:170)
at org.eclipse.jkube.kit.common.archive.AssemblyFileSetUtils.copy(AssemblyFileSetUtils.java:170)
at org.eclipse.jkube.kit.common.archive.AssemblyFileSetUtils.copy(AssemblyFileSetUtils.java:170)
at org.eclipse.jkube.kit.common.archive.AssemblyFileSetUtils.copy(AssemblyFileSetUtils.java:170)
at org.eclipse.jkube.kit.common.archive.AssemblyFileSetUtils.copy(AssemblyFileSetUtils.java:170)
at org.eclipse.jkube.kit.common.archive.AssemblyFileSetUtils.copy(AssemblyFileSetUtils.java:170)
at org.eclipse.jkube.kit.common.archive.AssemblyFileSetUtils.copy(AssemblyFileSetUtils.java:170)
at org.eclipse.jkube.kit.common.archive.AssemblyFileSetUtils.copy(AssemblyFileSetUtils.java:170)
at org.eclipse.jkube.kit.common.archive.AssemblyFileSetUtils.copy(AssemblyFileSetUtils.java:170)
at org.eclipse.jkube.kit.common.archive.AssemblyFileSetUtils.copy(AssemblyFileSetUtils.java:170)
at org.eclipse.jkube.kit.common.archive.AssemblyFileSetUtils.copy(AssemblyFileSetUtils.java:170)
at org.eclipse.jkube.kit.common.archive.AssemblyFileSetUtils.copy(AssemblyFileSetUtils.java:170)
at org.eclipse.jkube.kit.common.archive.AssemblyFileSetUtils.copy(AssemblyFileSetUtils.java:170)
at org.eclipse.jkube.kit.common.archive.AssemblyFileSetUtils.copy(AssemblyFileSetUtils.java:170)
at org.eclipse.jkube.kit.common.archive.AssemblyFileSetUtils.copy(AssemblyFileSetUtils.java:170)
at org.eclipse.jkube.kit.common.archive.AssemblyFileSetUtils.copy(AssemblyFileSetUtils.java:170)
at org.eclipse.jkube.kit.common.archive.AssemblyFileSetUtils.copy(AssemblyFileSetUtils.java:170)
at org.eclipse.jkube.kit.common.archive.AssemblyFileSetUtils.copy(AssemblyFileSetUtils.java:170)
at org.eclipse.jkube.kit.common.archive.AssemblyFileSetUtils.copy(AssemblyFileSetUtils.java:170)
at org.eclipse.jkube.kit.common.archive.AssemblyFileSetUtils.copy(AssemblyFileSetUtils.java:170)
at org.eclipse.jkube.kit.common.archive.AssemblyFileSetUtils.copy(AssemblyFileSetUtils.java:170)
at org.eclipse.jkube.kit.common.archive.AssemblyFileSetUtils.copy(AssemblyFileSetUtils.java:170)
at org.eclipse.jkube.kit.common.archive.AssemblyFileSetUtils.copy(AssemblyFileSetUtils.java:170)
at org.eclipse.jkube.kit.common.archive.AssemblyFileSetUtils.copy(AssemblyFileSetUtils.java:170)
at org.eclipse.jkube.kit.common.archive.AssemblyFileSetUtils.copy(AssemblyFileSetUtils.java:170)
at org.eclipse.jkube.kit.common.archive.AssemblyFileSetUtils.copy(AssemblyFileSetUtils.java:170)
at org.eclipse.jkube.kit.common.archive.AssemblyFileSetUtils.copy(AssemblyFileSetUtils.java:170)
at org.eclipse.jkube.kit.common.archive.AssemblyFileSetUtils.copy(AssemblyFileSetUtils.java:170)
at org.eclipse.jkube.kit.common.archive.AssemblyFileSetUtils.copy(AssemblyFileSetUtils.java:170)
at org.eclipse.jkube.kit.common.archive.AssemblyFileSetUtils.copy(AssemblyFileSetUtils.java:170)
at org.eclipse.jkube.kit.common.archive.AssemblyFileSetUtils.copy(AssemblyFileSetUtils.java:170)
at org.eclipse.jkube.kit.common.archive.AssemblyFileSetUtils.copy(AssemblyFileSetUtils.java:170)
at org.eclipse.jkube.kit.common.archive.AssemblyFileSetUtils.copy(AssemblyFileSetUtils.java:170)
at org.eclipse.jkube.kit.common.archive.AssemblyFileSetUtils.copy(AssemblyFileSetUtils.java:170)
at org.eclipse.jkube.kit.common.archive.AssemblyFileSetUtils.copy(AssemblyFileSetUtils.java:170)
at org.eclipse.jkube.kit.common.archive.AssemblyFileSetUtils.copy(AssemblyFileSetUtils.java:170)
at org.eclipse.jkube.kit.common.archive.AssemblyFileSetUtils.copy(AssemblyFileSetUtils.java:170)
at org.eclipse.jkube.kit.common.archive.AssemblyFileSetUtils.copy(AssemblyFileSetUtils.java:170)
at org.eclipse.jkube.kit.common.archive.AssemblyFileSetUtils.copy(AssemblyFileSetUtils.java:170)
at org.eclipse.jkube.kit.common.archive.AssemblyFileSetUtils.copy(AssemblyFileSetUtils.java:170)
at org.eclipse.jkube.kit.common.archive.AssemblyFileSetUtils.copy(AssemblyFileSetUtils.java:170)
at org.eclipse.jkube.kit.common.archive.AssemblyFileSetUtils.copy(AssemblyFileSetUtils.java:170)
at org.eclipse.jkube.kit.common.archive.AssemblyFileSetUtils.copy(AssemblyFileSetUtils.java:170)
at org.eclipse.jkube.kit.common.archive.AssemblyFileSetUtils.copy(AssemblyFileSetUtils.java:170)
at org.eclipse.jkube.kit.common.archive.AssemblyFileSetUtils.copy(AssemblyFileSetUtils.java:170)
This is occurring due to two reasons, one them is the relativized path for the source, which should return the path in target/<directory-name> form but returns <directory name>
The source code relativization of path is given below sourceDirectory.relativize(path).normalize()
This should return target/<directory-name> because the glob pattern created at AssemblyManager.createDockerExcludesList() is target{/**,} which would remove any files in target, which leads to our 2nd issue.
The second issue is that, we are not supposed to exclude all files in target but just the destination subdirectory from it or any directories specified by the user. but due to the above glob glob:target{/**,} all the files are being excluded when we change the relativized path to the correct form.
When all the files are being excluded nothing happens and it never enters the copy() block of the code.
The same issue was encountered with Linux but it doesn't return a StackOverflow rather it returns:
File name too long
at java.base/sun.nio.fs.UnixException.translateToIOException(UnixException.java:100)
at java.base/sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:106)
at java.base/sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:111)
at java.base/sun.nio.fs.UnixCopyFile.copyFile(UnixCopyFile.java:246)
at java.base/sun.nio.fs.UnixCopyFile.copy(UnixCopyFile.java:603)
at java.base/sun.nio.fs.UnixFileSystemProvider.copy(UnixFileSystemProvider.java:257)
at java.base/java.nio.file.Files.copy(Files.java:1305)
at org.eclipse.jkube.kit.common.util.FileUtil.copy(FileUtil.java:205)
at org.eclipse.jkube.kit.common.util.FileUtil.copy(FileUtil.java:201)
at org.eclipse.jkube.kit.common.archive.AssemblyFileSetUtils.copy(AssemblyFileSetUtils.java:173)
at org.eclipse.jkube.kit.common.archive.AssemblyFileSetUtils.copy(AssemblyFileSetUtils.java:170)
at org.eclipse.jkube.kit.common.archive.AssemblyFileSetUtils.copy(AssemblyFileSetUtils.java:170)
at org.eclipse.jkube.kit.common.archive.AssemblyFileSetUtils.copy(AssemblyFileSetUtils.java:170)
at org.eclipse.jkube.kit.common.archive.AssemblyFileSetUtils.copy(AssemblyFileSetUtils.java:170)
at org.eclipse.jkube.kit.common.archive.AssemblyFileSetUtils.copy(AssemblyFileSetUtils.java:170)
at org.eclipse.jkube.kit.common.archive.AssemblyFileSetUtils.copy(AssemblyFileSetUtils.java:170)
at org.eclipse.jkube.kit.common.archive.AssemblyFileSetUtils.copy(AssemblyFileSetUtils.java:170)
at org.eclipse.jkube.kit.common.archive.AssemblyFileSetUtils.copy(AssemblyFileSetUtils.java:170)
at org.eclipse.jkube.kit.common.archive.AssemblyFileSetUtils.copy(AssemblyFileSetUtils.java:170)
at org.eclipse.jkube.kit.common.archive.AssemblyFileSetUtils.copy(AssemblyFileSetUtils.java:170)
at org.eclipse.jkube.kit.common.archive.AssemblyFileSetUtils.copy(AssemblyFileSetUtils.java:170)
at org.eclipse.jkube.kit.common.archive.AssemblyFileSetUtils.copy(AssemblyFileSetUtils.java:170)
at org.eclipse.jkube.kit.common.archive.AssemblyFileSetUtils.copy(AssemblyFileSetUtils.java:170)
at org.eclipse.jkube.kit.common.archive.AssemblyFileSetUtils.copy(AssemblyFileSetUtils.java:170)
at org.eclipse.jkube.kit.common.archive.AssemblyFileSetUtils.copy(AssemblyFileSetUtils.java:170)
at org.eclipse.jkube.kit.common.archive.AssemblyFileSetUtils.copy(AssemblyFileSetUtils.java:170)
at org.eclipse.jkube.kit.common.archive.AssemblyFileSetUtils.copy(AssemblyFileSetUtils.java:170)
at org.eclipse.jkube.kit.common.archive.AssemblyFileSetUtils.copy(AssemblyFileSetUtils.java:170)
at org.eclipse.jkube.kit.common.archive.AssemblyFileSetUtils.copy(AssemblyFileSetUtils.java:170)
at org.eclipse.jkube.kit.common.archive.AssemblyFileSetUtils.copy(AssemblyFileSetUtils.java:170)
at org.eclipse.jkube.kit.common.archive.AssemblyFileSetUtils.copy(AssemblyFileSetUtils.java:170)
at org.eclipse.jkube.kit.common.archive.AssemblyFileSetUtils.copy(AssemblyFileSetUtils.java:170)
at org.eclipse.jkube.kit.common.archive.AssemblyFileSetUtils.copy(AssemblyFileSetUtils.java:170)
at org.eclipse.jkube.kit.common.archive.AssemblyFileSetUtils.copy(AssemblyFileSetUtils.java:170)
at org.eclipse.jkube.kit.common.archive.AssemblyFileSetUtils.copy(AssemblyFileSetUtils.java:170)
at org.eclipse.jkube.kit.common.archive.AssemblyFileSetUtils.copy(AssemblyFileSetUtils.java:170)
at org.eclipse.jkube.kit.common.archive.AssemblyFileSetUtils.copy(AssemblyFileSetUtils.java:170)
at org.eclipse.jkube.kit.common.archive.AssemblyFileSetUtils.copy(AssemblyFileSetUtils.java:170)
at org.eclipse.jkube.kit.common.archive.AssemblyFileSetUtils.copy(AssemblyFileSetUtils.java:170)
at org.eclipse.jkube.kit.common.archive.AssemblyFileSetUtils.copy(AssemblyFileSetUtils.java:170)
at org.eclipse.jkube.kit.common.archive.AssemblyFileSetUtils.copy(AssemblyFileSetUtils.java:170)
at org.eclipse.jkube.kit.common.archive.AssemblyFileSetUtils.copy(AssemblyFileSetUtils.java:170)
at org.eclipse.jkube.kit.common.archive.AssemblyFileSetUtils.copy(AssemblyFileSetUtils.java:170)
at org.eclipse.jkube.kit.common.archive.AssemblyFileSetUtils.copy(AssemblyFileSetUtils.java:170)
at org.eclipse.jkube.kit.common.archive.AssemblyFileSetUtils.copy(AssemblyFileSetUtils.java:170)
at org.eclipse.jkube.kit.common.archive.AssemblyFileSetUtils.copy(AssemblyFileSetUtils.java:170)
at org.eclipse.jkube.kit.common.archive.AssemblyFileSetUtils.copy(AssemblyFileSetUtils.java:170)
at org.eclipse.jkube.kit.common.archive.AssemblyFileSetUtils.copy(AssemblyFileSetUtils.java:170)
at org.eclipse.jkube.kit.common.archive.AssemblyFileSetUtils.copy(AssemblyFileSetUtils.java:170)
at org.eclipse.jkube.kit.common.archive.AssemblyFileSetUtils.copy(AssemblyFileSetUtils.java:170)
at org.eclipse.jkube.kit.common.archive.AssemblyFileSetUtils.copy(AssemblyFileSetUtils.java:170)
at org.eclipse.jkube.kit.common.archive.AssemblyFileSetUtils.copy(AssemblyFileSetUtils.java:170)
at org.eclipse.jkube.kit.common.archive.AssemblyFileSetUtils.copy(AssemblyFileSetUtils.java:170)
at org.eclipse.jkube.kit.common.archive.AssemblyFileSetUtils.copy(AssemblyFileSetUtils.java:170)
at org.eclipse.jkube.kit.common.archive.AssemblyFileSetUtils.copy(AssemblyFileSetUtils.java:170)
at org.eclipse.jkube.kit.common.archive.AssemblyFileSetUtils.copy(AssemblyFileSetUtils.java:170)
at org.eclipse.jkube.kit.common.archive.AssemblyFileSetUtils.copy(AssemblyFileSetUtils.java:170)
at org.eclipse.jkube.kit.common.archive.AssemblyFileSetUtils.copy(AssemblyFileSetUtils.java:170)
at org.eclipse.jkube.kit.common.archive.AssemblyFileSetUtils.copy(AssemblyFileSetUtils.java:170)
at org.eclipse.jkube.kit.common.archive.AssemblyFileSetUtils.copy(AssemblyFileSetUtils.java:170)
at org.eclipse.jkube.kit.common.archive.AssemblyFileSetUtils.copy(AssemblyFileSetUtils.java:170)
at org.eclipse.jkube.kit.common.archive.AssemblyFileSetUtils.copy(AssemblyFileSetUtils.java:170)
at org.eclipse.jkube.kit.common.archive.AssemblyFileSetUtils.copy(AssemblyFileSetUtils.java:170)
at org.eclipse.jkube.kit.common.archive.AssemblyFileSetUtils.copy(AssemblyFileSetUtils.java:170)
at org.eclipse.jkube.kit.common.archive.AssemblyFileSetUtils.copy(AssemblyFileSetUtils.java:170)
at org.eclipse.jkube.kit.common.archive.AssemblyFileSetUtils.copy(AssemblyFileSetUtils.java:170)
at org.eclipse.jkube.kit.common.archive.AssemblyFileSetUtils.copy(AssemblyFileSetUtils.java:170)
at org.eclipse.jkube.kit.common.archive.AssemblyFileSetUtils.copy(AssemblyFileSetUtils.java:170)
at org.eclipse.jkube.kit.common.archive.AssemblyFileSetUtils.copy(AssemblyFileSetUtils.java:170)
at org.eclipse.jkube.kit.common.archive.AssemblyFileSetUtils.copy(AssemblyFileSetUtils.java:170)
This issue is occurring due to the same reasons mentioned above but here Unix's System call returns error for File Name Too Long.
@l3002 : Hello, Could you please share steps to reproduce this problem?
@rohanKanojia: Sure, Just change outputDirectory in jKubeServiceHub.Configuration to target.getName() in OpenshiftBuildServiceIntegrationTest
and run mvn clean install for the project.
@manusa / @rohanKanojia: Were you guys able to reproduce the Issue?
@l3002 : I could reproduce the issue after making the abovementioned changes. However, I haven't checked what's causing this. I would like to find answers to these questions
Why is the test working when the absolute path is used in JKubeConfiguration?
.outputDirectory(target.getAbsolutePath())
What's the difference in behavior of isNotExcluded filter when outputDirectory is changed to target.getName()?
@rohanKanojia: I have been working on that and have made some progress with it.
The issue is occurring with target.getName() because it creates the Destination Directory as the sub directory of itself. Whereas the Destination Directory for target.getAbsolutePath() is a directory created outside the target directory. Due to which it never needs to enter the exclusion part.
For target.getAbsolutePath():
NOTE: Here, the
targetis the destination directory.
It actually creates the destination directory in the parent directory of target which is openshift-build-service.
Now, For target.getName():
The exclusion statement should exclude the output sub directory (for example, target/myapp) but it isn't therefore when it enters the if block it checks that it is a directory and force creates it and invokes copy on the all the subdirectory which again invokes the if block and force creates that new directory. Thus, creating an infinite recursion.
Something like this:
and so on.
@l3002 : Do you mean this issue is happening due to wrong expectation set in tests? Just because output directory name is target ?
In Mojos, this value is set to target/docker
https://github.com/eclipse/jkube/blob/8caae1af25655622875bf537b32814fd3648c189/kubernetes-maven-plugin/plugin/src/main/java/org/eclipse/jkube/maven/plugin/mojo/build/AbstractDockerMojo.java#L172-L173
What happens if you change value of target variable to match this value?
target = Files.createDirectories(baseDirectory.toPath().resolve("target").resolve("docker")).toFile();
@rohanKanojia : I don't think that would solve the problem, Because the issue occurring, here,
https://github.com/eclipse/jkube/blob/8caae1af25655622875bf537b32814fd3648c189/jkube-kit/common/src/main/java/org/eclipse/jkube/kit/common/archive/AssemblyFileSetUtils.java#L168
In the copy(), it creates the destination file once it resolves that the file source is a directory. This must have been implemented for the openshift-build-service/target itself which is our initial source directory, because after that when it recursively calls itself, it does that for the files contained in it.
https://github.com/eclipse/jkube/blob/8caae1af25655622875bf537b32814fd3648c189/jkube-kit/common/src/main/java/org/eclipse/jkube/kit/common/archive/AssemblyFileSetUtils.java#L169-L171
But as the destination directory target/myapp/build/maven is also present there it needs an exclusion statement for it so that it doesn't enter the the if block.
https://github.com/eclipse/jkube/blob/8caae1af25655622875bf537b32814fd3648c189/jkube-kit/build/api/src/main/java/org/eclipse/jkube/kit/build/api/assembly/AssemblyManager.java#L453-L465
Here, we needs to add the destination sub directory so that when it actually calls the exclude list and checks if isNotExcluded then for destination this becomes false and it never enters the if block.
The more I look at the test build_withDockerfileModeAndAssembly_shouldSucceed, the more I feel it's not set up correctly:
We're providing Dockerfile inside target directory (which looks a bit strange). https://github.com/eclipse/jkube/blob/b64915ec6090dcb0171e45b6372052278210e6f3/jkube-kit/config/service/src/test/java/org/eclipse/jkube/kit/config/service/openshift/OpenshiftBuildServiceIntegrationTest.java#L224-L224
We don't provide any context directory, which means context directory would be Dockerfile's parent directory. Dockerfile's context directory is added to AssemblyFileSet: https://github.com/eclipse/jkube/blob/8caae1af25655622875bf537b32814fd3648c189/jkube-kit/build/api/src/main/java/org/eclipse/jkube/kit/build/api/assembly/AssemblyManager.java#L432-L435
You can fix it by either changing Dockerfile location to be under base directory:
final File dockerFile = new File(baseDirectory, "Dockerfile");
Or change the output directory to be different from build directory like I advised in my previous comment.
@rohanKanojia: Sorry, I missed your last comment yesterday. I'll see if the changing the Dockerfile's location to baseDirectory works.
I believe changing the output directory to be different from the build directory could work and has a strong chance of working. I'll test this in my local environment and let you know.
@l3002 : Hello, Did you get time to try it out? Is it working?
@rohanKanojia: Hi, Yeah, I checked it yesterday. The solution worked like a charm. I changed the Dockerfile location to baseDirectory.
I'll send in a commit in a few minutes.
I still have some suspicions about the exclusion statement because it wasn't actually working for the any even though it was supposed to. I'll check that some other time though. If I'll find there's any change might be required for that. I'll create a issue for that but for now I guess we can resolve this issue.
Thanks for help again.