Page Menu
Home
Phabricator
Search
Configure Global Search
Log In
Paste
P1730
(An Untitled Masterwork)
Active
Public
Actions
Authored by
hach-que
on Feb 26 2015, 2:55 AM.
Edit Paste
Archive Paste
View Raw File
Subscribe
Mute Notifications
Award Token
Flag For Later
Tags
None
Referenced Files
F319890: file
Feb 26 2015, 2:55 AM
2015-02-26 02:55:42 (UTC+0)
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
edited the content of this paste.
(Show Details)
Feb 26 2015, 2:55 AM
2015-02-26 02:55:42 (UTC+0)
hach-que
updated the paste's language from
autodetect
to
autodetect
.
Log In to Comment