-
-
Notifications
You must be signed in to change notification settings - Fork 1.5k
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
Update plugins without downtime #4828
Comments
An easy solution could be to have the following file structure: storage/plugins/latest (symlink) So the |
I'm sorry but I'm not sure I want to maintain this particular use case. Plugin installation/updates should be quite fast (a few seconds). If it takes 15-60 minutes on your system, I don't think s3fs is the appropriate tool to store PeerTube server files (including plugins). |
I know s3fs is a bad solution for such case, and we will switch do a disk. But even a few seconds is bad for us, especially if something goes wrong with the update and the plugin will be unavailable for a longer time. The use case is that we've a plugin that exposes an API that is critical in some apps that we're developing. |
We've left s3fs now, but still it's not ideal that the plugin gets uninstalled during updates. With the solution below we should be able to skip the decache functionality used today.
|
Create a new folder each time a new plugin/theme is installed or updated. The folder name is created based on the package.json content hash. closes Chocobozzz#4828
Create a new folder each time a new plugin/theme is installed or updated. The folder name is created based on the package.json content hash. closes Chocobozzz#4828
Create a new folder each time a new plugin/theme is installed or updated. The folder name is created based on the package.json content hash. closes Chocobozzz#4828
Create a new folder each time a new plugin/theme is installed or updated. The folder name is created based on the package.json content hash. closes Chocobozzz#4828
Create a new folder each time a new plugin/theme is installed or updated. The folder name is created based on the package.json content hash. closes Chocobozzz#4828
Create a new folder each time a new plugin/theme is installed or updated. The folder name is created based on the package.json content hash. closes Chocobozzz#4828
Create a new folder each time a new plugin/theme is installed or updated. The folder name is created based on the package.json content hash. closes Chocobozzz#4828
Create a new folder each time a new plugin/theme is installed or updated. The folder name is created based on the package.json content hash. closes Chocobozzz#4828
#6443 is a bit hacky and also leads to some kind of memory leak. What about implementing plugins as micro services? Pros:
Cons:
Plugin server side implementation
Plugin client side implementationSame as today. Peertube implementationA plugin is installed by download it's npm package and then spawn a process that will run the plugin (i.e. start the plugin server). The plugin servers port and hostname (if plugins are ran remotely) is stored in the database. When it's up and running it will communicate to Peertube its ready to accept connections. Most of the current plugin functionality should work as today, I'm a bit unsure of some parts though ("Video transcoding manager API" for example). gRPC, HTTP or quic could be used as protocol. Neither node, bun or deno has HTTP/3- or Quic-support though. @Chocobozzz Any thoughts? Out of scope or something worth digging deeper into? |
It's a good idea, and seems to be the way Ghost "integrations" work where plugins are not loaded in core but uses the ghost REST API: https://ghost.org/help/integrations/ I think external integration is a better choice than internal plugins because they are safer, can be used by a horizontally scaled server, cannot crash the main server etc. But they require more work (integration side and on peertube side) and are less "powerful", it's the reason why we chose to develop internal hooks. I'm not against to develop webhooks and external JS library that would use the REST API so the server can spawn remote integrations (in a process or maybe a worker thread?). But unfortunately we clearly won't have time to develop, maintain and document such system in the near future |
Describe the problem to be solved
When updating a plugin the plugin will be unavailable during the installation. We're storing all our plugins at s3fs, which means it takes 15-60 minutes to update.
Describe the solution you would like:
Let the plugin be available during the whole installation.
Describe alternatives you have considered
Install in the new version in tmp folder and just do a quick switch when it's done.
The text was updated successfully, but these errors were encountered: