Uploaded image for project: 'Bitbucket Data Center'
  1. Bitbucket Data Center
  2. BSERV-13562

Error due to stale hook script

    XMLWordPrintable

Details

    Description

      Issue Summary

      When a hook script is added to a repository but not used for some time, it is deleted and the subsequent triggers result into an exception.

      This is reproducible on Data Center: yes

      Steps to Reproduce

      1. Set following configuration in BITBUCKET_HOME/mesh/mesh.properties file - 
        • hookscripts.gc.prune=1
        • hookscripts.gc.raw-interval=PT5M
      2. Start Bitbucket with child sidecar
      3. Create a repository with some content
      4. Use /rest/api/latest/hook-scripts to register a simple PRE receive hook script.
      5. Use /rest/api/latest/projects/<PROJECT_KEY>/repos/<SLUG>/hook-scripts/<script-id> to configure hook script for "push" trigger.
      6. Push a change in the repository and verify that the hook gets triggered.
      7. Push another change after about 55 minutes.
      8. Wait for a little more than 1 hour 10 minutes since the first push OR till this message appears in the atlassian-mesh.log -
        2022-11-14 22:12:38,639 INFO  [task-scheduler1] - c.a.b.m.g.h.s.DefaultHookScriptManager Deleted stale hook script 1-0
        
      1. Push another change in the repository.

      Expected Results

      Pushing the commit is successful and the hook script gets triggered without any error.

      Actual Results

      Pushing fails with an error "remote: Hook script hook-scripts/1/0 not foundtest-script failed" and the below exception is thrown in the atlassian-mesh.log file:

      2022-11-14 22:13:08,292 WARN  [grpc-server:thread-4] admin 5O1LBAB4x1333x9x3 @AAK0IVx1333x3x0 127.0.0.1 "HookScriptService/CallHookScripts" (>1 <1) c.a.b.m.g.Call
      HookScriptsRequestObserver Client sent onCompleted, but some hook scripts have not been received: [hook-scripts/1/0]
      2022-11-14 22:13:08,413 ERROR [grpc-server:thread-4] admin 5O1LBAB4x1333x9x3 @AAK0IVx1333x3x0 127.0.0.1 "HookScriptService/CallHookScripts" (>1 <1) c.a.b.m.g.h.s.
      DefaultHookScriptManager Hook script hook-scripts/1/0 not found
      com.atlassian.bitbucket.mesh.git.hook.script.HookScriptNotFoundException: There is no hook script with ID 'hook-scripts/1/0'
              at com.atlassian.bitbucket.mesh.git.hook.script.DefaultHookScriptManager.getPathOrThrow(DefaultHookScriptManager.java:367)
              at com.atlassian.bitbucket.mesh.git.hook.script.DefaultHookScriptManager.callHookScript(DefaultHookScriptManager.java:286)
              at com.atlassian.bitbucket.mesh.git.hook.script.DefaultHookScriptManager.call(DefaultHookScriptManager.java:122)
              at com.atlassian.bitbucket.mesh.git.hook.script.DefaultHookScriptManager$$FastClassBySpringCGLIB$$8f7b2ecf.invoke(<generated>)
      

      and the following exception in atlassian-bitbucket.log

      2022-11-14 22:13:08,280 INFO  [mesh-grpc-request:thread-5] admin @AAK0IVx1333x3x0 127.0.0.1 "POST /scm/project_1/rep_1.git/git-receive-pack HTTP/1.1" c.a.s.i.s.g.m.GrpcHookScriptClient Sending missing hook scripts [hook-scripts/1/0]
      2022-11-14 22:13:08,284 ERROR [mesh-grpc-request:thread-5] admin @AAK0IVx1333x3x0 127.0.0.1 "POST /scm/project_1/rep_1.git/git-receive-pack HTTP/1.1" c.a.s.i.h.script.DiskHookScriptStore 1: No file exists for version 0
      java.nio.file.NoSuchFileException: /private/tmp/amps-standalone-bitbucket-LATEST/target/bitbucket/home/shared/config/hook-scripts/1-0
      	at sun.nio.fs.UnixException.translateToIOException(UnixException.java:86)
      	at sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:102)
      	at sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:107)
      	at sun.nio.fs.UnixFileSystemProvider.newByteChannel(UnixFileSystemProvider.java:214)
      	at java.nio.file.Files.newByteChannel(Files.java:361)
      	at java.nio.file.Files.newByteChannel(Files.java:407)
      	at java.nio.file.spi.FileSystemProvider.newInputStream(FileSystemProvider.java:384)
      	at java.nio.file.Files.newInputStream(Files.java:152)
      	at com.atlassian.stash.internal.hook.script.DiskHookScriptStore.getExecutable(DiskHookScriptStore.java:181)
      	at com.atlassian.stash.internal.hook.script.DiskHookScriptStore.read(DiskHookScriptStore.java:212)
      	at com.atlassian.stash.internal.hook.script.MeshHookScriptInvoker$PreUpdateHookCallback.onMissingScript(MeshHookScriptInvoker.java:361)
      	at com.atlassian.stash.internal.scm.git.mesh.GrpcHookScriptClient$CallHookScriptsObserver.sendMissingScript(GrpcHookScriptClient.java:183)
      	at com.atlassian.stash.internal.scm.git.mesh.GrpcHookScriptClient$CallHookScriptsObserver.onNext(GrpcHookScriptClient.java:136)
      	at com.atlassian.stash.internal.scm.git.mesh.GrpcHookScriptClient$CallHookScriptsObserver.onNext(GrpcHookScriptClient.java:65)
      	at io.grpc.stub.ClientCalls$StreamObserverToCallListenerAdapter.onMessage(ClientCalls.java:466)
      	at io.grpc.ForwardingClientCallListener.onMessage(ForwardingClientCallListener.java:33)
      	at io.grpc.ForwardingClientCallListener.onMessage(ForwardingClientCallListener.java:33)
      	at com.atlassian.stash.internal.scm.git.mesh.StatefulClientCallListener.onMessage(StatefulClientCallListener.java:45)
      	at io.grpc.ForwardingClientCallListener.onMessage(ForwardingClientCallListener.java:33)
      	at com.atlassian.stash.internal.scm.git.mesh.DeadlinePropagatingClientInterceptor$DeadlinePropagatingListener.onMessage(DeadlinePropagatingClientInterceptor.java:169)
      	at io.grpc.ForwardingClientCallListener.onMessage(ForwardingClientCallListener.java:33)
      	at io.grpc.internal.ClientCallImpl$ClientStreamListenerImpl$1MessagesAvailable.runInternal(ClientCallImpl.java:661)
      	at io.grpc.internal.ClientCallImpl$ClientStreamListenerImpl$1MessagesAvailable.runInContext(ClientCallImpl.java:646)
      	at io.grpc.internal.ContextRunnable.run(ContextRunnable.java:37)
      	at io.grpc.internal.SerializingExecutor.run(SerializingExecutor.java:133)
      	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
      	at java.lang.Thread.run(Thread.java:748)
      	... 1 frame trimmed
      2022-11-14 22:13:08,287 WARN  [mesh-grpc-request:thread-5] admin @AAK0IVx1333x3x0 127.0.0.1 "POST /scm/project_1/rep_1.git/git-receive-pack HTTP/1.1" c.a.s.i.s.g.m.GrpcHookScriptClient [PROJECT_1/rep_1[1]] Could not send hook script hook-scripts/1/0 to git agent
      com.atlassian.bitbucket.hook.script.HookScriptStoreException: Hook script version 1 could not be read.
      	at com.atlassian.stash.internal.hook.script.DiskHookScriptStore.getExecutable(DiskHookScriptStore.java:199)
      	at com.atlassian.stash.internal.hook.script.DiskHookScriptStore.read(DiskHookScriptStore.java:212)
      	at com.atlassian.stash.internal.hook.script.MeshHookScriptInvoker$PreUpdateHookCallback.onMissingScript(MeshHookScriptInvoker.java:361)
      	at com.atlassian.stash.internal.scm.git.mesh.GrpcHookScriptClient$CallHookScriptsObserver.sendMissingScript(GrpcHookScriptClient.java:183)
      	at com.atlassian.stash.internal.scm.git.mesh.GrpcHookScriptClient$CallHookScriptsObserver.onNext(GrpcHookScriptClient.java:136)
      	at com.atlassian.stash.internal.scm.git.mesh.GrpcHookScriptClient$CallHookScriptsObserver.onNext(GrpcHookScriptClient.java:65)
      	at io.grpc.stub.ClientCalls$StreamObserverToCallListenerAdapter.onMessage(ClientCalls.java:466)
      	at io.grpc.ForwardingClientCallListener.onMessage(ForwardingClientCallListener.java:33)
      	at io.grpc.ForwardingClientCallListener.onMessage(ForwardingClientCallListener.java:33)
      	at com.atlassian.stash.internal.scm.git.mesh.StatefulClientCallListener.onMessage(StatefulClientCallListener.java:45)
      	at io.grpc.ForwardingClientCallListener.onMessage(ForwardingClientCallListener.java:33)
      	at com.atlassian.stash.internal.scm.git.mesh.DeadlinePropagatingClientInterceptor$DeadlinePropagatingListener.onMessage(DeadlinePropagatingClientInterceptor.java:169)
      	at io.grpc.ForwardingClientCallListener.onMessage(ForwardingClientCallListener.java:33)
      	at io.grpc.internal.ClientCallImpl$ClientStreamListenerImpl$1MessagesAvailable.runInternal(ClientCallImpl.java:661)
      	at io.grpc.internal.ClientCallImpl$ClientStreamListenerImpl$1MessagesAvailable.runInContext(ClientCallImpl.java:646)
      	at io.grpc.internal.ContextRunnable.run(ContextRunnable.java:37)
      	at io.grpc.internal.SerializingExecutor.run(SerializingExecutor.java:133)
      	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
      	at java.lang.Thread.run(Thread.java:748)
      	... 1 frame trimmed
      Caused by: java.nio.file.NoSuchFileException: /private/tmp/amps-standalone-bitbucket-LATEST/target/bitbucket/home/shared/config/hook-scripts/1-0
      	at sun.nio.fs.UnixException.translateToIOException(UnixException.java:86)
      	at sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:102)
      	at sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:107)
      	at sun.nio.fs.UnixFileSystemProvider.newByteChannel(UnixFileSystemProvider.java:214)
      	at java.nio.file.Files.newByteChannel(Files.java:361)
      	at java.nio.file.Files.newByteChannel(Files.java:407)
      	at java.nio.file.spi.FileSystemProvider.newInputStream(FileSystemProvider.java:384)
      	at java.nio.file.Files.newInputStream(Files.java:152)
      	at com.atlassian.stash.internal.hook.script.DiskHookScriptStore.getExecutable(DiskHookScriptStore.java:181)
      	... 19 common frames omitted
      

      Workaround

      Delete the hook script and re-create using REST end-point and configure it in the repository.

      Attachments

        Issue Links

          Activity

            People

              8f36004e07e8 Milly Wilson
              mgoyal2@atlassian.com Manish
              Votes:
              4 Vote for this issue
              Watchers:
              13 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved: