Summary: Patches often read from slaves (possibly stale data) and use that information to write on master. It causes problems when applying more patches quickly after each other because data created in previous patch may not be replicated yet. Test Plan: $ bin/storage upgrade Reviewers: epriestley Reviewed By: epriestley CC: aran, Korvin Differential Revision: https://secure.phabricator.com/D4483
		
			
				
	
	
		
			59 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			59 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
<?php
 | 
						|
 | 
						|
echo "Updating old commit authors...\n";
 | 
						|
$table = new PhabricatorRepositoryCommit();
 | 
						|
$table->openTransaction();
 | 
						|
 | 
						|
$conn = $table->establishConnection('w');
 | 
						|
$data = new PhabricatorRepositoryCommitData();
 | 
						|
$commits = queryfx_all(
 | 
						|
  $conn,
 | 
						|
  'SELECT c.id id, c.authorPHID authorPHID, d.commitDetails details
 | 
						|
    FROM %T c JOIN %T d ON d.commitID = c.id
 | 
						|
    WHERE c.authorPHID IS NULL
 | 
						|
    FOR UPDATE',
 | 
						|
  $table->getTableName(),
 | 
						|
  $data->getTableName());
 | 
						|
 | 
						|
foreach ($commits as $commit) {
 | 
						|
  $id = $commit['id'];
 | 
						|
  $details = json_decode($commit['details'], true);
 | 
						|
  $author_phid = idx($details, 'authorPHID');
 | 
						|
  if ($author_phid) {
 | 
						|
    queryfx(
 | 
						|
      $conn,
 | 
						|
      'UPDATE %T SET authorPHID = %s WHERE id = %d',
 | 
						|
      $table->getTableName(),
 | 
						|
      $author_phid,
 | 
						|
      $id);
 | 
						|
    echo "#{$id}\n";
 | 
						|
  }
 | 
						|
}
 | 
						|
 | 
						|
$table->saveTransaction();
 | 
						|
echo "Done.\n";
 | 
						|
 | 
						|
 | 
						|
echo "Updating old commit mailKeys...\n";
 | 
						|
$table->openTransaction();
 | 
						|
 | 
						|
$commits = queryfx_all(
 | 
						|
  $conn,
 | 
						|
  'SELECT id FROM %T WHERE mailKey = %s FOR UPDATE',
 | 
						|
  $table->getTableName(),
 | 
						|
  '');
 | 
						|
 | 
						|
foreach ($commits as $commit) {
 | 
						|
  $id = $commit['id'];
 | 
						|
  queryfx(
 | 
						|
    $conn,
 | 
						|
    'UPDATE %T SET mailKey = %s WHERE id = %d',
 | 
						|
    $table->getTableName(),
 | 
						|
    Filesystem::readRandomCharacters(20),
 | 
						|
    $id);
 | 
						|
  echo "#{$id}\n";
 | 
						|
}
 | 
						|
 | 
						|
$table->saveTransaction();
 | 
						|
echo "Done.\n";
 |