Better (hopefully) database connection management for child processes

This commit is contained in:
Zach Copley 2009-08-05 00:16:12 +00:00
parent 5576917662
commit cd71f9cc51

View File

@ -99,13 +99,6 @@ class TwitterStatusFetcher extends Daemon
foreach ($flinks as $f) { foreach ($flinks as $f) {
// We have to disconnect from the DB before forking so
// each sub-process will open its own connection and
// avoid stomping on the others
$conn = &$f->getDatabaseConnection();
$conn->disconnect();
$pid = pcntl_fork(); $pid = pcntl_fork();
if ($pid == -1) { if ($pid == -1) {
@ -125,7 +118,24 @@ class TwitterStatusFetcher extends Daemon
} else { } else {
// Child // Child
// Each child ps needs its own DB connection
// Note: DataObject::getDatabaseConnection() creates
// a new connection if there isn't one already
global $_DB_DATAOBJECT;
$conn = &$f->getDatabaseConnection();
$this->getTimeline($f); $this->getTimeline($f);
$conn->disconnect();
// XXX: Couldn't find a less brutal way to blow
// away a cached connection
unset($_DB_DATAOBJECT['CONNECTIONS']);
exit(); exit();
} }
@ -189,7 +199,10 @@ class TwitterStatusFetcher extends Daemon
function refreshFlinks() function refreshFlinks()
{ {
global $_DB_DATAOBJECT;
$flink = new Foreign_link(); $flink = new Foreign_link();
$conn = &$flink->getDatabaseConnection();
$flink->service = TWITTER_SERVICE; $flink->service = TWITTER_SERVICE;
@ -215,6 +228,9 @@ class TwitterStatusFetcher extends Daemon
$flink->free(); $flink->free();
unset($flink); unset($flink);
$conn->disconnect();
unset($_DB_DATAOBJECT['CONNECTIONS']);
return $flinks; return $flinks;
} }
@ -299,6 +315,7 @@ class TwitterStatusFetcher extends Daemon
function saveStatus($status, $flink) function saveStatus($status, $flink)
{ {
$id = $this->ensureProfile($status->user); $id = $this->ensureProfile($status->user);
$profile = Profile::staticGet($id); $profile = Profile::staticGet($id);
if (empty($profile)) { if (empty($profile)) {
@ -356,7 +373,7 @@ class TwitterStatusFetcher extends Daemon
$profileurl = 'http://twitter.com/' . $user->screen_name; $profileurl = 'http://twitter.com/' . $user->screen_name;
$profile = Profile::staticGet('profileurl', $profileurl); $profile = Profile::staticGet('profileurl', $profileurl);
if (!empty($profile) { if (!empty($profile)) {
if (defined('SCRIPT_DEBUG')) { if (defined('SCRIPT_DEBUG')) {
common_debug("Profile for $profile->nickname found."); common_debug("Profile for $profile->nickname found.");
} }