mirror of
https://we.phorge.it/source/phorge.git
synced 2024-11-19 13:22:42 +01:00
Allow LiskDAO to be forced to use a specific connection
Summary: Ref T7522. This seems like the least-bad approach to a messy issue: - When backfilling accounts from an imported instance, I need to write ExternalAccount rows to the instance to link instance accounts with upstream accounts. - We do this in the daemons in some other cases, which lets us run all the code in the context of the instance. However, I really want to do this in-process here because it's way way simpler and we need to do writes to //both// the instance and the upstream, and they're interleaved, and they depend on one another. - I can hard-code the query with `qsprintf()` but that feels like 100x worse than this. This allows me to do this: ``` id(new PhabricatorExternalAccount()) ->setForcedConnnection($instance_conn) ->... ->save(); ``` ...and get a write to the instance database, which is at least not completely a minefield. Test Plan: Backfilled instance accounts and got interleaved instance and upstream writes as expected. Reviewers: btrahan Reviewed By: btrahan Subscribers: epriestley Maniphest Tasks: T7522 Differential Revision: https://secure.phabricator.com/D12098
This commit is contained in:
parent
6fc867d382
commit
827c0ce081
1 changed files with 20 additions and 0 deletions
|
@ -188,6 +188,7 @@ abstract class LiskDAO {
|
|||
private static $transactionIsolationLevel = 0;
|
||||
|
||||
private $ephemeral = false;
|
||||
private $forcedConnection;
|
||||
|
||||
private static $connections = array();
|
||||
|
||||
|
@ -280,6 +281,21 @@ abstract class LiskDAO {
|
|||
}
|
||||
|
||||
|
||||
/**
|
||||
* Force an object to use a specific connection.
|
||||
*
|
||||
* This overrides all connection management and forces the object to use
|
||||
* a specific connection when interacting with the database.
|
||||
*
|
||||
* @param AphrontDatabaseConnection Connection to force this object to use.
|
||||
* @task conn
|
||||
*/
|
||||
public function setForcedConnection(AphrontDatabaseConnection $connection) {
|
||||
$this->forcedConnection = $connection;
|
||||
return $this;
|
||||
}
|
||||
|
||||
|
||||
/* -( Configuring Lisk )--------------------------------------------------- */
|
||||
|
||||
|
||||
|
@ -941,6 +957,10 @@ abstract class LiskDAO {
|
|||
throw new Exception("Unknown mode '{$mode}', should be 'r' or 'w'.");
|
||||
}
|
||||
|
||||
if ($this->forcedConnection) {
|
||||
return $this->forcedConnection;
|
||||
}
|
||||
|
||||
if (self::shouldIsolateAllLiskEffectsToCurrentProcess()) {
|
||||
$mode = 'isolate-'.$mode;
|
||||
|
||||
|
|
Loading…
Reference in a new issue