HomePhabricator

Move all ApplicationTransaction publishing to daemons

Description

Move all ApplicationTransaction publishing to daemons

Summary:
Ref T6367. Do all mail, feed, notification and search stuff from the daemons, in all editors.

There are four relatively-stateful editors (Audit, Differential, Phriction, PhortuneCart) which needed special care to move state into the daemons properly.

Beyond that, I moved mailTo/mailCC/feedRelated/feedNotify to be computed before we enter the worker:

  • This is simpler, since a lot of editors rely on being able to call $object->getReviewers() or similar to compute them.
  • This is more correct, since we want to freeze the lists at this moment in time.

Finally, I renamed loadEdges to willPublish and made it a slightly more general hook.


This is a bit fragile and I'm not thrilled about it.

It would probably be cleaner to have separate Editor and Publisher classes (something like @fabe's D11329 did). However, I think that's quite a lot of work, and I'd like to see stronger motivation for it (either in this actually being more fragile than I think, or there being other things we get out of it). Overall, I'm comfortable with this change, just definitely not a big fan of the "save" + "load" pattern since I think it's really fragile, nonobvious, hard to debug/predict, etc.

Test Plan:
Directly updated editors:

  • Created a new Phriction page, saw "Document Content".
  • Edited a Phriction page, saw "Document Diff".
  • Edited a revision, got normal looking mail.
  • Faked in changedPriorToCommitURI and verified it survived the state boundary.
  • Sent Audit mail.
  • Sent invoice mail.

Indirect editors - for these, I just made a change and made sure the mail generated:

  • Updated a paste.
  • Updated an event.
  • Updated a thread.
  • Updated a task.
  • Updated a mock.
  • Updated a question.
  • Updated a project.
  • Updated a file.
  • Updated an initiative.
  • Updated a Legalpad document.

Reviewers: btrahan

Reviewed By: btrahan

Subscribers: epriestley, fabe

Maniphest Tasks: T6367

Differential Revision: https://secure.phabricator.com/D13115