Make WordPress Core

Opened 19 years ago

Closed 14 years ago

#5199 closed defect (bug) (worksforme)

Options object cache can become out of sync with the database.

Reported by: markjaquith Owned by:
Priority: normal Milestone:
Component: Cache API Version: 2.2.3
Severity: normal Keywords: close
Cc: Focuses:

Description

I have a client with a high volume site (both in terms of view and in terms of entries posted that has been having problems with future-published entries sometimes not publishing at their correct times. I've been monitoring things, and it seems that when problems occur, the object cache has become out of sync with the database. We're using the APC backend in this case, though I don't think that's the cause of the issues.

Specifically, sometimes the database "cron" entry will have cron items that aren't found when you get_option('cron');

There may be a race condition with concurrent updates.

We can likely improve this in the option API, but we might not be able to eliminate it entirely. It may be prudent to revisit our method of storing cron entries, as an option is not a good place to store a frequently-updated serialized array.

The idea of a multi-use "meta" table has been floated, and this might be another good use of that, as cron entries could have their own meta type.

Change History (12)

#1 @markjaquith
19 years ago

Caught it with two conflicting values (note the different publishing times). The one in the DB was right, but not the one in the cache.

_get_cron_array() :

Array
(
   [1192545034] => Array
       (
           [publish_future_post] => Array
               (
                   [c718cfbf7e9d1a40c454cc48cebbe5a7] => Array
                       (
                           [schedule] =>
                           [args] => Array
                               (
                                   [0] => 11915
                               )

                       )

               )

       )

)




DB:

Array
(
   [1192543234] => Array
       (
           [publish_future_post] => Array
               (
                   [c718cfbf7e9d1a40c454cc48cebbe5a7] => Array
                       (
                           [schedule] =>
                           [args] => Array
                               (
                                   [0] => 11915
                               )

                       )

               )

       )

)

#2 @lloydbudd
18 years ago

  • Keywords needs-patch added
  • Milestone 2.52.6

#3 @hakre
18 years ago

I guess this is APC related. Please disable APC and try to reproduce.

#4 @Denis-de-Bernardy
17 years ago

  • Keywords reporter-feedback added; needs-patch removed
  • Milestone 2.92.8

is this still current in trunk (transcients, new cron procedure...)?

#5 @DD32
17 years ago

is this still current in trunk (transcients, new cron procedure...)?

Yes.

They mearly use the Object Cache/Database, However, Transient use does mean the database should hopefully not get the data in the first place..

To me, This sounds like the APC cache is not updating itself for some reason.. I somewhat doubt its a WP issue.. but it might depend on the object cache file in use.

#6 @ryan
17 years ago

  • Component GeneralCache
  • Milestone 2.8Future Release
  • Owner anonymous removed

#7 @Denis-de-Bernardy
17 years ago

  • Keywords needs-patch added; reporter-feedback removed

#8 @Denis-de-Bernardy
17 years ago

  • Milestone Future Release2.9
  • Priority highnormal
  • Severity majornormal

#9 @ryan
17 years ago

  • Milestone 2.9Future Release

#10 @solarissmoke
15 years ago

  • Keywords close added

This ticket was raised back when there was persistent caching in core. Is it still relevant now?

#11 @solarissmoke
15 years ago

  • Keywords needs-patch removed

#12 @nacin
14 years ago

  • Milestone Future Release
  • Resolutionworksforme
  • Status newclosed

Going to close this. Our various changes with regards to cron locking has very likely made this much better.

Note: See TracTickets for help on using tickets.