Uploaded image for project: 'Jenkins'
  1. Jenkins
  2. JENKINS-33193

UnsatisfiedLinkError after a Windows agent's service fails to restart

XMLWordPrintable

    • Icon: Bug Bug
    • Resolution: Done
    • Icon: Minor Minor
    • tfs-plugin
    • None

      Steps to reproduce:

      1. Queue a build with TFVC against a specific agent (thus loading native libraries)
      2. Restart master
      3. Queue the same build to execute on the same agent

      Actual results:

      java.lang.RuntimeException: java.io.IOException: Remote call on AGENT failed
      	at hudson.plugins.tfs.model.Server.execute(Server.java:157)
      	at hudson.plugins.tfs.model.Project.extractChangesetNumber(Project.java:272)
      	at hudson.plugins.tfs.model.Project.getRemoteChangesetVersion(Project.java:268)
      	at hudson.plugins.tfs.model.Project.getRemoteChangesetVersion(Project.java:284)
      	at hudson.plugins.tfs.TeamFoundationServerScm.recordWorkspaceChangesetVersion(TeamFoundationServerScm.java:311)
      	at hudson.plugins.tfs.TeamFoundationServerScm.checkout(TeamFoundationServerScm.java:260)
      	at hudson.model.AbstractProject.checkout(AbstractProject.java:1276)
      	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)
      Caused by: java.io.IOException: Remote call on AGENT failed
      	at hudson.remoting.Channel.call(Channel.java:789)
      	at hudson.plugins.tfs.model.Server.execute(Server.java:153)
      	... 13 more
      Caused by: java.lang.UnsatisfiedLinkError: com.microsoft.tfs.jni.internal.platformmisc.NativePlatformMisc.nativeGetEnvironmentVariable(Ljava/lang/String;)Ljava/lang/String;
      	at com.microsoft.tfs.jni.internal.platformmisc.NativePlatformMisc.nativeGetEnvironmentVariable(Native Method)
      	at com.microsoft.tfs.jni.internal.platformmisc.NativePlatformMisc.getEnvironmentVariable(NativePlatformMisc.java:134)
      	at com.microsoft.tfs.jni.PlatformMiscUtils.getEnvironmentVariable(PlatformMiscUtils.java:52)
      	at com.microsoft.tfs.core.config.EnvironmentVariables.getString(EnvironmentVariables.java:251)
      	at com.microsoft.tfs.core.config.EnvironmentVariables.getBoolean(EnvironmentVariables.java:235)
      	at com.microsoft.tfs.core.config.httpclient.DefaultHTTPClientFactory.getUserAgent(DefaultHTTPClientFactory.java:365)
      	at com.microsoft.tfs.core.config.httpclient.DefaultHTTPClientFactory.configureClientParams(DefaultHTTPClientFactory.java:323)
      	at com.microsoft.tfs.core.config.httpclient.DefaultHTTPClientFactory.newHTTPClient(DefaultHTTPClientFactory.java:142)
      	at com.microsoft.tfs.core.TFSConnection.getHTTPClient(TFSConnection.java:1066)
      	at com.microsoft.tfs.core.TFSConnection.getWebService(TFSConnection.java:894)
      	at com.microsoft.tfs.core.config.client.DefaultClientFactory$7.newClient(DefaultClientFactory.java:239)
      	at com.microsoft.tfs.core.config.client.DefaultClientFactory.newClient(DefaultClientFactory.java:98)
      	at com.microsoft.tfs.core.TFSConnection.getClient(TFSConnection.java:1508)
      	at com.microsoft.tfs.core.TFSTeamProjectCollection.getVersionControlClient(TFSTeamProjectCollection.java:377)
      	at hudson.plugins.tfs.model.Server.getVersionControlClient(Server.java:142)
      	at hudson.plugins.tfs.commands.RemoteChangesetVersionCommand.call(RemoteChangesetVersionCommand.java:56)
      	at hudson.plugins.tfs.commands.RemoteChangesetVersionCommand.call(RemoteChangesetVersionCommand.java:33)
      	at hudson.remoting.UserRequest.perform(UserRequest.java:121)
      	at hudson.remoting.UserRequest.perform(UserRequest.java:49)
      	at hudson.remoting.Request$2.run(Request.java:325)
      	at hudson.remoting.InterceptingExecutorService$1.call(InterceptingExecutorService.java:68)
      	at java.util.concurrent.FutureTask.run(Unknown Source)
      	at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
      	at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
      	at hudson.remoting.Engine$1$1.run(Engine.java:69)
      	at java.lang.Thread.run(Unknown Source)
      	at ......remote call to AGENT(Native Method)
      	at hudson.remoting.Channel.attachCallSiteStackTrace(Channel.java:1416)
      	at hudson.remoting.UserResponse.retrieve(UserRequest.java:220)
      	at hudson.remoting.Channel.call(Channel.java:781)
      	... 14 more
      

      Notes

      Looking in the log on the agent, I see:

      INFO: Restarting slave via jenkins.slaves.restarter.WinswSlaveRestarter@18f5ce68
      Feb 27, 2016 2:02:21 PM jenkins.slaves.restarter.JnlpSlaveRestarterInstaller$2$1 onReconnect
      SEVERE: Failed to restart slave with jenkins.slaves.restarter.WinswSlaveRestarter@18f5ce68
      java.io.IOException: Restart failure. 'C:\path-to-jenkins\jenkins-slave.exe restart' completed with 0 but I'm still alive!  See https://wiki.jenkins-ci.org/display/JENKINS/Distributed+builds#Distributedbuilds-Windowsslaveserviceupgrades for a possible explanation and solution
      	at jenkins.slaves.restarter.WinswSlaveRestarter.restart(WinswSlaveRestarter.java:54)
      	at jenkins.slaves.restarter.JnlpSlaveRestarterInstaller$2$1.onReconnect(JnlpSlaveRestarterInstaller.java:77)
      	at hudson.remoting.EngineListenerSplitter.onReconnect(EngineListenerSplitter.java:49)
      	at hudson.remoting.Engine.run(Engine.java:288)
      

      It might be possible to catch IOException in Server#execute, check if it's due to UnsatisfiedLinkError and point users to the same wiki page, allowing confused users to skip the step where they have to go figure out what's going on by browsing the agent's log.

            dastahel David Staheli
            oli_at_jsi Olivier Dagenais
            Votes:
            0 Vote for this issue
            Watchers:
            4 Start watching this issue

              Created:
              Updated:
              Resolved: