Running tests for JDK-8374219 AsyncTest test keeps failing sporadically with the following errors:
---
java.io.UncheckedIOException: java.nio.file.FileSystemException: jtreg_open_test_jdk_tools_jpackage\tmp\jdk.jpackage4236893185129326440\msi\Foo-1.0.msi: The process cannot access the file because it is being used by another process
at jdk.jpackage/jdk.jpackage.internal.DefaultBundlingEnvironment.createBundle(DefaultBundlingEnvironment.java:222)
at jdk.jpackage/jdk.jpackage.internal.WinBundlingEnvironment.createBundle(WinBundlingEnvironment.java:35)
at jdk.jpackage/jdk.jpackage.internal.cli.OptionsProcessor.runBundling(OptionsProcessor.java:227)
at java.base/java.util.Optional.map(Optional.java:264)
at jdk.jpackage/jdk.jpackage.internal.util.Result.map(Result.java:63)
at jdk.jpackage/jdk.jpackage.internal.cli.Main.lambda$run$3(Main.java:177)
at jdk.jpackage/jdk.jpackage.internal.cli.Main$Runner.runIt(Main.java:290)
at jdk.jpackage/jdk.jpackage.internal.cli.Main$Runner.run(Main.java:279)
at jdk.jpackage/jdk.jpackage.internal.cli.Main.run(Main.java:148)
at jdk.jpackage/jdk.jpackage.internal.cli.Main$Provider.run(Main.java:76)
at AsyncTest$Workload$1.run(AsyncTest.java:194)
at java.base/java.util.spi.ToolProvider.run(ToolProvider.java:160)
at jdk.jpackage/jdk.jpackage.internal.util.CommandOutputControl.execute(CommandOutputControl.java:1165)
at jdk.jpackage/jdk.jpackage.internal.util.CommandOutputControl$ToolProviderExecutable.execute(CommandOutputControl.java:1831)
at jdk.jpackage.test.Executor.execute(Executor.java:493)
at jdk.jpackage.test.Executor.runToolProvider(Executor.java:485)
at jdk.jpackage.test.Executor.lambda$executeWithoutExitCodeCheck$0(Executor.java:312)
at jdk.jpackage/jdk.jpackage.internal.util.function.ThrowingSupplier.lambda$toSupplier$0(ThrowingSupplier.java:37)
at jdk.jpackage.test.Executor.executeWithoutExitCodeCheck(Executor.java:320)
at jdk.jpackage.test.Executor.execute(Executor.java:324)
at jdk.jpackage.test.JPackageCommand.execute(JPackageCommand.java:1011)
at jdk.jpackage.test.JPackageCommand.execute(JPackageCommand.java:958)
at jdk.jpackage.test.PackageTest$Handler.processAction(PackageTest.java:729)
at jdk.jpackage.test.PackageTest$PackageTypePipeline.accept(PackageTest.java:579)
at jdk.jpackage.test.PackageTest$PackageTypePipeline.accept(PackageTest.java:512)
at java.base/java.util.ImmutableCollections$List12.forEach(ImmutableCollections.java:691)
at jdk.jpackage.test.PackageTest.lambda$runActions$1(PackageTest.java:486)
at java.base/java.util.ArrayList.forEach(ArrayList.java:1612)
at jdk.jpackage.test.PackageTest.lambda$runActions$0(PackageTest.java:485)
at java.base/java.lang.Iterable.forEach(Iterable.java:75)
at jdk.jpackage.test.PackageTest.runActions(PackageTest.java:484)
at jdk.jpackage.test.RunnablePackageTest.run(RunnablePackageTest.java:58)
at AsyncTest$AsyncInnerTest.testNativeBundle(AsyncTest.java:126)
at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104)
at java.base/java.lang.reflect.Method.invoke(Method.java:565)
at jdk.jpackage.test.MethodCall.accept(MethodCall.java:111)
at jdk.jpackage.test.TestInstance.run(TestInstance.java:239)
at jdk.jpackage.test.TKit.lambda$ignoreExceptions$0(TKit.java:233)
at jdk.jpackage.test.TKit.lambda$runTests$2(TKit.java:188)
at jdk.jpackage/jdk.jpackage.internal.util.function.ThrowingRunnable.lambda$toRunnable$0(ThrowingRunnable.java:35)
at jdk.jpackage.test.TKit.withNewState(TKit.java:158)
at jdk.jpackage.test.TKit.lambda$runTests$1(TKit.java:183)
at java.base/java.util.AbstractList$RandomAccessSpliterator.forEachRemaining(AbstractList.java:722)
at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:803)
at jdk.jpackage.test.TKit.lambda$runTests$0(TKit.java:182)
at jdk.jpackage/jdk.jpackage.internal.util.function.ThrowingRunnable.lambda$toRunnable$0(ThrowingRunnable.java:35)
at jdk.jpackage.test.TKit.withNewState(TKit.java:158)
at jdk.jpackage.test.TKit.withExtraLogStream(TKit.java:123)
at jdk.jpackage.test.TKit.withExtraLogStream(TKit.java:117)
at jdk.jpackage.test.TKit.runTests(TKit.java:181)
at jdk.jpackage.test.TKit.runTests(TKit.java:171)
at jdk.jpackage.test.Main.runTests(Main.java:122)
at jdk.jpackage.test.Main.lambda$main$5(Main.java:118)
at jdk.jpackage/jdk.jpackage.internal.util.function.ThrowingRunnable.lambda$toRunnable$0(ThrowingRunnable.java:35)
at jdk.jpackage.test.TKit.withNewState(TKit.java:158)
at jdk.jpackage.test.TKit.withExtraLogStream(TKit.java:123)
at jdk.jpackage.test.TKit.withExtraLogStream(TKit.java:117)
at jdk.jpackage.test.Main.main(Main.java:118)
at jdk.jpackage.test.Main.main(Main.java:46)
at AsyncTest.lambda$test$1(AsyncTest.java:88)
at jdk.jpackage/jdk.jpackage.internal.util.function.ThrowingRunnable.lambda$toRunnable$0(ThrowingRunnable.java:35)
at jdk.jpackage.test.TKit.withNewState(TKit.java:158)
at jdk.jpackage.test.TKit.withMainLogStream(TKit.java:129)
at AsyncTest$Workload.lambda$call$0(AsyncTest.java:208)
at jdk.jpackage/jdk.jpackage.internal.util.function.ThrowingRunnable.lambda$toRunnable$0(ThrowingRunnable.java:35)
at jdk.jpackage.test.TKit.withNewState(TKit.java:158)
at jdk.jpackage.test.TKit.withStackTraceStream(TKit.java:135)
at AsyncTest$Workload.call(AsyncTest.java:207)
at AsyncTest$Workload.call(AsyncTest.java:156)
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:330)
at java.base/java.util.concurrent.ThreadPerTaskExecutor$ThreadBoundFuture.run(ThreadPerTaskExecutor.java:323)
at java.base/java.lang.VirtualThread.run(VirtualThread.java:471)
Caused by: java.nio.file.FileSystemException: jtreg_open_test_jdk_tools_jpackage\tmp\jdk.jpackage4236893185129326440\msi\Foo-1.0.msi: The process cannot access the file because it is being used by another process
at java.base/sun.nio.fs.WindowsException.translateToIOException(WindowsException.java:92)
at java.base/sun.nio.fs.WindowsException.rethrowAsIOException(WindowsException.java:104)
at java.base/sun.nio.fs.WindowsException.rethrowAsIOException(WindowsException.java:109)
at java.base/sun.nio.fs.WindowsFileSystemProvider.implDelete(WindowsFileSystemProvider.java:270)
at java.base/sun.nio.fs.AbstractFileSystemProvider.delete(AbstractFileSystemProvider.java:105)
at java.base/java.nio.file.Files.delete(Files.java:1056)
at jdk.jpackage/jdk.jpackage.internal.util.FileUtils$RecursiveDeleter.runActionOnPath(FileUtils.java:174)
at jdk.jpackage/jdk.jpackage.internal.util.FileUtils$RecursiveDeleter.visitFile(FileUtils.java:148)
at jdk.jpackage/jdk.jpackage.internal.util.FileUtils$RecursiveDeleter.visitFile(FileUtils.java:142)
at java.base/java.nio.file.Files.walkFileTree(Files.java:2547)
at java.base/java.nio.file.Files.walkFileTree(Files.java:2613)
at jdk.jpackage/jdk.jpackage.internal.util.FileUtils.deleteRecursive(FileUtils.java:51)
at jdk.jpackage/jdk.jpackage.internal.TempDirectory.close(TempDirectory.java:65)
at jdk.jpackage/jdk.jpackage.internal.DefaultBundlingEnvironment.createBundle(DefaultBundlingEnvironment.java:221)
... 71 more
---
The error occurs when jpackage attempts to delete the contents of the temporary directory at [1]. It appears in the "exe" packaging when it creates an msi file in the temporary directory and embeds it in the resources of the exe installer. Then, at exit, jpackage tries to delete the temporary msi file. Sometimes the file appears locked (by antivirus?), and the clean-up fails.
The clean-up failure should not cause the jpackage to exit with an error. It should issue a warning and exit with "0" exit code as long as it has successfully created the output package. It should retry the cleanup a few times.
[1] https://github.com/openjdk/jdk/blob/ecb42341a94326b1ee85ddd7b9ebadce8c952b99/src/jdk.jpackage/share/classes/jdk/jpackage/internal/TempDirectory.java#L65
---
java.io.UncheckedIOException: java.nio.file.FileSystemException: jtreg_open_test_jdk_tools_jpackage\tmp\jdk.jpackage4236893185129326440\msi\Foo-1.0.msi: The process cannot access the file because it is being used by another process
at jdk.jpackage/jdk.jpackage.internal.DefaultBundlingEnvironment.createBundle(DefaultBundlingEnvironment.java:222)
at jdk.jpackage/jdk.jpackage.internal.WinBundlingEnvironment.createBundle(WinBundlingEnvironment.java:35)
at jdk.jpackage/jdk.jpackage.internal.cli.OptionsProcessor.runBundling(OptionsProcessor.java:227)
at java.base/java.util.Optional.map(Optional.java:264)
at jdk.jpackage/jdk.jpackage.internal.util.Result.map(Result.java:63)
at jdk.jpackage/jdk.jpackage.internal.cli.Main.lambda$run$3(Main.java:177)
at jdk.jpackage/jdk.jpackage.internal.cli.Main$Runner.runIt(Main.java:290)
at jdk.jpackage/jdk.jpackage.internal.cli.Main$Runner.run(Main.java:279)
at jdk.jpackage/jdk.jpackage.internal.cli.Main.run(Main.java:148)
at jdk.jpackage/jdk.jpackage.internal.cli.Main$Provider.run(Main.java:76)
at AsyncTest$Workload$1.run(AsyncTest.java:194)
at java.base/java.util.spi.ToolProvider.run(ToolProvider.java:160)
at jdk.jpackage/jdk.jpackage.internal.util.CommandOutputControl.execute(CommandOutputControl.java:1165)
at jdk.jpackage/jdk.jpackage.internal.util.CommandOutputControl$ToolProviderExecutable.execute(CommandOutputControl.java:1831)
at jdk.jpackage.test.Executor.execute(Executor.java:493)
at jdk.jpackage.test.Executor.runToolProvider(Executor.java:485)
at jdk.jpackage.test.Executor.lambda$executeWithoutExitCodeCheck$0(Executor.java:312)
at jdk.jpackage/jdk.jpackage.internal.util.function.ThrowingSupplier.lambda$toSupplier$0(ThrowingSupplier.java:37)
at jdk.jpackage.test.Executor.executeWithoutExitCodeCheck(Executor.java:320)
at jdk.jpackage.test.Executor.execute(Executor.java:324)
at jdk.jpackage.test.JPackageCommand.execute(JPackageCommand.java:1011)
at jdk.jpackage.test.JPackageCommand.execute(JPackageCommand.java:958)
at jdk.jpackage.test.PackageTest$Handler.processAction(PackageTest.java:729)
at jdk.jpackage.test.PackageTest$PackageTypePipeline.accept(PackageTest.java:579)
at jdk.jpackage.test.PackageTest$PackageTypePipeline.accept(PackageTest.java:512)
at java.base/java.util.ImmutableCollections$List12.forEach(ImmutableCollections.java:691)
at jdk.jpackage.test.PackageTest.lambda$runActions$1(PackageTest.java:486)
at java.base/java.util.ArrayList.forEach(ArrayList.java:1612)
at jdk.jpackage.test.PackageTest.lambda$runActions$0(PackageTest.java:485)
at java.base/java.lang.Iterable.forEach(Iterable.java:75)
at jdk.jpackage.test.PackageTest.runActions(PackageTest.java:484)
at jdk.jpackage.test.RunnablePackageTest.run(RunnablePackageTest.java:58)
at AsyncTest$AsyncInnerTest.testNativeBundle(AsyncTest.java:126)
at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104)
at java.base/java.lang.reflect.Method.invoke(Method.java:565)
at jdk.jpackage.test.MethodCall.accept(MethodCall.java:111)
at jdk.jpackage.test.TestInstance.run(TestInstance.java:239)
at jdk.jpackage.test.TKit.lambda$ignoreExceptions$0(TKit.java:233)
at jdk.jpackage.test.TKit.lambda$runTests$2(TKit.java:188)
at jdk.jpackage/jdk.jpackage.internal.util.function.ThrowingRunnable.lambda$toRunnable$0(ThrowingRunnable.java:35)
at jdk.jpackage.test.TKit.withNewState(TKit.java:158)
at jdk.jpackage.test.TKit.lambda$runTests$1(TKit.java:183)
at java.base/java.util.AbstractList$RandomAccessSpliterator.forEachRemaining(AbstractList.java:722)
at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:803)
at jdk.jpackage.test.TKit.lambda$runTests$0(TKit.java:182)
at jdk.jpackage/jdk.jpackage.internal.util.function.ThrowingRunnable.lambda$toRunnable$0(ThrowingRunnable.java:35)
at jdk.jpackage.test.TKit.withNewState(TKit.java:158)
at jdk.jpackage.test.TKit.withExtraLogStream(TKit.java:123)
at jdk.jpackage.test.TKit.withExtraLogStream(TKit.java:117)
at jdk.jpackage.test.TKit.runTests(TKit.java:181)
at jdk.jpackage.test.TKit.runTests(TKit.java:171)
at jdk.jpackage.test.Main.runTests(Main.java:122)
at jdk.jpackage.test.Main.lambda$main$5(Main.java:118)
at jdk.jpackage/jdk.jpackage.internal.util.function.ThrowingRunnable.lambda$toRunnable$0(ThrowingRunnable.java:35)
at jdk.jpackage.test.TKit.withNewState(TKit.java:158)
at jdk.jpackage.test.TKit.withExtraLogStream(TKit.java:123)
at jdk.jpackage.test.TKit.withExtraLogStream(TKit.java:117)
at jdk.jpackage.test.Main.main(Main.java:118)
at jdk.jpackage.test.Main.main(Main.java:46)
at AsyncTest.lambda$test$1(AsyncTest.java:88)
at jdk.jpackage/jdk.jpackage.internal.util.function.ThrowingRunnable.lambda$toRunnable$0(ThrowingRunnable.java:35)
at jdk.jpackage.test.TKit.withNewState(TKit.java:158)
at jdk.jpackage.test.TKit.withMainLogStream(TKit.java:129)
at AsyncTest$Workload.lambda$call$0(AsyncTest.java:208)
at jdk.jpackage/jdk.jpackage.internal.util.function.ThrowingRunnable.lambda$toRunnable$0(ThrowingRunnable.java:35)
at jdk.jpackage.test.TKit.withNewState(TKit.java:158)
at jdk.jpackage.test.TKit.withStackTraceStream(TKit.java:135)
at AsyncTest$Workload.call(AsyncTest.java:207)
at AsyncTest$Workload.call(AsyncTest.java:156)
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:330)
at java.base/java.util.concurrent.ThreadPerTaskExecutor$ThreadBoundFuture.run(ThreadPerTaskExecutor.java:323)
at java.base/java.lang.VirtualThread.run(VirtualThread.java:471)
Caused by: java.nio.file.FileSystemException: jtreg_open_test_jdk_tools_jpackage\tmp\jdk.jpackage4236893185129326440\msi\Foo-1.0.msi: The process cannot access the file because it is being used by another process
at java.base/sun.nio.fs.WindowsException.translateToIOException(WindowsException.java:92)
at java.base/sun.nio.fs.WindowsException.rethrowAsIOException(WindowsException.java:104)
at java.base/sun.nio.fs.WindowsException.rethrowAsIOException(WindowsException.java:109)
at java.base/sun.nio.fs.WindowsFileSystemProvider.implDelete(WindowsFileSystemProvider.java:270)
at java.base/sun.nio.fs.AbstractFileSystemProvider.delete(AbstractFileSystemProvider.java:105)
at java.base/java.nio.file.Files.delete(Files.java:1056)
at jdk.jpackage/jdk.jpackage.internal.util.FileUtils$RecursiveDeleter.runActionOnPath(FileUtils.java:174)
at jdk.jpackage/jdk.jpackage.internal.util.FileUtils$RecursiveDeleter.visitFile(FileUtils.java:148)
at jdk.jpackage/jdk.jpackage.internal.util.FileUtils$RecursiveDeleter.visitFile(FileUtils.java:142)
at java.base/java.nio.file.Files.walkFileTree(Files.java:2547)
at java.base/java.nio.file.Files.walkFileTree(Files.java:2613)
at jdk.jpackage/jdk.jpackage.internal.util.FileUtils.deleteRecursive(FileUtils.java:51)
at jdk.jpackage/jdk.jpackage.internal.TempDirectory.close(TempDirectory.java:65)
at jdk.jpackage/jdk.jpackage.internal.DefaultBundlingEnvironment.createBundle(DefaultBundlingEnvironment.java:221)
... 71 more
---
The error occurs when jpackage attempts to delete the contents of the temporary directory at [1]. It appears in the "exe" packaging when it creates an msi file in the temporary directory and embeds it in the resources of the exe installer. Then, at exit, jpackage tries to delete the temporary msi file. Sometimes the file appears locked (by antivirus?), and the clean-up fails.
The clean-up failure should not cause the jpackage to exit with an error. It should issue a warning and exit with "0" exit code as long as it has successfully created the output package. It should retry the cleanup a few times.
[1] https://github.com/openjdk/jdk/blob/ecb42341a94326b1ee85ddd7b9ebadce8c952b99/src/jdk.jpackage/share/classes/jdk/jpackage/internal/TempDirectory.java#L65
- duplicates
-
JDK-8378299 Test Test tools/jpackage/share/AsyncTest.java failed: The process cannot access the file because it is being used by another process
-
- Closed
-
- links to
-
Commit(master)
openjdk/jdk/9d4fbbe3
-
Review(master)
openjdk/jdk/29664