Skip to content

Support prefetching plugins metadata from an http api #5887

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

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

Conversation

tom-seqera
Copy link
Contributor

@tom-seqera tom-seqera commented Mar 14, 2025

This adds an implementation of p4fj's UpdateRepository which can download plugin metadata from an http api.

It also adds a new interface PrefetchUpdateRepository which extends p4fj's interface to add a prefetch() method. When initialising plugins, Nextflow will call this prefetch method on any UpdateRepository which implements this interface, allowing the repository to optimise how it downloads plugin metadata (for example, only loading metadata for required plugins rather than for all plugins).

Use of the new http update repository can be enabled with the new NXF_PLUGINS_INDEX_URL environment variable. If set, this overrides the default indexUrl location of the plugins.json metadata file. If the supplied url ends in .json then Nextflow will use the existing update repository implementation, otherwise it will use the new http api implementation.

Unless this new env var is set, these changes should have no effect on Nextflow's behaviour.

Copy link

netlify bot commented Mar 14, 2025

Deploy Preview for nextflow-docs-staging canceled.

Name Link
🔨 Latest commit 920ed83
🔍 Latest deploy log https://app.netlify.com/sites/nextflow-docs-staging/deploys/67fcc1560ab4060008a3dc85

@tom-seqera tom-seqera force-pushed the plugin-metadata-prefetch branch from 71fa033 to db98839 Compare March 17, 2025 14:05
@tom-seqera tom-seqera requested a review from pditommaso March 17, 2025 16:00
Copy link
Member

@pditommaso pditommaso left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Not major comments apart if I'm not wrong there isnt any unit test for this pre-fetching mechanism ?

@tom-seqera
Copy link
Contributor Author

Added unit tests

Copy link
Member

@pditommaso pditommaso left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ok, i've made a couple of minor comments and changes.

Comment on lines +355 to +365
def split = specs.split { plugin -> isEmbedded() && defaultPlugins.hasPlugin(plugin.id) }
def (skip, toStart) = [split[0], split[1]]
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Not sure to understand this logic, a comment to explain the need for splitting the list of plugins would help.

Also this method looks like an implementation detail, may not be needed to expose it as public

Copy link
Contributor Author

@tom-seqera tom-seqera Apr 14, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is just preserving the existing behaviour which doesn't start default plugins in embedded mode. The only change is that it used to check and start each plugin one-by-one but now we need to get a list of all the plugins in one go so that we can call prefetch()

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If you could add it could help to keep track of this rationale

@tom-seqera tom-seqera force-pushed the plugin-metadata-prefetch branch from 46f1fac to 920ed83 Compare April 14, 2025 08:03
@tom-seqera
Copy link
Contributor Author

I updated the warning to be clearer that using a custom index is currently experimental. The previous wording suggested that people should only use the main plugin index, but I think people will want the option to have alternative plugin indexes.

@pditommaso
Copy link
Member

Please revert 920ed83, the expected message is the previous commit

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

Successfully merging this pull request may close these issues.

3 participants