[wp-trac] [WordPress Trac] #53628: Maintenance Free Updates - Zero downtime

WordPress Trac noreply at wordpress.org
Thu Jul 8 17:23:07 UTC 2021


#53628: Maintenance Free Updates - Zero downtime
------------------------------+--------------------------------------------
 Reporter:  billybigpotatoes  |      Owner:  (none)
     Type:  enhancement       |     Status:  new
 Priority:  normal            |  Milestone:  Awaiting Review
Component:  Plugins           |    Version:  trunk
 Severity:  normal            |   Keywords:  dev-feedback reporter-feedback
  Focuses:                    |
------------------------------+--------------------------------------------
 I have been testing an approach to allow updates to be deployed to themes
 and plugins with Zero downtime (no maintenance page needed).

 It seems that WP if fairly sympathetic to the approach and I am keen to
 see if there are any red flags - and also the opportunity to get the
 approach into core so the world can benefit from it if!

 The approach is as follows:

 - When a plugin update is available - install the plugin into a directory
 that is namespaced with the plugin name AND version (as per the meta) e.g.
 /wp-content/plugins/plugin-v1.3.2

 At this point WP will see two instances of the plugin - but it treats them
 as unique and the initial plugin remains active

 - Activate the plugin - via a database update - modify the wp_options row
 to set the new plugin to be active.  It is critical that this is done as a
 database update - so that it is an atomic action - allowing WP to continue
 to process requests as the switch over takes place.

 The old plugin can remain in place to support roll back and then deleted

 Rollback is simply a question of restoring the active plugins options
 field back to the original settings


 Pros / Cons
 - I have tested this manually and WP seems happy - both locally and on
 hosted environments.  As far as WP seems to be concerned it is seeing a
 new plugin.
 - As the plugin directory is now namespaced - all assets in it e.g. css
 /js will also be cache busted ensuring all assets in your release are
 updated.
 - WP does not currently have a plugin updated event - the activation of
 the new plugin will simply go live.
 - A "pre flight" step could be run on plugin update to check the plugin is
 well formed and no PHP errors exist - ensuring that it is not possible to
 activate a faulty plugin
 - We have also seen that with our automated plugin updater - it still
 works to deploy the new plugin as the location of the plugin deployed in a
 zip unpacks into a new directory.

 We are looking to build a WP_CLI plugin to deal with the activation - it
 works with plugin active / plugin deactivate - but this is not atomic so
 there would be a period of time where the plugin would be missing so we
 are replacing it with a transaction.

 I am very keen to get feedback on this approach - as we are going to start
 using it on our sites.

-- 
Ticket URL: <https://core.trac.wordpress.org/ticket/53628>
WordPress Trac <https://core.trac.wordpress.org/>
WordPress publishing platform


More information about the wp-trac mailing list