sonatype-nexus-community / nexus-repository-apk

Eclipse Public License 1.0
42 stars 24 forks source link

Nexus API change? #37

Closed ronogle closed 2 years ago

ronogle commented 3 years ago

We were using version 0.0.13 with Nexus Repo 3.29.2-02 without any issues. We then upgraded Nexus Repo to 3.31.1-01. The APK plugin started throwing exceptions. I upgraded the plugin to 0.0.18, and the exceptions are still present.

I've opened a support ticket with Sonatype to determine if there was an API changes between 3.30 and 3.31.

Here's a sample request and the stack trace: 2021-06-28 17:30:04,216+0000 DEBUG [qtp1404943869-521] UNKNOWN org.apache.http.impl.execchain.MainClientExec - Executing request GET /alpine/v3.11/main/x86_64/APKINDEX.tar.gz HTTP/1.1 2021-06-28 17:30:04,216+0000 DEBUG [qtp1404943869-521] UNKNOWN org.apache.http.impl.execchain.MainClientExec - Target auth state: UNCHALLENGED 2021-06-28 17:30:04,216+0000 DEBUG [qtp1404943869-521] UNKNOWN org.apache.http.impl.execchain.MainClientExec - Proxy auth state: UNCHALLENGED 2021-06-28 17:30:04,217+0000 DEBUG [qtp1404943869-521] UNKNOWN org.apache.http.headers - http-outgoing-282 >> GET /alpine/v3.11/main/x86_64/APKINDEX.tar.gz HTTP/1.1 2021-06-28 17:30:04,217+0000 DEBUG [qtp1404943869-521] UNKNOWN org.apache.http.headers - http-outgoing-282 >> Host: dl-cdn.alpinelinux.org 2021-06-28 17:30:04,217+0000 DEBUG [qtp1404943869-521] UNKNOWN org.apache.http.headers - http-outgoing-282 >> Connection: Keep-Alive 2021-06-28 17:30:04,218+0000 DEBUG [qtp1404943869-521] UNKNOWN org.apache.http.headers - http-outgoing-282 >> User-Agent: Nexus/3.31.1-01 (PRO; Linux; 3.10.0-1160.31.1.el7.x86_64; amd64; 1.8.0_292) 2021-06-28 17:30:04,218+0000 DEBUG [qtp1404943869-521] UNKNOWN org.apache.http.headers - http-outgoing-282 >> Accept-Encoding: gzip,deflate 2021-06-28 17:30:04,221+0000 DEBUG [qtp1404943869-521] UNKNOWN org.apache.http.headers - http-outgoing-282 << HTTP/1.1 200 OK 2021-06-28 17:30:04,221+0000 DEBUG [qtp1404943869-521] UNKNOWN org.apache.http.headers - http-outgoing-282 << Server: nginx 2021-06-28 17:30:04,222+0000 DEBUG [qtp1404943869-521] UNKNOWN org.apache.http.headers - http-outgoing-282 << Content-Type: application/octet-stream 2021-06-28 17:30:04,222+0000 DEBUG [qtp1404943869-521] UNKNOWN org.apache.http.headers - http-outgoing-282 << Last-Modified: Tue, 22 Jun 2021 12:45:26 GMT 2021-06-28 17:30:04,222+0000 DEBUG [qtp1404943869-521] UNKNOWN org.apache.http.headers - http-outgoing-282 << ETag: "60d1db66-b04e5" 2021-06-28 17:30:04,223+0000 DEBUG [qtp1404943869-521] UNKNOWN org.apache.http.headers - http-outgoing-282 << Strict-Transport-Security: max-age=31536000 2021-06-28 17:30:04,223+0000 DEBUG [qtp1404943869-521] UNKNOWN org.apache.http.headers - http-outgoing-282 << X-Frame-Options: DENY 2021-06-28 17:30:04,223+0000 DEBUG [qtp1404943869-521] UNKNOWN org.apache.http.headers - http-outgoing-282 << X-Content-Type-Options: nosniff 2021-06-28 17:30:04,223+0000 DEBUG [qtp1404943869-521] UNKNOWN org.apache.http.headers - http-outgoing-282 << Via: 1.1 varnish, 1.1 varnish 2021-06-28 17:30:04,223+0000 DEBUG [qtp1404943869-521] UNKNOWN org.apache.http.headers - http-outgoing-282 << Content-Length: 722149 2021-06-28 17:30:04,224+0000 DEBUG [qtp1404943869-521] UNKNOWN org.apache.http.headers - http-outgoing-282 << Accept-Ranges: bytes 2021-06-28 17:30:04,224+0000 DEBUG [qtp1404943869-521] UNKNOWN org.apache.http.headers - http-outgoing-282 << Date: Mon, 28 Jun 2021 17:30:04 GMT 2021-06-28 17:30:04,224+0000 DEBUG [qtp1404943869-521] UNKNOWN org.apache.http.headers - http-outgoing-282 << Age: 6 2021-06-28 17:30:04,224+0000 DEBUG [qtp1404943869-521] UNKNOWN org.apache.http.headers - http-outgoing-282 << Connection: keep-alive 2021-06-28 17:30:04,225+0000 DEBUG [qtp1404943869-521] UNKNOWN org.apache.http.headers - http-outgoing-282 << X-Served-By: cache-lga21975-LGA, cache-bwi5047-BWI 2021-06-28 17:30:04,225+0000 DEBUG [qtp1404943869-521] UNKNOWN org.apache.http.headers - http-outgoing-282 << X-Cache: HIT, HIT 2021-06-28 17:30:04,225+0000 DEBUG [qtp1404943869-521] UNKNOWN org.apache.http.headers - http-outgoing-282 << X-Cache-Hits: 1, 1 2021-06-28 17:30:04,225+0000 DEBUG [qtp1404943869-521] UNKNOWN org.apache.http.headers - http-outgoing-282 << X-Timer: S1624901404.220662,VS0,VE1 2021-06-28 17:30:04,226+0000 DEBUG [qtp1404943869-521] UNKNOWN org.apache.http.impl.execchain.MainClientExec - Connection can be kept alive for 30000 MILLISECONDS 2021-06-28 17:30:04,251+0000 DEBUG [qtp1404943869-521] UNKNOWN org.apache.http.impl.conn.DefaultManagedHttpClientConnection - http-outgoing-282: set socket timeout to 0 2021-06-28 17:30:04,261+0000 ERROR [qtp1404943869-521] *SYSTEM org.sonatype.nexus.internal.web.ErrorPageServlet - Unexpected exception java.lang.NoSuchMethodError: org.sonatype.nexus.repository.storage.StorageTx.setBlob(Lorg/sonatype/nexus/repository/storage/Asset;Ljava/lang/String;Ljava/util/function/Supplier;Ljava/lang/Iterable;Ljava/util/Map;Ljava/lang/String;Z)Lorg/sonatype/nexus/repository/storage/AssetBlob; at org.sonatype.nexus.plugins.apk.internal.ApkDataAccess.saveAsset(ApkDataAccess.java:112) at org.sonatype.nexus.plugins.apk.internal.ApkDataAccess.saveAsset(ApkDataAccess.java:97) at org.sonatype.nexus.plugins.apk.internal.ApkProxyFacetImpl.doPutIndex(ApkProxyFacetImpl.java:161) at org.sonatype.nexus.transaction.TransactionalWrapper.proceedWithTransaction(TransactionalWrapper.java:57) at org.sonatype.nexus.transaction.TransactionInterceptor.proceedWithTransaction(TransactionInterceptor.java:66) at org.sonatype.nexus.transaction.TransactionInterceptor.invoke(TransactionInterceptor.java:55) at org.sonatype.nexus.plugins.apk.internal.ApkProxyFacetImpl.putIndex(ApkProxyFacetImpl.java:141) at org.sonatype.nexus.plugins.apk.internal.ApkProxyFacetImpl.store(ApkProxyFacetImpl.java:97) at org.sonatype.nexus.repository.proxy.ProxyFacetSupport.doGet(ProxyFacetSupport.java:285) at org.sonatype.nexus.repository.proxy.ProxyFacetSupport.lambda$1(ProxyFacetSupport.java:259) at org.sonatype.nexus.common.io.CooperatingFuture.performCall(CooperatingFuture.java:122) at org.sonatype.nexus.common.io.CooperatingFuture.call(CooperatingFuture.java:64) at org.sonatype.nexus.common.io.ScopedCooperationFactorySupport$ScopedCooperation.cooperate(ScopedCooperationFactorySupport.java:99) at org.sonatype.nexus.repository.proxy.ProxyFacetSupport.get(ProxyFacetSupport.java:250) at org.sonatype.nexus.repository.proxy.ProxyFacetSupport.get(ProxyFacetSupport.java:239) at org.sonatype.nexus.repository.proxy.ProxyHandler.handle(ProxyHandler.java:52) 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.handlers.ConditionalRequestHandler.handle(ConditionalRequestHandler.java:72) at org.sonatype.nexus.repository.view.Context.proceed(Context.java:88) at org.sonatype.nexus.repository.view.handlers.ContentHeadersHandler.handle(ContentHeadersHandler.java:46) at org.sonatype.nexus.repository.view.Context.proceed(Context.java:88) at org.sonatype.nexus.repository.http.PartialFetchHandler.handle(PartialFetchHandler.java:59) at org.sonatype.nexus.repository.view.Context.proceed(Context.java:88) at org.sonatype.nexus.repository.cache.NegativeCacheHandler.handle(NegativeCacheHandler.java:56) at org.sonatype.nexus.repository.view.Context.proceed(Context.java:88) at com.sonatype.nexus.clm.internal.orient.FirewallContributedHandler.handle(FirewallContributedHandler.java:104) at org.sonatype.nexus.repository.view.Context.proceed(Context.java:88) at com.sonatype.nexus.usertoken.plugin.internal.UserTokenHandler.handle(UserTokenHandler.java:72) at org.sonatype.nexus.repository.view.Context.proceed(Context.java:88) at org.sonatype.nexus.repository.view.handlers.HandlerContributor.handle(HandlerContributor.java:67) at org.sonatype.nexus.repository.view.Context.proceed(Context.java:88) at org.sonatype.nexus.repository.view.handlers.ExceptionHandler.handle(ExceptionHandler.java:42) at org.sonatype.nexus.repository.view.Context.proceed(Context.java:88) at org.sonatype.nexus.repository.security.SecurityHandler.handle(SecurityHandler.java:51) at org.sonatype.nexus.repository.view.Context.proceed(Context.java:88) at com.sonatype.analytics.internal.handler.AnalyticsMeteringHandler.handle(AnalyticsMeteringHandler.java:69) at org.sonatype.nexus.repository.view.Context.proceed(Context.java:88) at org.sonatype.nexus.repository.view.handlers.TimingHandler.handle(TimingHandler.java:58) at org.sonatype.nexus.repository.view.Context.proceed(Context.java:88) at org.sonatype.nexus.repository.view.Context.start(Context.java:179) at org.sonatype.nexus.repository.view.Router.dispatch(Router.java:65) at org.sonatype.nexus.repository.view.ConfigurableViewFacet.dispatch(ConfigurableViewFacet.java:52) at org.sonatype.nexus.repository.view.ConfigurableViewFacet.dispatch(ConfigurableViewFacet.java:43) at org.sonatype.nexus.repository.httpbridge.internal.ViewServlet.dispatchAndSend(ViewServlet.java:213) at org.sonatype.nexus.repository.httpbridge.internal.ViewServlet.doService(ViewServlet.java:175) at org.sonatype.nexus.repository.httpbridge.internal.ViewServlet.service(ViewServlet.java:127) at javax.servlet.http.HttpServlet.service(HttpServlet.java:790) at com.google.inject.servlet.ServletDefinition.doServiceImpl(ServletDefinition.java:290) at com.google.inject.servlet.ServletDefinition.doService(ServletDefinition.java:280) at com.google.inject.servlet.ServletDefinition.service(ServletDefinition.java:184) at com.google.inject.servlet.DynamicServletPipeline.service(DynamicServletPipeline.java:71) at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:112) at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:61) at org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108) at org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137) at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:125) at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66) at org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108) at org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137) at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:125) at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66) at org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108) at org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137) at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:125) at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66) at org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108) at org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137) at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:125) at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66) at org.apache.shiro.web.servlet.AbstractShiroFilter.executeChain(AbstractShiroFilter.java:450) at org.sonatype.nexus.security.SecurityFilter.executeChain(SecurityFilter.java:96) at org.apache.shiro.web.servlet.AbstractShiroFilter$1.call(AbstractShiroFilter.java:365) at org.apache.shiro.subject.support.SubjectCallable.doCall(SubjectCallable.java:90) at org.apache.shiro.subject.support.SubjectCallable.call(SubjectCallable.java:83) at org.apache.shiro.subject.support.DelegatingSubject.execute(DelegatingSubject.java:387) at org.apache.shiro.web.servlet.AbstractShiroFilter.doFilterInternal(AbstractShiroFilter.java:362) at org.sonatype.nexus.security.SecurityFilter.doFilterInternal(SecurityFilter.java:112) at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:125) at org.sonatype.nexus.repository.httpbridge.internal.ExhaustRequestFilter.doFilter(ExhaustRequestFilter.java:80) at com.sonatype.nexus.licensing.internal.LicensingRedirectFilter.doFilter(LicensingRedirectFilter.java:116) at com.codahale.metrics.servlet.AbstractInstrumentedFilter.doFilter(AbstractInstrumentedFilter.java:112) at org.sonatype.nexus.internal.web.ErrorPageFilter.doFilter(ErrorPageFilter.java:79) at org.sonatype.nexus.internal.web.EnvironmentFilter.doFilter(EnvironmentFilter.java:101) at org.sonatype.nexus.internal.web.HeaderPatternFilter.doFilter(HeaderPatternFilter.java:98) at com.google.inject.servlet.DynamicFilterPipeline.dispatch(DynamicFilterPipeline.java:104) at com.google.inject.servlet.GuiceFilter.doFilter(GuiceFilter.java:133) at org.sonatype.nexus.bootstrap.osgi.DelegatingFilter.doFilter(DelegatingFilter.java:73) at org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:201) at org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1601) at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:548) at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143) at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:602) at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127) at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:235) at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:1624) at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:233) at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1435) at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:188) at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:501) at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:1594) at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:186) at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1350) at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141) at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127) at com.codahale.metrics.jetty9.InstrumentedHandler.handle(InstrumentedHandler.java:239) at org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:146) at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127) at org.eclipse.jetty.server.Server.handle(Server.java:516) at org.eclipse.jetty.server.HttpChannel.lambda$handle$1(HttpChannel.java:388) at org.eclipse.jetty.server.HttpChannel.dispatch(HttpChannel.java:633) at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:380) at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:277) at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:311) at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:105) at org.eclipse.jetty.io.ssl.SslConnection$DecryptedEndPoint.onFillable(SslConnection.java:555) at org.eclipse.jetty.io.ssl.SslConnection.onFillable(SslConnection.java:410) at org.eclipse.jetty.io.ssl.SslConnection$2.succeeded(SslConnection.java:164) at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:105) at org.eclipse.jetty.io.ChannelEndPoint$1.run(ChannelEndPoint.java:104) at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.runTask(EatWhatYouKill.java:338) at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.doProduce(EatWhatYouKill.java:315) at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.tryProduce(EatWhatYouKill.java:173) at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.run(EatWhatYouKill.java:131) at org.eclipse.jetty.util.thread.ReservedThreadExecutor$ReservedThread.run(ReservedThreadExecutor.java:383) at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:882) at org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:1036) at java.lang.Thread.run(Thread.java:748) 2021-06-28 17:30:35,345+0000 DEBUG [nexus-httpclient-eviction-thread] SYSTEM org.apache.http.impl.conn.CPool - Connection [id:282][route:{}->http://dl-cdn.alpinelinux.org:80][state:null] expired @ Mon Jun 28 17:30:34 UTC 2021 2021-06-28 17:30:35,347+0000 DEBUG [nexus-httpclient-eviction-thread] SYSTEM org.apache.http.impl.conn.DefaultManagedHttpClientConnection - http-outgoing-282: Close connection

cc @DarthHater @bhamail

ronogle commented 2 years ago

Problem fixed.

bhamail commented 2 years ago

Glad this is fixed. For posterity (and in case it could help others), what was the solution? Upgrade, other?