[buddypress-trac] [BuddyPress Trac] #6841: Framework for bulk data handling after updates

buddypress-trac noreply at wordpress.org
Fri Jan 22 16:26:38 UTC 2016

#6841: Framework for bulk data handling after updates
 Reporter:  boonebgorges          |      Owner:
     Type:  enhancement           |     Status:  new
 Priority:  normal                |  Milestone:  Awaiting Review
Component:  API - Update/Install  |    Version:
 Severity:  normal                |   Keywords:
 We have in the past, and will have in the future, cases where large
 amounts of data needs to be processed after a major BP update. The case
 I'm currently working on is #6413 - profile field visibility - but it's
 come up before: moving user last_activity to the activity table, migrating
 signups to wp_signups, etc. On large (or even medium) installations,
 handling huge amounts of data in a single pageload can easily exhaust
 system resources. We need a better way.

 On #6413, I suggested one possibility: a background batch processor, based
 on wp-cron. This is good because it requires no UI, and uses existing
 tools. It's bad for a bunch of reasons. wp-cron is buggy and prone to race
 conditions. wp-cron jobs can't run frequently enough for our purposes,
 leaving us in a state of half-migration for long periods of time. wp-cron
 is not reliably usable on all installations. Etc.

 Another possibility is a loopback batch processor. It could also work in
 the background, but would directly fire off an asynchronous request
 (`wp_remote_post()` or whatever) instead of waiting for the next cron run.
 So: BP update is pageload A. A fires off a `wp_remote_post()`, trigger
 pageload B. B runs a batch process, and when it's finished, fires
 `wp_remote_post()` to C. And so forth, until the batches are completed.
 One problem here is that self-request can sometimes be blocked by
 webserver configuration. Another is that an out-of-control loop, due to
 faulty data or a bug in the implementation, could set off an infinite
 series of requests that would be difficult for the average BP user to
 debug or stop.

 The last option is to use an AJAX-powered interface. This avoids a lot of
 the complications described above. It'll work on all servers, and a bad
 migration can be stopped by closing the browser window. But (a) it
 requires JS, and (b) it requires user action. Item (a) means that we have
 to build no-JS compatibility  of at least a rudimentary kind (I think,
 though maybe I could be convinced otherwise). Item (b) means that the
 admin may decide not to run the migrator right away - or at all. And this
 has ramifications for the way we build data migrations: the post-migration
 schema must always be able to fall back on the pre-migration schema, since
 the migration may not be finished for days or weeks or months. (In fact,
 this is probably true no matter what route we take.)

 Does anyone have strong opinions on this? If we're going to go with an
 AJAX interface, let's have a discussion about the UX. How do we nag the
 administrator to run the updater after BP update? Do we need a new admin
 panel? Etc.

Ticket URL: <https://buddypress.trac.wordpress.org/ticket/6841>
BuddyPress Trac <http://buddypress.org/>
BuddyPress Trac

More information about the buddypress-trac mailing list