[wp-trac] [WordPress Trac] #54589: Audit and preload current "from" version files into memory before upgrading filesystem to the "to" version

WordPress Trac noreply at wordpress.org
Mon Dec 6 14:31:04 UTC 2021


#54589: Audit and preload current "from" version files into memory before upgrading
filesystem to the "to" version
-----------------------------+--------------------
 Reporter:  hellofromTonya   |      Owner:  (none)
     Type:  defect (bug)     |     Status:  new
 Priority:  normal           |  Milestone:  6.0
Component:  Upgrade/Install  |    Version:
 Severity:  normal           |   Keywords:  early
  Focuses:                   |
-----------------------------+--------------------
 Follow-up to #54546.

 Some terms for clarity:
 * current "from" version: the current version of WordPress on the site
 * new "to" version: the version of WordPress that the site will be
 upgraded to after the upgrade process is complete

 == The Problem

 In the `wp-admin/includes/update-core.php` file, the filesystem is
 upgraded to the new "to" version before all of the upgrader process is
 completed.

 What happens if the rest of the upgrader process doesn't yet have its code
 loaded into memory?

 * Fatal error, for example #54546
 * Unexpected behavior due to intermingling of "from" and "to" version of
 code

 A fatal error happened in #54546 when cURL timed out and attempted to
 throw an exception when its file hadn't yet been loaded into memory. The
 exception class was changed, which would be handled by the "to" version
 autoloader but was not recognized by the "from" version autoloader in
 memory.

 While #54546 is a specific instance, it revealed a fundamental problem in
 Core's upgrader.

 == The Goal

 Ensure all files from the current ("from") version of WordPress that may
 be needed during the upgrade process are loaded into memory ''before''
 upgrading the filesystem and database to the "to" version of WordPress.

 == Audit and Preload current "from" version files into memory

 An audit will be needed to identify all of the files that are or could be
 used during the upgrade process, including alternative paths such as
 errors which may have dependencies.

 A preloader mechanism will be needed capable of loading nested directories
 (such as loading an entire library or API into memory such as Requests)
 and individual files.

 Consideration will be needed for:
 * differences in current "from" versions of files and code
 * possibly for downgrades from "to" version back to the "from" version
 * case-insensitive filesystems as identified in #54582

 Props to @jrf, @pbiron, @costdev, @schlessera, @sergeybiryukov, and @mkaz
 for extensive investigation and testing.

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


More information about the wp-trac mailing list