From 310373ebc43f1fceb553384074ebc8a03da019c3 Mon Sep 17 00:00:00 2001 From: Bob Trahan Date: Thu, 13 Nov 2014 16:11:57 -0800 Subject: [PATCH] Audit - delete duplicate audit requests and add unique key Summary: Fixes T1768. This is mostly a data cleanliness issue as duplicate rows don't really do anything, but let's clear it up now. Test Plan: made some duplicate rows by adding the same auditor multiple times. ran ./bin/storage upgrade and it worked perfectly! Reviewers: epriestley Reviewed By: epriestley Subscribers: Korvin, epriestley Maniphest Tasks: T1768 Differential Revision: https://secure.phabricator.com/D10849 --- .../sql/autopatches/20141113.auditdupes.php | 22 +++++++++++++++++++ .../PhabricatorRepositoryAuditRequest.php | 4 ++++ 2 files changed, 26 insertions(+) create mode 100644 resources/sql/autopatches/20141113.auditdupes.php diff --git a/resources/sql/autopatches/20141113.auditdupes.php b/resources/sql/autopatches/20141113.auditdupes.php new file mode 100644 index 0000000000..2cc7b9bab4 --- /dev/null +++ b/resources/sql/autopatches/20141113.auditdupes.php @@ -0,0 +1,22 @@ +establishConnection('w'); + +echo "Removing duplicate Audit requests...\n"; +$seen_audit_map = array(); +foreach (new LiskMigrationIterator($table) as $request) { + $commit_phid = $request->getCommitPHID(); + $auditor_phid = $request->getAuditorPHID(); + if (isset($seen_audit_map[$commit_phid][$auditor_phid])) { + $request->delete(); + } + + if (!isset($seen_audit_map[$commit_phid])) { + $seen_audit_map[$commit_phid] = array(); + } + + $seen_audit_map[$commit_phid][$auditor_phid] = 1; +} + +echo "Done.\n"; diff --git a/src/applications/repository/storage/PhabricatorRepositoryAuditRequest.php b/src/applications/repository/storage/PhabricatorRepositoryAuditRequest.php index 9752529253..56613ac494 100644 --- a/src/applications/repository/storage/PhabricatorRepositoryAuditRequest.php +++ b/src/applications/repository/storage/PhabricatorRepositoryAuditRequest.php @@ -27,6 +27,10 @@ final class PhabricatorRepositoryAuditRequest 'auditorPHID' => array( 'columns' => array('auditorPHID', 'auditStatus'), ), + 'key_unique' => array( + 'columns' => array('commitPHID', 'auditorPHID'), + 'unique' => true, + ), ), ) + parent::getConfiguration(); }