sonatype / nexus-public

Sonatype Nexus Repository Open-source codebase mirror
https://www.sonatype.com/products/repository-oss-download
Eclipse Public License 1.0
1.95k stars 573 forks source link

Nexus throwing NonResolvableTarballNameException and returning a 500 #370

Open sagarkhushalani opened 7 months ago

sagarkhushalani commented 7 months ago

What problem are you trying to solve? Nexus throws an exception and returns a 500 intermittently when an npm client is attempting to pull a package. So far, this has been noticed with the following packages:

Sample exception:

com.sonatype.nexus.repository.npm.internal.NonResolvableTarballNameException: Could not find package npm-run-path
        at com.sonatype.nexus.repository.npm.internal.orient.OrientNpmProxyFacet.retrievePackageVersionTx(OrientNpmProxyFacet.java:491)
        at org.sonatype.nexus.transaction.TransactionalWrapper.proceedWithTransaction(TransactionalWrapper.java:58)
        at org.sonatype.nexus.transaction.TransactionInterceptor.proceedWithTransaction(TransactionInterceptor.java:66)
        at org.sonatype.nexus.transaction.TransactionInterceptor.invoke(TransactionInterceptor.java:55)
        at com.sonatype.nexus.repository.npm.internal.orient.OrientNpmProxyFacet.retrievePackageVersion(OrientNpmProxyFacet.java:480)
        at com.sonatype.nexus.repository.npm.internal.orient.OrientNpmProxyFacet.getUrl(OrientNpmProxyFacet.java:218)
        at org.sonatype.nexus.repository.proxy.ProxyFacetSupport.logContentOrThrow(ProxyFacetSupport.java:366)
        at org.sonatype.nexus.repository.proxy.ProxyFacetSupport.doGet(ProxyFacetSupport.java:333)
        at org.sonatype.nexus.repository.proxy.ProxyFacetSupport.lambda$1(ProxyFacetSupport.java:284)
        at org.sonatype.nexus.common.cooperation2.internal.orient.OrientCooperation2$OrientCooperation2Builder.lambda$1(OrientCooperation2.java:69)
        at org.sonatype.nexus.common.io.CooperatingFuture.performCall(CooperatingFuture.java:123)
        at org.sonatype.nexus.common.io.CooperatingFuture.call(CooperatingFuture.java:65)
        at org.sonatype.nexus.common.io.ScopedCooperationFactorySupport$ScopedCooperation.cooperate(ScopedCooperationFactorySupport.java:99)
        at org.sonatype.nexus.common.cooperation2.internal.orient.OrientCooperation2$OrientCooperation2Builder.cooperate(OrientCooperation2.java:64)
        at org.sonatype.nexus.repository.proxy.ProxyFacetSupport.get(ProxyFacetSupport.java:294)
        at org.sonatype.nexus.repository.proxy.ProxyFacetSupport.get(ProxyFacetSupport.java:277)
        at org.sonatype.nexus.repository.proxy.ProxyHandler.handle(ProxyHandler.java:53)
        at org.sonatype.nexus.repository.view.Context.proceed(Context.java:88)
        at org.sonatype.nexus.repository.storage.LastDownloadedHandler.handle(LastDownloadedHandler.java:59)
        at org.sonatype.nexus.repository.view.Context.proceed(Context.java:88)
        at org.sonatype.nexus.repository.storage.UnitOfWorkHandler.handle(UnitOfWorkHandler.java:39)
        at org.sonatype.nexus.repository.view.Context.proceed(Context.java:88)
        at org.sonatype.nexus.repository.view.Context$proceed.call(Unknown Source)
        at com.sonatype.nexus.repository.npm.internal.orient.OrientNpmProxyRecipe$_closure1.doCall(OrientNpmProxyRecipe.groovy:295)
        at sun.reflect.GeneratedMethodAccessor383.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)

(there are more lines after this, I can post those if needed)

Do you have a workaround you are using at present?

No. Not entirely sure why this is happening. We are investigating on our end as well. Things I have tried:

What feature or behavior is this required for? N/A

How could we solve this issue? (Not knowing is okay!) Not sure :(

Tell us about your Nexus Repository deployment: what version, operating system, and database are you using?

sagarkhushalani commented 7 months ago

Note: I also deleted all the blobstores and recreated the repos (thinking may be the blobstores were corrupt or something). This did not help either. We're still seeing that with various packages.

nblair commented 7 months ago

Hi @sagarkhushalani - thanks for opening an issue. I am unable to replicate the issue you've reported on the most recent version of Nexus Repository (3.67), are you able to upgrade and try again? We may have already delivered a fix for what you are reporting.

sagarkhushalani commented 7 months ago

Hey @nblair Thanks for your response. We do have an upgrade coming up; I'll see if I can get that pulled in. I'll upgrade our server, and post back if the situation is any better/resolved (or not).

Just for my reference/sanity, why is that exception thrown? It is limited to npm (or seems to be).

nblair commented 7 months ago

Looking at the uses of that specific exception, it would only come up if the content you were trying to fetch wasn't available on the remote. Perhaps you have a configuration issue with the proxy, or some network interference in your environment? You could try setting a DEBUG logger for the "com.sonatype.nexus.repository.content.npm" package, or in versions 3.59.0 and later inspect the outbound request logger for more details.

sagarkhushalani commented 7 months ago

@nblair

Unfortunately, upgrading did not help here.

WARN  [qtp461485121-2012] *UNKNOWN org.sonatype.nexus.repository.httpbridge.internal.ViewServlet - Failure servicing: GET /repository/npm/read-pkg/-/read-pkg-5.2.0.tgz
com.sonatype.nexus.repository.npm.internal.NonResolvableTarballNameException: Could not find package read-pkg
        at com.sonatype.nexus.repository.npm.internal.orient.OrientNpmProxyFacet.retrievePackageVersionTx(OrientNpmProxyFacet.java:489)
        at org.sonatype.nexus.transaction.TransactionalWrapper.proceedWithTransaction(TransactionalWrapper.java:58)
        at org.sonatype.nexus.transaction.TransactionInterceptor.proceedWithTransaction(TransactionInterceptor.java:66)
        at org.sonatype.nexus.transaction.TransactionInterceptor.invoke(TransactionInterceptor.java:55)
        at com.sonatype.nexus.repository.npm.internal.orient.OrientNpmProxyFacet.retrievePackageVersion(OrientNpmProxyFacet.java:478)
        at com.sonatype.nexus.repository.npm.internal.orient.OrientNpmProxyFacet.getUrl(OrientNpmProxyFacet.java:218)
        at org.sonatype.nexus.repository.proxy.ProxyFacetSupport.logContentOrThrow(ProxyFacetSupport.java:367)
        at org.sonatype.nexus.repository.proxy.ProxyFacetSupport.doGet(ProxyFacetSupport.java:334)
        at org.sonatype.nexus.repository.proxy.ProxyFacetSupport.lambda$1(ProxyFacetSupport.java:285)
        at org.sonatype.nexus.common.cooperation2.internal.orient.OrientCooperation2$OrientCooperation2Builder.lambda$1(OrientCooperation2.java:69)
        at org.sonatype.nexus.common.io.CooperatingFuture.performCall(CooperatingFuture.java:123)
        at org.sonatype.nexus.common.io.CooperatingFuture.call(CooperatingFuture.java:65)
        at org.sonatype.nexus.common.io.ScopedCooperationFactorySupport$ScopedCooperation.cooperate(ScopedCooperationFactorySupport.java:99)
        at org.sonatype.nexus.common.cooperation2.internal.orient.OrientCooperation2$OrientCooperation2Builder.cooperate(OrientCooperation2.java:64)
        at org.sonatype.nexus.repository.proxy.ProxyFacetSupport.get(ProxyFacetSupport.java:295)
        at org.sonatype.nexus.repository.proxy.ProxyFacetSupport.get(ProxyFacetSupport.java:278)
        at org.sonatype.nexus.repository.proxy.ProxyHandler.handle(ProxyHandler.java:53)
        at org.sonatype.nexus.repository.view.Context.proceed(Context.java:88)
        at org.sonatype.nexus.repository.storage.LastDownloadedHandler.handle(LastDownloadedHandler.java:59)
        at org.sonatype.nexus.repository.view.Context.proceed(Context.java:88)
        at org.sonatype.nexus.repository.storage.UnitOfWorkHandler.handle(UnitOfWorkHandler.java:39)
        at org.sonatype.nexus.repository.view.Context.proceed(Context.java:88)
        at org.sonatype.nexus.repository.view.Context$proceed.call(Unknown Source)
        at com.sonatype.nexus.repository.npm.internal.orient.OrientNpmProxyRecipe$_closure1.doCall(OrientNpmProxyRecipe.groovy:291)
        at sun.reflect.GeneratedMethodAccessor213.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:107)
        at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:323)
        at org.codehaus.groovy.runtime.metaclass.ClosureMetaClass.invokeMethod(ClosureMetaClass.java:274)
        at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1030)
        at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1135)
        at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1030)
        at groovy.lang.Closure.call(Closure.java:427)
        at org.codehaus.groovy.runtime.ConvertedClosure.invokeCustom(ConvertedClosure.java:50)
        at org.codehaus.groovy.runtime.ConversionHandler.invoke(ConversionHandler.java:112)
        at com.sun.proxy.$Proxy206.handle(Unknown Source)

Shouldn't not being able to fetch a package return a 404, or is this not-found different from a package not being found at all?

As you suggested, I'm going to request a network check.

sagarkhushalani commented 7 months ago

@nblair confirmed that this is not a firewall issue. I'm still working with our other network people, but is there anything else here that you can think of?