We are having a problem on Jenkins server on Windows, that has Subversion plugin, which uses a native Java SVNKIT instead of the "real" subversion binaries. This has always struck me as problematic, as there have always (for the last 3 years) been weird things during checkouts and updates that only occurred in svnkit, that were not reproducible for me with main svn client. I am experiencing one of those now, it happens once every 24 to 48 hours, about one in 20 times that our main unit-test job runs. When I use some tools to inspect the situation, it is the java.exe (jvm) that hosts the Jenkins task itself, which is holding onto a file-handle of a .tmp file inside the .svn folder of my workspace/working-copy, which causes it to fail. It detects a lock after the first chance failure, then the fresh working copy fails to check out as well.
Java.exe will not release its lock on c:\workspace\smoketest-delta2\.\.svn\svn.e130882e-5301-0010-8f8c-a3d25f9ae1e6.tmp until I basically shut down the Jenkins service. here's the log output: Started by an SCM change Building in workspace c:\workspace\smoketest-delta2 Updating *http://svn.myorg.biz/core/trunk/powerserver* <http://svn.ramsoft.biz/core/trunk/powerserver> at revision '2016-02-29T14:36:39.012 -0500' Workspace appear to be locked, so getting a fresh workspace Cleaning local Directory . java.nio.file.FileSystemException: c:\workspace\smoketest-delta2\.\.svn\svn.e130882e-5301-0010-8f8c-a3d25f9ae1e6.tmp: The process cannot access the file because it is being used by another process. at sun.nio.fs.WindowsException.translateToIOException(Unknown Source) at sun.nio.fs.WindowsException.rethrowAsIOException(Unknown Source) at sun.nio.fs.WindowsException.rethrowAsIOException(Unknown Source) at sun.nio.fs.WindowsFileSystemProvider.implDelete(Unknown Source) at sun.nio.fs.AbstractFileSystemProvider.delete(Unknown Source) at java.nio.file.Files.delete(Unknown Source) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.lang.reflect.Method.invoke(Unknown Source) at hudson.Util.deleteFile(Util.java:255) at hudson.Util.deleteRecursive(Util.java:318) at hudson.Util.deleteContentsRecursive(Util.java:220) at hudson.Util.deleteRecursive(Util.java:309) at hudson.Util.deleteContentsRecursive(Util.java:220) at hudson.scm.subversion.CheckoutUpdater$1.perform(CheckoutUpdater.java:81) at hudson.scm.subversion.WorkspaceUpdater$UpdateTask.delegateTo(WorkspaceUpdater.java:162) at hudson.scm.subversion.WorkspaceUpdater$UpdateTask.delegateTo(WorkspaceUpdater.java:170) at hudson.scm.subversion.UpdateUpdater$TaskImpl.perform(UpdateUpdater.java:183) at hudson.scm.subversion.WorkspaceUpdater$UpdateTask.delegateTo(WorkspaceUpdater.java:162) at hudson.scm.SubversionSCM$CheckOutTask.perform(SubversionSCM.java:988) at hudson.scm.SubversionSCM$CheckOutTask.invoke(SubversionSCM.java:969) at hudson.scm.SubversionSCM$CheckOutTask.invoke(SubversionSCM.java:945) at hudson.FilePath.act(FilePath.java:990) at hudson.FilePath.act(FilePath.java:968) at hudson.scm.SubversionSCM.checkout(SubversionSCM.java:894) at hudson.scm.SubversionSCM.checkout(SubversionSCM.java:830) at hudson.scm.SCM.checkout(SCM.java:485) at hudson.model.AbstractProject.checkout(AbstractProject.java:1269) at hudson.model.AbstractBuild$AbstractBuildExecution.defaultCheckout(AbstractBuild.java:607) at jenkins.scm.SCMCheckoutStrategy.checkout(SCMCheckoutStrategy.java:86) at hudson.model.AbstractBuild$AbstractBuildExecution.run(AbstractBuild.java:529) at hudson.model.Run.execute(Run.java:1738) at hudson.model.FreeStyleBuild.run(FreeStyleBuild.java:43) at hudson.model.ResourceController.execute(ResourceController.java:98) at hudson.model.Executor.run(Executor.java:410) [description-setter] Description set: Sending e-mails to: dev...@....com Finished: FAILURE Has anyone got any ideas? I'm so frustrated that I am thinking of writing a new Subversion plugin that shells out to a REAL Subversion binary and does the SVN updates using that, because I am floored that the design of SVNkit makes it even POSSIBLE to not let go of file handles. Doesn't java have a try-with-resource syntax just for this purpose? How is it possible that file handles are not immediately released? If anyone has ever debugged SVNKIT, and has any advice, it would be welcomed. I'm a C#, C++, Pascal developer with only minimal Java knowledge, but I'm quite annoyed at SVNKIT for doing this, and perhaps, since I love Jenkins, this is a way I can help the Jenkins community out. The Server is running Windows Server 2012 R2. Windows Search feature is NOT installed. Windows Endpoint Protection (Defender) realtime protection is disabled, and exclusions are also defined for good measure. Jenkins version is 1.647, Subversion plugin version is 2.5.7. I am not sure how to configure additional useful LOGGING for SVN Update actions and problems. Warren -- You received this message because you are subscribed to the Google Groups "Jenkins Users" group. To unsubscribe from this group and stop receiving emails from it, send an email to jenkinsci-users+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/jenkinsci-users/74e2a71e-ae7b-4e7b-906d-f1f2f61df9a0%40googlegroups.com. For more options, visit https://groups.google.com/d/optout.