wave
wave copied to clipboard
Handle NPE when digest cannot be found
The following error is thrown when digest cannot be resolved in a container manifest (stack trace is reversed):
2024-03-26 18:10:10.969
17:10:10.969 [io-executor-thread-1677] INFO i.s.w.c.RegistryProxyController - > Request [HEAD] /v2/wt/cc63168b5f9b/job/genomicutils/manifests/dev
2024-03-26 18:10:10.862
at java.base/java.lang.Thread.run(Thread.java:840)
2024-03-26 18:10:10.862
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
2024-03-26 18:10:10.862
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
2024-03-26 18:10:10.862
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
2024-03-26 18:10:10.862
at io.micronaut.scheduling.instrument.InvocationInstrumenterWrappedCallable.call(InvocationInstrumenterWrappedCallable.java:53)
2024-03-26 18:10:10.861
at io.micrometer.core.instrument.Timer.lambda$wrap$1(Timer.java:206)
2024-03-26 18:10:10.861
at io.micrometer.core.instrument.composite.CompositeTimer.recordCallable(CompositeTimer.java:129)
2024-03-26 18:10:10.861
at reactor.core.scheduler.WorkerTask.call(WorkerTask.java:37)
2024-03-26 18:10:10.861
at reactor.core.scheduler.WorkerTask.call(WorkerTask.java:84)
2024-03-26 18:10:10.861
at io.micronaut.reactive.reactor.instrument.ReactorInstrumentation.lambda$init$0(ReactorInstrumentation.java:62)
2024-03-26 18:10:10.861
at reactor.core.publisher.FluxSubscribeOn$SubscribeOnSubscriber.run(FluxSubscribeOn.java:194)
2024-03-26 18:10:10.861
at reactor.core.publisher.InternalFluxOperator.subscribe(InternalFluxOperator.java:62)
2024-03-26 18:10:10.861
at reactor.core.publisher.FluxDeferContextual.subscribe(FluxDeferContextual.java:49)
2024-03-26 18:10:10.861
at io.micronaut.http.server.RouteExecutor.lambda$executeRoute$14(RouteExecutor.java:659)
2024-03-26 18:10:10.861
at io.micronaut.http.context.ServerRequestContext.with(ServerRequestContext.java:103)
2024-03-26 18:10:10.861
at io.micronaut.web.router.RouteMatch.execute(RouteMatch.java:111)
2024-03-26 18:10:10.861
at io.micronaut.web.router.AbstractRouteMatch.execute(AbstractRouteMatch.java:303)
2024-03-26 18:10:10.861
at io.micronaut.context.DefaultBeanContext$4.invoke(DefaultBeanContext.java:594)
2024-03-26 18:10:10.861
at io.micronaut.context.AbstractExecutableMethodsDefinition$DispatchedExecutableMethod.invoke(AbstractExecutableMethodsDefinition.java:371)
2024-03-26 18:10:10.861
at io.seqera.wave.controller.$RegistryProxyController$Definition$Exec.dispatch(Unknown Source)
2024-03-26 18:10:10.861
at io.seqera.wave.controller.RegistryProxyController.handleGet(RegistryProxyController.groovy:137)
2024-03-26 18:10:10.861
at io.seqera.wave.controller.RegistryProxyController.handleGet0(RegistryProxyController.groovy:154)
2024-03-26 18:10:10.861
at io.seqera.wave.controller.RegistryProxyController.handleHead(RegistryProxyController.groovy:268)
2024-03-26 18:10:10.861
at io.seqera.wave.controller.RegistryProxyController.manifestForPath(RegistryProxyController.groovy:250)
2024-03-26 18:10:10.861
at io.seqera.wave.core.RegistryProxyService.handleManifest(RegistryProxyService.groovy:119)
2024-03-26 18:10:10.861
at io.seqera.wave.core.ContainerAugmenter.resolve(ContainerAugmenter.groovy:98)
2024-03-26 18:10:10.861
at io.seqera.wave.core.ContainerAugmenter.resolve(ContainerAugmenter.groovy:168)
2024-03-26 18:10:10.861
at io.seqera.wave.core.ContainerAugmenter.findImageManifestAndDigest(ContainerAugmenter.groovy:218)
2024-03-26 18:10:10.861
at io.seqera.wave.core.ContainerAugmenter.findTargetDigest(ContainerAugmenter.groovy:384)
2024-03-26 18:10:10.861
17:10:10.861 [io-executor-thread-1677] ERROR io.seqera.wave.ErrorHandler - Cannot invoke "java.util.Map.get(Object)" because "record" is null - Error ID: 30e9d253f2e6 - Request: HEAD /v2/wt/cf1101648a69/docker.io/scailinker/process_scatac_seq/manifests/1.1
2024-03-26 18:10:10.861
java.lang.NullPointerException: Cannot invoke "java.util.Map.get(Object)" because "record" is null
The error is raised at the following line. An actionable error message should be returned to be user; moreover the failing json should be logged for troubleshooting
https://github.com/seqeralabs/wave/blob/master/src/main/groovy/io/seqera/wave/core/ContainerAugmenter.groovy#L384-L384