[wp-trac] [WordPress Trac] #54546: Fatal error receive while updating WP 5.8.2 to WP 5.9.
WordPress Trac
noreply at wordpress.org
Fri Dec 3 03:51:27 UTC 2021
#54546: Fatal error receive while updating WP 5.8.2 to WP 5.9.
---------------------------------------+---------------------
Reporter: apeksha10 | Owner: (none)
Type: defect (bug) | Status: new
Priority: normal | Milestone: 5.9
Component: Upgrade/Install | Version: trunk
Severity: normal | Resolution:
Keywords: needs-patch needs-testing | Focuses:
---------------------------------------+---------------------
Comment (by costdev):
== Update on Fatal Error
=== The Cause
- The `Requests_Exception` class isn't loaded into memory prior to the
upgrade running.
- When Requests 2.0 is downloaded and copied, it overwrites the contents
of `wp-includes/Requests/Exception.php` with a namespaced
`WpOrg\Requests\Exception` class.
- When the database upgrade is called and
`Requests_Transport_cURL->process_response()` results in a cURL timeout,
it tries to throw `Requests_Exception`. Fatal.
=== The Solution
We can resolve this fatal by including the following line at the top of
`wp-admin/includes/update-core.php` ''in the upgrade package'':
{{{#!php
<?php
require_once ABSPATH . 'wp-includes/Requests/Exception.php';
}}}
=== Why?
- `Requests_Exception` is used before Requests 2.0.
- `WpOrg\Requests\Exception` is used after Requests 2.0.
- Both use the same file.
- The exception class for the current Requests library used by the site
needs to be loaded into memory ''before'' the upgrade process begins.
=== What else do we need to do?
- Update every upgrade package on wp.org for WordPress versions that use
Requests.
- This has been confirmed as needed for earlier WordPress versions.
- Adding this fix to an earlier upgrade package before rolling back has
been confirmed as working by myself and @mkaz.
- This means that we don't have to force a maintenance update on existing
installs. When they try to upgrade or rollback, the package will have what
they need.
----
== Update on cURL timeout
=== The Cause
- This appears to be an issue contacting wordpress.org or with Apache.
- Props to @pbiron for reporting this timeout during testing:
{{{
PHP Warning: An unexpected error occurred. Something may be wrong with
WordPress.org or this server’s configuration. If you continue to
have problems, please try the <a
href="https://wordpress.org/support/forums/">support forums</a>.
(WordPress could not establish a secure connection to WordPress.org.
Please contact your server administrator.)
}}}
- The timeout also occurred on Apache for me.
- The timeout doesn't happen every time.
- This doesn't occur on NGINX for me or for @mkaz.
=== The Solution
- Technically, if a timeout occurs, it ''should'' throw the above warning.
- @pbiron notes that increasing the timeout for the Requests library has
proven useful for avoiding timeouts. However, this timeout should not be
happening in the first place. The default timeout is 60 seconds to contact
wp.org.
- Resolving the timeout requires more investigation.
=== Why?
- The timeout, at least in some cases, occurs at the "Upgrading
Database..." step.
- I haven't looked into whether or not the database gets upgraded before
this fails.
- The timeout, at least in some cases, causes the updater lock to remain
in place, blocking repeat updates without deleting the entry in the
database.
=== What else do we need to do?
- Investigate the cause of this particular timeout.
- Determine whether it is only occurring on Windows with Apache.
- Explore a solution.
- Test.
Huge props to @pbiron and @mkaz for helping to test this fix.
--
Ticket URL: <https://core.trac.wordpress.org/ticket/54546#comment:27>
WordPress Trac <https://core.trac.wordpress.org/>
WordPress publishing platform
More information about the wp-trac
mailing list