1
0
Fork 0
mirror of https://we.phorge.it/source/phorge.git synced 2024-11-10 00:42:41 +01:00

Improve performance of two recent commit migrations

Summary:
Ref T13216. See PHI959. These two recent migrations can be expressed more efficiently:

  - When updating commit audit statuses, the field isn't JSON encoded or anything so we can just issue several bulk UPDATEs.
  - When inserting mail keys, we can batch them in groups of 100.

Test Plan: Used `bin/storage upgrade -f --apply phabricator:...` to reapply patches. Saw equivalent behavior and faster runtimes.

Reviewers: amckinley

Reviewed By: amckinley

Subscribers: PHID-OPKG-gm6ozazyms6q6i22gyam

Maniphest Tasks: T13216

Differential Revision: https://secure.phabricator.com/D19802
This commit is contained in:
epriestley 2018-11-14 09:41:07 -08:00
parent 86fd204148
commit 96f9b0917e
2 changed files with 25 additions and 23 deletions

View file

@ -12,17 +12,11 @@ $status_map = array(
5 => 'needs-verification', 5 => 'needs-verification',
); );
foreach (new LiskMigrationIterator($table) as $commit) { foreach ($status_map as $old_status => $new_status) {
$status = $commit->getAuditStatus();
if (!isset($status_map[$status])) {
continue;
}
queryfx( queryfx(
$conn, $conn,
'UPDATE %T SET auditStatus = %s WHERE id = %d', 'UPDATE %R SET auditStatus = %s WHERE auditStatus = %s',
$table->getTableName(), $table,
$status_map[$status], $new_status,
$commit->getID()); $old_status);
} }

View file

@ -8,19 +8,27 @@ $properties_table = new PhabricatorMetaMTAMailProperties();
$conn = $properties_table->establishConnection('w'); $conn = $properties_table->establishConnection('w');
$iterator = new LiskRawMigrationIterator($commit_conn, $commit_name); $iterator = new LiskRawMigrationIterator($commit_conn, $commit_name);
foreach ($iterator as $commit) { $chunks = new PhutilChunkedIterator($iterator, 100);
foreach ($chunks as $chunk) {
$sql = array();
foreach ($chunk as $commit) {
$sql[] = qsprintf(
$conn,
'(%s, %s, %d, %d)',
$commit['phid'],
phutil_json_encode(
array(
'mailKey' => $commit['mailKey'],
)),
PhabricatorTime::getNow(),
PhabricatorTime::getNow());
}
queryfx( queryfx(
$conn, $conn,
'INSERT IGNORE INTO %T 'INSERT IGNORE INTO %R
(objectPHID, mailProperties, dateCreated, dateModified) (objectPHID, mailProperties, dateCreated, dateModified)
VALUES VALUES %LQ',
(%s, %s, %d, %d)', $properties_table,
$properties_table->getTableName(), $sql);
$commit['phid'],
phutil_json_encode(
array(
'mailKey' => $commit['mailKey'],
)),
PhabricatorTime::getNow(),
PhabricatorTime::getNow());
} }