Page MenuHomePhabricator
Paste P1730

(An Untitled Masterwork)
ActivePublic

Authored by hach-que on Feb 26 2015, 2:55 AM.
Tags
None
Referenced Files
F319890: file
Feb 26 2015, 2:55 AM
Subscribers
None
#!/usr/bin/env php
<?php
$root = dirname(dirname(dirname(__FILE__)));
require_once $root.'/scripts/__init_script__.php';
$args = new PhutilArgumentParser($argv);
$args->setSynopsis(<<<EOSYNOPSIS
**release_unworked_tasks.php** [__options__]
Release all unworked tasks that are currently leased
on this machine. This script should only be used when
recovering from a MySQL failure.
EOSYNOPSIS
);
$args->parseStandardArguments();
$args->parse(array(
array(
'name' => 'release',
'help' => 'Actually release leases',
),
));
list($stdout, $stderr) = id(new ExecFuture(
'ps aux | grep PhabricatorTaskmasterDaemon | awk \'{print $2}\''))
->resolvex();
$valid_pids_str = phutil_split_lines($stdout);
$valid_pids = array();
foreach ($valid_pids_str as $s) {
$valid_pids[] = (int)$s;
}
$host = php_uname('n');
$host = id(new PhutilUTF8StringTruncator())
->setMaximumBytes(32)
->setTerminator('...')
->truncateString($host);
$table = new PhabricatorWorkerActiveTask();
$conn_w = $table->establishConnection('w');
$rows = queryfx_all(
$conn_w,
'SELECT id, leaseOwner FROM %T WHERE leaseOwner LIKE %~',
$table->getTableName(),
$host);
$leases_to_release = array();
foreach ($rows as $row) {
$valid = false;
foreach ($valid_pids as $pid) {
$pid_match = $pid.':';
$pid_match_len = strlen($pid_match);
if (substr($row['leaseOwner'], 0, $pid_match_len) === $pid_match) {
$valid = true;
break;
}
}
if (!$valid) {
$leases_to_release[] = $row;
}
}
if ($args->getArg('release')) {
echo 'Releasing leases...'."\n";
foreach ($leases_to_release as $lease) {
echo 'Releasing '.$lease['id']."\n";
queryfx(
$conn_w,
'UPDATE %T SET leaseExpires = 0 WHERE id = %d',
$table->getTableName(),
$lease['id']);
}
echo 'Complete!'."\n";
} else {
echo 'Performing dry-run (use --release to actually release leases):'."\n";
foreach ($leases_to_release as $lease) {
echo 'Would release lease '.$lease['id'].", owner ".$lease['leaseOwner']."\n";
}
}
exit(0);

Event Timeline

hach-que updated the paste's language from autodetect to autodetect.