[MTOS-dev] Getting rid of intermittent errors withLaunchBackgroundTasks
Fumiaki Yoshimatsu
fyoshimatsu at sixapart.com
Thu Feb 28 04:24:54 PST 2008
Bump. Could someone ever try this?
> -----Original Message-----
> From: mtos-dev-bounces at sixapart.com
> [mailto:mtos-dev-bounces at sixapart.com] On Behalf Of Fumiaki Yoshimatsu
> Sent: Wednesday, February 27, 2008 10:20 AM
> To: MTOS dev
> Subject: [MTOS-dev] Getting rid of intermittent errors
> withLaunchBackgroundTasks
>
> Hello MTOS-dev,
>
> Excuse me cross posting this to the list in addition to ProNet ML.
> I have been working on getting rid of intermittent DBI error when
> LaunchBackgroundTasks turned on. The issue was originally reported to
> ProNet thread.
>
> Although it is still intermittent, I could create an environment on my
> Virtual PC instance which reproduces the issue fairly reliably. After
a
> few experiments on the environment, I came up another experimental
code
> to add to see if it solve the issue.
>
> I would like you to review and possibly try to apply the code change
> below, to see if it works. We appreciate your help, especially since
> this issue only occurs intermittently and we can't be 100% sure if the
> fix actually solves the issue only by seeing it gone away on my
Virtual
> PC instance. Thank you in advance.
>
> ---
>
> 1. Add the following method to MT::ObjectDriverFactory
> (lib/MT/ObjectDriverFactory.pm):
>
> sub cleanup {
> @drivers = ();
> if ( my $driver = $MT::Object::DRIVER ) {
> if ( my $dbh = $driver->dbh ) {
> $dbh->disconnect;
> }
> $MT::Object::DRIVER = undef;
> }
> }
>
> 2. Modify the three lines in start_background_tasks method in MT::Util
> (lib/MT/Util.pm) so it has the code as follows:
>
> sub start_background_task {
> my ($func) = @_;
> if (!launch_background_tasks()) { $func->(); }
> else {
> MT::ObjectDriverFactory->cleanup(); # <-- ADD THIS LINE
> $| = 1; # Flush open filehandles
> my $pid = fork();
> if (!$pid) {
> # child
> close STDIN; open STDIN, "</dev/null";
> close STDOUT; open STDOUT, ">/dev/null";
> close STDERR; open STDERR, ">/dev/null";
>
> MT::Object->driver; # <-- CHANGE THIS LINE TO THIS
> MT::ObjectDriverFactory->configure();
> $func->();
> CORE::exit(0) if defined($pid) && !$pid;
> } else {
> MT::Object->driver; # <-- CHANGE THIS LINE TO THIS
> MT::ObjectDriverFactory->configure();
> return 1;
> }
> }
> }
>
> Fumiaki Yoshimatsu
> Movable Type Engineering,
> Six Apart K.K.
>
> P.S.
>
> The environment I have been testing on:
> * CentOS 3.1 ( "server" install )
> * Apache 2.0.46 ( installed in CentOS installer )
> * MySQL 4.0.26 ( installed manually )
> * DBI 1.32 ( default )
> ** DBD::mysql 2.1021 ( default )
>
>
> _______________________________________________
> MTOS-dev mailing list
> MTOS-dev at sixapart.com
> http://www.sixapart.com/mailman/listinfo/mtos-dev
More information about the MTOS-dev
mailing list