diff --git a/lib/MogileFS/Config.pm b/lib/MogileFS/Config.pm index 1861910..c960ef8 100644 --- a/lib/MogileFS/Config.pm +++ b/lib/MogileFS/Config.pm @@ -213,6 +213,29 @@ sub config { } sub check_database { + my $class = shift; + my $sto = $class->check_database_connection; + $class->check_database_schema; + $sto->pre_daemonize_checks; +} + +sub check_database_forever { + my $class = shift; + my $sto; + while () { + $sto = eval { $class->check_database_connection }; + last if $sto; + warn <check_database_schema; + $sto->pre_daemonize_checks; +} + +sub check_database_connection { my $sto = eval { Mgd::get_store() }; unless ($sto && $sto->ping) { die qq{ @@ -226,15 +249,16 @@ run 'mogdbsetup'. Details: [sto=$sto, err=$@] } } + $sto; +} +sub check_database_schema { my $sversion = MogileFS::Config->server_setting('schema_version') || 0; my $expect_ver = MogileFS::Store->latest_schema_version; unless ($sversion == $expect_ver || MogileFS::Config->config('no_schema_check')) { die "Server's database schema version of $sversion doesn't match expected value of $expect_ver. Halting.\n\n". "Please run mogdbsetup to upgrade your schema.\n"; } - - $sto->pre_daemonize_checks; } # set_server_setting( key, value ) diff --git a/lib/MogileFS/Server.pm b/lib/MogileFS/Server.pm index 60b4340..ab020b2 100644 --- a/lib/MogileFS/Server.pm +++ b/lib/MogileFS/Server.pm @@ -96,7 +96,7 @@ sub run { die "mogilefsd cannot be run as root\n" if $< == 0 && MogileFS->config('user') ne "root"; - MogileFS::Config->check_database; + MogileFS::Config->check_database_forever; # XXX configurable use of check_database vs. check_database_forever? daemonize() if MogileFS->config("daemonize"); MogileFS::ProcManager->set_min_workers('queryworker' => MogileFS->config('query_jobs'));