Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Enhance support for other Composer repositories #22

Open
wants to merge 15 commits into
base: master
Choose a base branch
from

Conversation

fjmilens3
Copy link
Contributor

@fjmilens3 fjmilens3 commented Jun 15, 2018

Adds support for other repositories, not relying on the conventions of the main packagist repo or the availability of the custom list.json only available from that repo.

Under this approach, instead of going remote on ourselves to fetch the list.json, we fetch the packages.json and fetch the contents of all referenced provider-includes. We generate a packages.json-like file with the original providers url and the associated hashes for the upstream provider files, which are then accessed and referenced when determining the url for the provider file for a particular vendor/project.

For now I've limited my initial testing to the Drupal repo at https://packages.drupal.org/8.

There are likely some serious scalability issues introduced as part of this PR that I want to come back and resolve, either in this PR or in a subsequent PR. I'm less concerned about the overhead of the initial build/merge and far more concerned about reading the rather large resulting JSON into memory for each provider.json request. We might be able to reduce the memory overhead significantly by parsing the content using the token-based parser and only grabbing the portions we need, though that will require additional work (either here or in an additional PR).

Update: Additional changes are required for full support of the Drupal repositories (see conversations below). However, since I'm leaving Sonatype for my new job at the end of next week, I'd like to get these particular improvements merged into master.

@fjmilens3 fjmilens3 added the wip Work in progress label Jun 15, 2018
@fjmilens3 fjmilens3 self-assigned this Jun 15, 2018
@fjmilens3 fjmilens3 removed the wip Work in progress label Jun 28, 2018
@dfwarden
Copy link

dfwarden commented Jul 5, 2018

Wanted to chime in that this branch at least initially seems to have made the Wordpress repo at https://wpackagist.org work. Thank you @fjmilens3 for your work on this! 🙏

@Elendev
Copy link
Contributor

Elendev commented Jul 16, 2018

First thank you @fjmilens3 for your work !

I've tried this PR and I have encountered some issues.

For my tests I use a local nexus with the last version of Drupal (8.5.5), I've downloaded the ZIP file available on the website.
I've modified the composer.json file with the following configuration:

    "repositories": [
        {
            "packagist.org": false
        },
        {
            "type": "composer",
            "url": "http://localhost:8081/repository/Packagist/"
        },
        {
            "type": "composer",
            "url": "http://localhost:8081/repository/Drupal8/"
        }
    ],

When I try to run composer update I get the following result:

You are running Composer with SSL/TLS protection disabled.
Loading composer repositories with package information
Warning: Accessing localhost over http which is an insecure protocol.
Updating dependencies (including require-dev)
Package operations: 46 installs, 24 updates, 0 removals
  - Updating symfony/class-loader (v3.4.11 => v3.4.12): Downloading (100%)         
> Drupal\Core\Composer\Composer::vendorTestCodeCleanup
  - Updating symfony/debug (v3.4.11 => v3.4.12): Downloading (100%)         
> Drupal\Core\Composer\Composer::vendorTestCodeCleanup
  - Updating symfony/console (v3.4.11 => v3.4.12): Downloading (100%)         
> Drupal\Core\Composer\Composer::vendorTestCodeCleanup
  - Updating symfony/dependency-injection (v3.4.11 => v3.4.12): Downloading (100%)         
> Drupal\Core\Composer\Composer::vendorTestCodeCleanup
  - Updating paragonie/random_compat (v2.0.11 => v2.0.17): Loading from cache
> Drupal\Core\Composer\Composer::vendorTestCodeCleanup
  - Updating symfony/http-foundation (v3.4.11 => v3.4.12): Downloading (100%)         
> Drupal\Core\Composer\Composer::vendorTestCodeCleanup
  - Updating symfony/event-dispatcher (v3.4.11 => v3.4.12): Downloading (100%)         
> Drupal\Core\Composer\Composer::vendorTestCodeCleanup
  - Updating symfony/http-kernel (v3.4.11 => v3.4.12): Downloading (100%)         
> Drupal\Core\Composer\Composer::vendorTestCodeCleanup
  - Updating symfony/routing (v3.4.11 => v3.4.12): Downloading (100%)         
> Drupal\Core\Composer\Composer::vendorTestCodeCleanup
  - Updating symfony/serializer (v3.4.11 => v3.4.12): Downloading (100%)         
> Drupal\Core\Composer\Composer::vendorTestCodeCleanup
  - Updating symfony/translation (v3.4.11 => v3.4.12): Downloading (100%)         
> Drupal\Core\Composer\Composer::vendorTestCodeCleanup
  - Updating symfony/validator (v3.4.11 => v3.4.12): Downloading (100%)         
> Drupal\Core\Composer\Composer::vendorTestCodeCleanup
  - Updating symfony/process (v3.4.11 => v3.4.12): Downloading (100%)         
> Drupal\Core\Composer\Composer::vendorTestCodeCleanup
  - Installing doctrine/reflection (v1.0.0): Loading from cache
> Drupal\Core\Composer\Composer::vendorTestCodeCleanup
  - Installing doctrine/event-manager (v1.0.0): Loading from cache
> Drupal\Core\Composer\Composer::vendorTestCodeCleanup
  - Updating doctrine/collections (v1.3.0 => v1.5.0): Loading from cache
> Drupal\Core\Composer\Composer::vendorTestCodeCleanup
  - Updating doctrine/cache (v1.6.1 => v1.7.1): Loading from cache
> Drupal\Core\Composer\Composer::vendorTestCodeCleanup
  - Installing doctrine/persistence (v1.0.0): Loading from cache
> Drupal\Core\Composer\Composer::vendorTestCodeCleanup
  - Updating doctrine/inflector (v1.1.0 => v1.3.0): Loading from cache
> Drupal\Core\Composer\Composer::vendorTestCodeCleanup
  - Updating doctrine/common (v2.6.2 => v2.9.0): Loading from cache
> Drupal\Core\Composer\Composer::vendorTestCodeCleanup
  - Updating zendframework/zend-stdlib (3.0.1 => 3.2.0): Loading from cache
> Drupal\Core\Composer\Composer::vendorTestCodeCleanup
  - Updating zendframework/zend-escaper (2.5.2 => 2.6.0): Loading from cache
> Drupal\Core\Composer\Composer::vendorTestCodeCleanup
  - Updating zendframework/zend-feed (2.7.0 => 2.10.2): Loading from cache
> Drupal\Core\Composer\Composer::vendorTestCodeCleanup
  - Updating zendframework/zend-diactoros (1.4.1 => 1.8.1): Loading from cache
> Drupal\Core\Composer\Composer::vendorTestCodeCleanup
  - Installing symfony/css-selector (v3.4.12): Downloading (100%)         
> Drupal\Core\Composer\Composer::vendorTestCodeCleanup
  - Installing behat/mink (dev-master): Loading from cache
> Drupal\Core\Composer\Composer::vendorTestCodeCleanup
  - Installing instaclick/php-webdriver (1.4.5): Downloading (100%)         
> Drupal\Core\Composer\Composer::vendorTestCodeCleanup
  - Installing behat/mink-selenium2-driver (dev-master): Downloading (100%)         
> Drupal\Core\Composer\Composer::vendorTestCodeCleanup
  - Updating symfony/yaml (v3.4.11 => v3.4.12): Downloading (100%)         
> Drupal\Core\Composer\Composer::vendorTestCodeCleanup
  - Installing squizlabs/php_codesniffer (2.9.1): Loading from cache
> Drupal\Core\Composer\Composer::vendorTestCodeCleanup

                                                                      
  [InvalidArgumentException]                                          
  Package drupal/coder-8.2.12.0 must have a source or dist specified  
                                                                      

update [--prefer-source] [--prefer-dist] [--dry-run] [--dev] [--no-dev] [--lock] [--no-custom-installers] [--no-autoloader] [--no-scripts] [--no-progress] [--no-suggest] [--with-dependencies] [--with-all-dependencies] [-v|vv|vvv|--verbose] [-o|--optimize-autoloader] [-a|--classmap-authoritative] [--apcu-autoloader] [--ignore-platform-reqs] [--prefer-stable] [--prefer-lowest] [-i|--interactive] [--root-reqs] [--] [<packages>]...

The generated package file (http://localhost:8081/repository/Drupal8/p/drupal/coder.json) is available in this gist: https://gist.github.com/Elendev/1aed2fd0a6d114cfd95608466e5c3739

It's interesting to note that the dependency in the core/composer.json file is written like this: "drupal/coder": "^8.2.12" and the dependency as given by the compser-nexus plugin is 2.12.0 with "version_normalized": "2.12.0.0".

@fjmilens3
Copy link
Contributor Author

@Elendev, as mentioned on my other reply, I'm not sure when I'm going to have more time to really look at this. I'm hoping I will sometime in the next couple of weeks but I can't make any guarantees.

One thought is to perhaps find the upstream provider file, for example https://packages.drupal.org/8/drupal/coder$918ecf2148ea212e14f19fab124f2c8ca6ef3f19c79ddbda429e1ec282be7748.json (where it is right now, but that can always change) and do a semantic diff on the JSON relative to what Nexus generates.

That might tell us if in fact we are doing something in the JSON that's messing up Composer or if there's something else in play. Additionally, note that we don't support sources, only dists, in the plugin's current implementation, so if something doesn't have a dist then we're not going to be able to fetch it.

Given @dfwarden's comment that this seems to at least be working with wpackagist.org, I'm also interested in characterizing the scope of the problem. Depending on the magnitude of the additional work it may be something I end up breaking out into its own issue to resolve independently. (That said, I would really like to get this to work for Drupal at the moment.)

@taz77
Copy link
Contributor

taz77 commented Aug 3, 2018

I just Nexus for Java development (day job) and I love what I can do with it. I stumbled across this repo then this PR. I am a Drupal developer at night and have had issues with packages for Drupal plus other dependencies where I want to start having control over where I pull dependencies like I do with Java. This PR is great and maybe I can help get it to work with Drupal's package server.

@taz77
Copy link
Contributor

taz77 commented Aug 3, 2018

I compiled the plugin and installed it with the Karaf console on the latest Nexus (3.13) and it will not start the UI with the bundle running. I do not get a whole lot of useful messages in the Karaf console. I will have to see what logs nexus has I can tail, but it will be later as I have to switch back to working on some Drupal sites.

@fjmilens3
Copy link
Contributor Author

I compiled the plugin and installed it with the Karaf console on the latest Nexus (3.13) and it will not start the UI with the bundle running.

@taz77, you actually need to be running against an older version of NXRM in order to use this plugin right now. :) @jlstephens89 has a PR up to update us to the latest NXRM release in #28 that should help with that matter at least.

@j-s-3
Copy link
Contributor

j-s-3 commented Aug 16, 2018

@taz77 @fjmilens3 #28 is now merged - feel free to grab a copy and give it a go

@fjmilens3
Copy link
Contributor Author

fjmilens3 commented Aug 23, 2018

@Elendev, I finally had some time during our Improvement Day (think "20% time" but once every two weeks instead) here and I'm able to reproduce what you're seeing. The exact steps for anyone following along:

  1. Check out the https://github.com/drupal-composer/drupal-project.git project locally.
  2. Modify the composer.json so that's the same as @Elendev's above (note that if you're using http to communicate with NXRM then you'll also need to add secure-http as false in your config section).
  3. Set up NXRM to have matching Composer proxy repositories for Packagist and Drupal 8 (you can get the latter from the original composer.json).
  4. Run composer install and watch for the error (it will fail the build).

I've gone ahead and diffed the JSON between each. So far, the major differences are that:

  1. Our "normalization" of zip filenames seems to produce some odd behavior in this case. NXRM needs to know the version based on the version string in the JSON, but that doesn't always match up with the filename. For example, the upstream JSON has coder-8.x-2.8.zip as the filename but we'd end up rewriting that to drupal-coder-2.8.0.zip so that we can easily find the file. I think this is something we can change, but I'm skeptical that it's the cause of this problem.
  2. The upstream JSON contains source entries but we're stripping those out. This is already known (actually by design) as we don't have general support for Git proxying in the Nexus Repository Manager at this time. I think this is the relevant problem.

Other findings:

  1. On a successful run without NXRM involved, composer is installing drupal/coder from source, not as a dist. This is significant because (as mentioned above) we strip out source distributions from the provider JSON.
  2. With a local change to allow source entries through, I'm able to get the install to succeed.

My suspicion is that for whatever reason it's using source distributions and not picking up any available dists, and since my NXRM implementation doesn't support source distributions, composer fails as it can't find a source, at https://github.com/composer/composer/blob/158e1c95da02cc0b932de74f9a09a1c7b6cf654f/src/Composer/Downloader/DownloadManager.php#L199. I haven't set up xdebug to watch what it's doing for version resolution yet to confirm this, however.

I'm going to experiment a bit more with this today, as if it turns out we do need to support sources to get Drupal to work, I'm going to change this particular issue and PR to be more targeted toward repos like wpackagist so we can get this functionality baked in. I'd open another issue and PR for Drupal in particular, centering around getting sources working and cleaning up some of the renaming that goes on. Implementing that will be a rather major (and potentially somewhat destabilizing) undertaking and I don't want to conflate it with these changes if possible.

/cc @TheBay0r @dfwarden

@fjmilens3 fjmilens3 changed the title Support other Composer repositories Enhance support for other Composer repositories Nov 15, 2018
@fjmilens3
Copy link
Contributor Author

Update: I'm starting a new job next week and likely won't be contributing much more to this particular project, though I may try to pop in from time to time. My intent is to get the improvements here merged in as my last bit of work on it, but there is still outstanding work to be done (both on this and on other issues). It sounds like this will at least help by getting it working for wpackagist and so on, but further work needs to be done to support the Drupal repositories and their source packages.

@Baachi
Copy link

Baachi commented May 17, 2019

Can i help here. I really would love to have this feature in this repository so i can use at my own. :)

@sonatypecla
Copy link

sonatypecla bot commented Aug 14, 2019

Thanks for the contribution! Before we can merge this, we need @fjmilens3 to sign the Sonatype Contributor License Agreement.

@step50
Copy link

step50 commented Nov 25, 2019

We need to add the proxy " https://packages.drupal.org/8" in addition to the classic proxy "https://packagist.org/". We really would love to have this feature in this repository !

How can we validate this PR ?

@sonatypecla
Copy link

sonatypecla bot commented Sep 16, 2020

Thanks for the contribution! Unfortunately we can't verify if the committer(s), Frederick John Milens III fmilens@sonatype.com, signed the CLA because they have not associated their commits with their GitHub user. Please follow these instructions to associate your commits with your GitHub user. Then sign the Sonatype Contributor License Agreement and this Pull Request will be revalidated.

@dfwarden
Copy link

I had to manually resolve some things that couldn't automatically merge but I was able to rebase this branch on to master and get a working 0.0.9-SNAPSHOT version of this plugin, in case other folks are following this PR and are wondering if it can work with newer-ish (3.27.0-03) versions of Nexus.

@liaoguode
Copy link

liaoguode commented Sep 17, 2020

thank you , we use the code to proxy https://mirrors.huaweicloud.com/repository/php/ work well.the version is tag 0.0.8, nexus version is 3.25.1-04, this is a useful feature ,merge to the master will be a good idea.

@pebosi
Copy link

pebosi commented Nov 5, 2020

@liaoguode can you provide the jar file of the plugin?

@liaoguode
Copy link

@liaoguode can you provide the jar file of the plugin?

I'm sorry,the jar is the product include private information.I only use the pr code to the version.You should notify use the
valid proxy.

@flagsibh
Copy link

Hi. We were actively looking for the functionality this plugin provides, but were very sad to see the great work done here have been stuck for more that 2 years and not merged back to master branch.
We, at work, managed to merge the latest changes in master branch with this PR locally, and were also able to successfully build and deploy the plugin into our local NXRM.

We were wondering if there are any ways we could contribute this new branch back to this repository for revision, acceptance and merge.

How can we do that?

Thanks.

@CelesteGH
Copy link

Hi. We were actively looking for the functionality this plugin provides, but were very sad to see the great work done here have been stuck for more that 2 years and not merged back to master branch.
We, at work, managed to merge the latest changes in master branch with this PR locally, and were also able to successfully build and deploy the plugin into our local NXRM.

We were wondering if there are any ways we could contribute this new branch back to this repository for revision, acceptance and merge.

How can we do that?

Thanks.

Hi

Did you manage to make it work with Drupal or an other repo ?

Thanks

@herndlm herndlm mentioned this pull request Mar 11, 2022
@herndlm
Copy link

herndlm commented Mar 11, 2022

We're also affected by this and this PR seems to be getting quite some attention. Is there any way to drive this forward? Are you fine with somebody taking over @fjmilens3?

Sorry for doing it again, but maybe somebody from the community can help out too? @acockrell @bradbeck @csgillespie @DarthHater @davidkarlsen @mpiggott @whyjustin

@herndlm
Copy link

herndlm commented May 2, 2022

I'm not sure about the state of this PR and sorry for tagging you directly, but since there was recent activity I just could not resist :) Is this also maybe something you might want to look into @bhamail?

@bhamail
Copy link
Contributor

bhamail commented May 2, 2022

@herndlm No worries with tagging me directly. Unfortunately, I can't say I have cycles (nor expertise) to pick up this PR. I will post a comment on an earlier request to contribute an updated version - which might be the best approach at this point.

@bhamail
Copy link
Contributor

bhamail commented May 2, 2022

Hi. We were actively looking for the functionality this plugin provides, but were very sad to see the great work done here have been stuck for more that 2 years and not merged back to master branch. We, at work, managed to merge the latest changes in master branch with this PR locally, and were also able to successfully build and deploy the plugin into our local NXRM.

We were wondering if there are any ways we could contribute this new branch back to this repository for revision, acceptance and merge.

How can we do that?

Thanks.

@flagsibh I'm just seeing your post about this. Sorry for the slow reply. Given the original PR has suffered some bit-rot, it might be best for you to create a new PR. I would suggest you first merge the latest from master.

I'm no expert on Nexus formats, nor Composer, but I'm happy to review and merge a PR if the community can do some validation/testing that the PR works "good enough".

@bokysan
Copy link

bokysan commented Aug 4, 2022

As of today (2022-08-04) https://wpackagist.org does not work. When requesting packages.json the following error is returned. Please note that https://packagist.org works fine.

2022-08-04 12:37:05,621+0000 WARN  [qtp371546718-703] nexus-user org.sonatype.nexus.repository.httpbridge.internal.ViewServlet - Failure servicing: GET /repository/composer-proxy-wpackagist/packages.json
java.lang.NullPointerException: null
	at com.google.common.base.Preconditions.checkNotNull(Preconditions.java:880)
	at org.sonatype.nexus.repository.composer.internal.ComposerProxyFacetImpl.generatePackagesJson(ComposerProxyFacetImpl.java:170)
	at org.sonatype.nexus.repository.composer.internal.ComposerProxyFacetImpl.store(ComposerProxyFacetImpl.java:107)
	at org.sonatype.nexus.repository.proxy.ProxyFacetSupport.doGet(ProxyFacetSupport.java:315)
	at org.sonatype.nexus.repository.proxy.ProxyFacetSupport.lambda$1(ProxyFacetSupport.java:282)
	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:290)
	at org.sonatype.nexus.repository.proxy.ProxyFacetSupport.get(ProxyFacetSupport.java:275)
	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.UnitOfWorkHandler.handle(UnitOfWorkHandler.java:39)
	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.view.handlers.ConditionalRequestHandler.handle(ConditionalRequestHandler.java:67)
	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:105)
	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 org.sonatype.nexus.repository.view.Context$proceed.call(Unknown Source)
	at org.sonatype.nexus.repository.composer.internal.ComposerRecipeSupport$_closure1.doCall(ComposerRecipeSupport.groovy:118)
	at sun.reflect.GeneratedMethodAccessor403.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:98)
	at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:325)
	at org.codehaus.groovy.runtime.metaclass.ClosureMetaClass.invokeMethod(ClosureMetaClass.java:264)
	at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1034)
	at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1099)
	at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1034)
	at groovy.lang.Closure.call(Closure.java:420)
	at org.codehaus.groovy.runtime.ConvertedClosure.invokeCustom(ConvertedClosure.java:54)
	at org.codehaus.groovy.runtime.ConversionHandler.invoke(ConversionHandler.java:124)
	at com.sun.proxy.$Proxy199.handle(Unknown Source)
	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:212)
	at org.sonatype.nexus.repository.httpbridge.internal.ViewServlet.doService(ViewServlet.java:174)
	at org.sonatype.nexus.repository.httpbridge.internal.ViewServlet.service(ViewServlet.java:126)
	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 com.google.inject.servlet.FilterChainInvocation.doFilter(FilterChainInvocation.java:85)
	at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:112)
	at com.google.inject.servlet.FilterChainInvocation.doFilter(FilterChainInvocation.java:82)
	at com.codahale.metrics.servlet.AbstractInstrumentedFilter.doFilter(AbstractInstrumentedFilter.java:112)
	at com.google.inject.servlet.FilterChainInvocation.doFilter(FilterChainInvocation.java:82)
	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 com.google.inject.servlet.FilterChainInvocation.doFilter(FilterChainInvocation.java:82)
	at org.sonatype.nexus.repository.httpbridge.internal.ExhaustRequestFilter.doFilter(ExhaustRequestFilter.java:80)
	at com.google.inject.servlet.FilterChainInvocation.doFilter(FilterChainInvocation.java:82)
	at com.sonatype.nexus.licensing.internal.LicensingRedirectFilter.doFilter(LicensingRedirectFilter.java:116)
	at com.google.inject.servlet.FilterChainInvocation.doFilter(FilterChainInvocation.java:82)
	at com.codahale.metrics.servlet.AbstractInstrumentedFilter.doFilter(AbstractInstrumentedFilter.java:112)
	at com.google.inject.servlet.FilterChainInvocation.doFilter(FilterChainInvocation.java:82)
	at org.sonatype.nexus.internal.web.ErrorPageFilter.doFilter(ErrorPageFilter.java:79)
	at com.google.inject.servlet.FilterChainInvocation.doFilter(FilterChainInvocation.java:82)
	at org.sonatype.nexus.internal.web.EnvironmentFilter.doFilter(EnvironmentFilter.java:101)
	at com.google.inject.servlet.FilterChainInvocation.doFilter(FilterChainInvocation.java:82)
	at org.sonatype.nexus.internal.web.HeaderPatternFilter.doFilter(HeaderPatternFilter.java:98)
	at com.google.inject.servlet.FilterChainInvocation.doFilter(FilterChainInvocation.java:82)
	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:1434)
	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:1349)
	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.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:386)
	at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:883)
	at org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:1034)
	at java.lang.Thread.run(Thread.java:750)
2022-08-04 12:37:07,840+0000 INFO  [quartz-14-thread-20] *SYSTEM org.sonatype.nexus.quartz.internal.task.QuartzTaskInfo - Task 'System - Repository Health Check: composer-proxy-wpackagist' [healthcheck] state change WAITING -> RUNNING
2022-08-04 12:37:10,562+0000 WARN  [qtp371546718-746] nexus-user org.sonatype.nexus.repository.httpbridge.internal.ViewServlet - Failure servicing: GET /repository/composer-proxy-wpackagist/packages.json
java.lang.NullPointerException: null
	at com.google.common.base.Preconditions.checkNotNull(Preconditions.java:880)
	at org.sonatype.nexus.repository.composer.internal.ComposerProxyFacetImpl.generatePackagesJson(ComposerProxyFacetImpl.java:170)
	at org.sonatype.nexus.repository.composer.internal.ComposerProxyFacetImpl.store(ComposerProxyFacetImpl.java:107)
	at org.sonatype.nexus.repository.proxy.ProxyFacetSupport.doGet(ProxyFacetSupport.java:315)
	at org.sonatype.nexus.repository.proxy.ProxyFacetSupport.lambda$1(ProxyFacetSupport.java:282)
	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:290)
	at org.sonatype.nexus.repository.proxy.ProxyFacetSupport.get(ProxyFacetSupport.java:275)
	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.UnitOfWorkHandler.handle(UnitOfWorkHandler.java:39)
	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.view.handlers.ConditionalRequestHandler.handle(ConditionalRequestHandler.java:67)
	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:105)
	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 org.sonatype.nexus.repository.view.Context$proceed.call(Unknown Source)
	at org.sonatype.nexus.repository.composer.internal.ComposerRecipeSupport$_closure1.doCall(ComposerRecipeSupport.groovy:118)
	at sun.reflect.GeneratedMethodAccessor403.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:98)
	at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:325)
	at org.codehaus.groovy.runtime.metaclass.ClosureMetaClass.invokeMethod(ClosureMetaClass.java:264)
	at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1034)
	at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1099)
	at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1034)
	at groovy.lang.Closure.call(Closure.java:420)
	at org.codehaus.groovy.runtime.ConvertedClosure.invokeCustom(ConvertedClosure.java:54)
	at org.codehaus.groovy.runtime.ConversionHandler.invoke(ConversionHandler.java:124)
	at com.sun.proxy.$Proxy199.handle(Unknown Source)
	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:212)
	at org.sonatype.nexus.repository.httpbridge.internal.ViewServlet.doService(ViewServlet.java:174)
	at org.sonatype.nexus.repository.httpbridge.internal.ViewServlet.service(ViewServlet.java:126)
	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 com.google.inject.servlet.FilterChainInvocation.doFilter(FilterChainInvocation.java:85)
	at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:112)
	at com.google.inject.servlet.FilterChainInvocation.doFilter(FilterChainInvocation.java:82)
	at com.codahale.metrics.servlet.AbstractInstrumentedFilter.doFilter(AbstractInstrumentedFilter.java:112)
	at com.google.inject.servlet.FilterChainInvocation.doFilter(FilterChainInvocation.java:82)
	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 com.google.inject.servlet.FilterChainInvocation.doFilter(FilterChainInvocation.java:82)
	at org.sonatype.nexus.repository.httpbridge.internal.ExhaustRequestFilter.doFilter(ExhaustRequestFilter.java:80)
	at com.google.inject.servlet.FilterChainInvocation.doFilter(FilterChainInvocation.java:82)
	at com.sonatype.nexus.licensing.internal.LicensingRedirectFilter.doFilter(LicensingRedirectFilter.java:116)
	at com.google.inject.servlet.FilterChainInvocation.doFilter(FilterChainInvocation.java:82)
	at com.codahale.metrics.servlet.AbstractInstrumentedFilter.doFilter(AbstractInstrumentedFilter.java:112)
	at com.google.inject.servlet.FilterChainInvocation.doFilter(FilterChainInvocation.java:82)
	at org.sonatype.nexus.internal.web.ErrorPageFilter.doFilter(ErrorPageFilter.java:79)
	at com.google.inject.servlet.FilterChainInvocation.doFilter(FilterChainInvocation.java:82)
	at org.sonatype.nexus.internal.web.EnvironmentFilter.doFilter(EnvironmentFilter.java:101)
	at com.google.inject.servlet.FilterChainInvocation.doFilter(FilterChainInvocation.java:82)
	at org.sonatype.nexus.internal.web.HeaderPatternFilter.doFilter(HeaderPatternFilter.java:98)
	at com.google.inject.servlet.FilterChainInvocation.doFilter(FilterChainInvocation.java:82)
	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:1434)
	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:1349)
	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.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:386)
	at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:883)
	at org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:1034)
	at java.lang.Thread.run(Thread.java:750)

Nexus: OSS 3.41.0-01
respository-composer: 0.22

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet