WordPress.org

Make WordPress Core

Opened 21 months ago

Closed 7 months ago

#21401 closed enhancement (fixed)

Load packaged object cache when advanced-cache.php and object-cache.php don't implement wp_cache_init( )

Reported by: wonderboymusic Owned by: wonderboymusic
Milestone: 3.7 Priority: normal
Severity: normal Version: 3.0
Component: Cache API Keywords: has-patch
Focuses: Cc:

Description (last modified by wonderboymusic)

This ticket has 3 purposes:

1) introduces wp_using_ext_object_cache() - mimic wp_suspend_cache_invalidation() and disallow direct access to $_wp_using_ext_object_cache, cleans up importing of globals in functions and provides function to modify that global

2) load the wp-packaged object cache when object-cache.php doesn't implement wp_cache_init()

3) adds file_exists for advanced-cache.php

wp_start_object_cache(), at its core, is on the hunt for wp_cache_init() and then sets the toggle for the external object cache. We only care about the external object cache if it has that function. Rather than throwing a fatal error if their is a missing method, load the default object cache.

If someone installs Memcached properly, then nothing changes - file loads, all is good. If they install a blanks file, the default Object Cache will load. If they install an external object cache without wp_cache_init(), the default cache loads.

IMO - there is no reason to turn off non-persistent caching or throw a fatal error if the author of a cache plugin sucks or the user made a mistake in moving the files.

Attachments (4)

using-ext-function.diff (8.3 KB) - added by wonderboymusic 21 months ago.
21401-r1.diff (8.3 KB) - added by devesine 13 months ago.
Refreshed patch against r23698.
21401.diff (8.6 KB) - added by wonderboymusic 9 months ago.
21401.2.diff (7.9 KB) - added by wonderboymusic 7 months ago.

Download all attachments as: .zip

Change History (23)

comment:1 tollmanz21 months ago

  • Cc tollmanz@… added

comment:2 SergeyBiryukov21 months ago

  • Component changed from General to Cache

comment:3 wonderboymusic21 months ago

Of note - if someone loads an external object cache that doesn't implementl wp_cache_init, the default cache will load and potentially have a bunch of duplicate functions - that will still produce a fatal error and should. This is more for instances where the file is installed wrong or is blank.

comment:4 jeremyfelt21 months ago

History - 13185 was when previous decision (speed related) was made to not use file_exists() for advanced-cache.php.

comment:5 wonderboymusic21 months ago

Just did some speed tests - 0.00001 is the difference once APC kicks in. This doesn't affect overall performance in any perceptible way.

comment:6 mikeschinkel21 months ago

  • Cc mikeschinkel@… added

Related #21412

comment:7 kurtpayne21 months ago

  • Cc kpayne@… added

comment:8 nacin20 months ago

If object-cache.php is blank and it gets loaded by default, then you'll get an instant fatal error, pre-patch.

Should this be desired, in the interest of giving a developer proper feedback? As it is, if object-cache.php is installed but incomplete (specifically, missing wp_cache_init()) then with or without the patch, fatal errors will still occur.

WP_CACHE is specifically related to advanced-cache.php, not object-cache.php. So I'm having a hard time separating the two different factors here in the initial bug report. (Part 2)

(1), the wp_using_ext_object_cache() function, is good to me.

comment:9 nacin20 months ago

  • Type changed from defect (bug) to enhancement

Both of these are enhancements.

comment:10 wonderboymusic17 months ago

  • Description modified (diff)

I chatted with Jaquith earlier and he pointed out that half of this ticket made no sense - edited!

comment:11 wonderboymusic17 months ago

  • Description modified (diff)

comment:13 aaroncampbell15 months ago

  • Cc aaroncampbell added

comment:14 wonderboymusic15 months ago

  • Keywords needs-refresh added
  • Milestone changed from Awaiting Review to 3.6

devesine13 months ago

Refreshed patch against r23698.

comment:15 devesine13 months ago

  • Keywords needs-refresh removed

comment:16 ryan11 months ago

  • Milestone changed from 3.6 to Future Release

wonderboymusic9 months ago

comment:17 wonderboymusic9 months ago

  • Milestone changed from Future Release to 3.7

Refreshed

comment:18 ryan8 months ago

We've avoided the file_exists() check on advanced-cache.php to avoid the extra sysopen. Checking WP_CACHE has been sufficient.

wonderboymusic7 months ago

comment:19 wonderboymusic7 months ago

  • Owner set to wonderboymusic
  • Resolution set to fixed
  • Status changed from new to closed

In 25289:

Introduce wp_using_ext_object_cache() - mimic wp_suspend_cache_invalidation() and discourage direct access to $_wp_using_ext_object_cache, cleaning up importing of globals in functions and provides function to modify that global. Loads the packaged object cache when an external cache hasn't been loaded or doesn't contain wp_cache_init().

Fixes #21401.

Note: See TracTickets for help on using tickets.