mirror of
https://we.phorge.it/source/phorge.git
synced 2024-12-23 05:50:55 +01:00
Correct schema irregularities (including weird keys) with worker task tables
Summary: Ref T13253. Fixes T6615. See that task for discussion. - Remove three keys which serve no real purpose: `dataID` doesn't do anything for us, and the two `leaseOwner` keys are unused. - Rename `leaseOwner_2` to `key_owner`. - Fix an issue where `dataID` was nullable in the active table and non-nullable in the archive table. In practice, //all// workers have data, so all workers have a `dataID`: if they didn't, we'd already fatal when trying to move tasks to the archive table. Just clean this up for consistency, and remove the ancient codepath which imagined tasks with no data. Test Plan: - Ran `bin/storage upgrade`, inspected tables. - Ran `bin/phd debug taskmaster`, worked through a bunch of tasks with no problems. Reviewers: amckinley Reviewed By: amckinley Subscribers: PHID-OPKG-gm6ozazyms6q6i22gyam Maniphest Tasks: T13253, T6615 Differential Revision: https://secure.phabricator.com/D20175
This commit is contained in:
parent
c5e16f9bd9
commit
4b10bc2b64
4 changed files with 25 additions and 19 deletions
21
resources/sql/autopatches/20190215.daemons.01.dropdataid.php
Normal file
21
resources/sql/autopatches/20190215.daemons.01.dropdataid.php
Normal file
|
@ -0,0 +1,21 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
// See T6615. We're about to change the nullability on the "dataID" column,
|
||||||
|
// but it may have a UNIQUE KEY on it. Make sure we get rid of this key first
|
||||||
|
// so we don't run into trouble.
|
||||||
|
|
||||||
|
// There's no "IF EXISTS" modifier for "ALTER TABLE" so run this as a PHP patch
|
||||||
|
// instead of an SQL patch.
|
||||||
|
|
||||||
|
$table = new PhabricatorWorkerActiveTask();
|
||||||
|
$conn = $table->establishConnection('w');
|
||||||
|
|
||||||
|
try {
|
||||||
|
queryfx(
|
||||||
|
$conn,
|
||||||
|
'ALTER TABLE %R DROP KEY %T',
|
||||||
|
$table,
|
||||||
|
'dataID');
|
||||||
|
} catch (AphrontQueryException $ex) {
|
||||||
|
// Ignore.
|
||||||
|
}
|
|
@ -0,0 +1,2 @@
|
||||||
|
ALTER TABLE {$NAMESPACE}_worker.worker_activetask
|
||||||
|
CHANGE dataID dataID INT UNSIGNED NOT NULL;
|
|
@ -14,35 +14,21 @@ final class PhabricatorWorkerActiveTask extends PhabricatorWorkerTask {
|
||||||
self::CONFIG_IDS => self::IDS_COUNTER,
|
self::CONFIG_IDS => self::IDS_COUNTER,
|
||||||
self::CONFIG_TIMESTAMPS => false,
|
self::CONFIG_TIMESTAMPS => false,
|
||||||
self::CONFIG_KEY_SCHEMA => array(
|
self::CONFIG_KEY_SCHEMA => array(
|
||||||
'dataID' => array(
|
|
||||||
'columns' => array('dataID'),
|
|
||||||
'unique' => true,
|
|
||||||
),
|
|
||||||
'taskClass' => array(
|
'taskClass' => array(
|
||||||
'columns' => array('taskClass'),
|
'columns' => array('taskClass'),
|
||||||
),
|
),
|
||||||
'leaseExpires' => array(
|
'leaseExpires' => array(
|
||||||
'columns' => array('leaseExpires'),
|
'columns' => array('leaseExpires'),
|
||||||
),
|
),
|
||||||
'leaseOwner' => array(
|
|
||||||
'columns' => array('leaseOwner(16)'),
|
|
||||||
),
|
|
||||||
'key_failuretime' => array(
|
'key_failuretime' => array(
|
||||||
'columns' => array('failureTime'),
|
'columns' => array('failureTime'),
|
||||||
),
|
),
|
||||||
'leaseOwner_2' => array(
|
'key_owner' => array(
|
||||||
'columns' => array('leaseOwner', 'priority', 'id'),
|
'columns' => array('leaseOwner', 'priority', 'id'),
|
||||||
),
|
),
|
||||||
) + $parent[self::CONFIG_KEY_SCHEMA],
|
) + $parent[self::CONFIG_KEY_SCHEMA],
|
||||||
);
|
);
|
||||||
|
|
||||||
$config[self::CONFIG_COLUMN_SCHEMA] = array(
|
|
||||||
// T6203/NULLABILITY
|
|
||||||
// This isn't nullable in the archive table, so at a minimum these
|
|
||||||
// should be the same.
|
|
||||||
'dataID' => 'uint32?',
|
|
||||||
) + $parent[self::CONFIG_COLUMN_SCHEMA];
|
|
||||||
|
|
||||||
return $config + $parent;
|
return $config + $parent;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -74,7 +60,7 @@ final class PhabricatorWorkerActiveTask extends PhabricatorWorkerTask {
|
||||||
$this->failureCount = 0;
|
$this->failureCount = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($is_new && ($this->getData() !== null)) {
|
if ($is_new) {
|
||||||
$data = new PhabricatorWorkerTaskData();
|
$data = new PhabricatorWorkerTaskData();
|
||||||
$data->setData($this->getData());
|
$data->setData($this->getData());
|
||||||
$data->save();
|
$data->save();
|
||||||
|
|
|
@ -28,9 +28,6 @@ final class PhabricatorWorkerArchiveTask extends PhabricatorWorkerTask {
|
||||||
'dateCreated' => array(
|
'dateCreated' => array(
|
||||||
'columns' => array('dateCreated'),
|
'columns' => array('dateCreated'),
|
||||||
),
|
),
|
||||||
'leaseOwner' => array(
|
|
||||||
'columns' => array('leaseOwner', 'priority', 'id'),
|
|
||||||
),
|
|
||||||
'key_modified' => array(
|
'key_modified' => array(
|
||||||
'columns' => array('dateModified'),
|
'columns' => array('dateModified'),
|
||||||
),
|
),
|
||||||
|
|
Loading…
Reference in a new issue