mark: A photo of Mark kneeling on top of the Taal Volcano in the Philippines. It was a long hike. (Default)
Mark Smith ([staff profile] mark) wrote in [site community profile] changelog2009-05-10 07:16 am

[dw-free] Lots of changes to dbcheck to make it actually work. Well, if your dbinfo/dbweights tables

[commit: http://hg.dwscoalition.org/dw-free/rev/fddd7267769f]

Lots of changes to dbcheck to make it actually work. Well, if your
dbinfo/dbweights tables are filled out.

Patch by [staff profile] mark.

Files modified:
  • bin/dbcheck.pl
--------------------------------------------------------------------------------
diff -r a338a9f322e8 -r fddd7267769f bin/dbcheck.pl
--- a/bin/dbcheck.pl	Sun May 10 06:48:37 2009 +0000
+++ b/bin/dbcheck.pl	Sun May 10 07:16:06 2009 +0000
@@ -2,59 +2,37 @@
 #
 
 use strict;
+
+use lib "$ENV{LJHOME}/cgi-bin";
+require "ljdb.pl";
+
 use DBI;
 use Getopt::Long;
+use Time::HiRes ();
 
-my $help = 0;
-my $opt_fh = 0;
-my $opt_fix = 0;
-my $opt_start = 0;
-my $opt_stop = 0;
-my $opt_err = 0;
-my $opt_all = 0;
-my $opt_tablestatus;
-my $opt_checkreport = 0;
-my $opt_verbose;
-my $opt_rates;
-my @opt_run;
+my ( $help, $opt_err, $opt_all ) = ( 0, 0, 0 );
+my ( $opt_checkreport, $opt_verbose, $opt_rates ) = ( 0, undef, undef );
+
 exit 1 unless GetOptions('help' => \$help,
-                         'flushhosts' => \$opt_fh,
-                         'start' => \$opt_start,
-                         'stop' => \$opt_stop,
                          'checkreport' => \$opt_checkreport,
                          'rates' => \$opt_rates,
-                         'fix' => \$opt_fix,
-                         'run=s' => \@opt_run,
                          'onlyerrors' => \$opt_err,
                          'all' => \$opt_all,
-                         'tablestatus' => \$opt_tablestatus,
                          'verbose' => \$opt_verbose,
                          );
-
-unless (-d $ENV{'LJHOME'}) {
-    die "\$LJHOME not set.\n";
-}
 
 if ($help) {
     die ("Usage: dbcheck.pl [opts] [[cmd] args...]\n" .
          "    --all           Check all hosts, even those with no weight assigned.\n" .
          "    --help          Get this help\n" .
-         "    --flushhosts    Send 'FLUSH HOSTS' to each db as root.\n".
-         "    --fix           Fix (once) common problems.\n".
          "    --checkreport   Show tables that haven't been checked in a while.\n".
-         "    --stop          Stop replication.\n".
-         "    --start         Start replication.\n".
-         "    --run <sql>     Run arbitrary SQL.\n".
          "    --onlyerrors    Will be silent unless there are errors.\n".
-         "    --tablestatus   Show warnings about full/sparse tables.\n".
          "\n".
          "Commands\n".
          "   (none)           Shows replication status.\n".
          "   queries <host>   Shows active queries on host, sorted by running time.\n"
          );
 }
-
-require "$ENV{'LJHOME'}/cgi-bin/ljdb.pl";
 
 debug("Connecting to master...");
 my $dbh = LJ::DB::dbh_by_role("master");
@@ -94,11 +72,8 @@ while ($_ = $sth->fetchrow_hashref) {
     $rolebyid{$id}->{$_->{role}} = [ $_->{norm}, $_->{curr} ];
 }
 
-check_report() if $opt_checkreport;
-rate_report() if $opt_rates;
-
 my %root_handle;  # name -> $db
-my $root_handle = sub {
+my $get_root_handle = sub {
     my $name = shift;
     return $root_handle{$name} if exists $root_handle{$name};
     debug("Connecting to '$name' ...");
@@ -115,7 +90,7 @@ my $check_master_status = sub {
     my $dbid = shift;
     my $d = $dbinfo{$dbid};
     die "Bogus DB: $dbid" unless $d;
-    my $db = $root_handle->($d->{name});
+    my $db = $get_root_handle->($d->{name});
     next unless $db;
 
     my ($masterfile, $masterpos) = $db->selectrow_array("SHOW MASTER STATUS");
@@ -139,7 +114,7 @@ my $check = sub {
         $roles = join(", ", sort keys %drole);
     }
 
-    my $db = $root_handle->($d->{name});
+    my $db = $get_root_handle->($d->{name});
     unless ($db) {
         printf("%4d %-18s %4s %16s  %14s  ($roles)\n",
                $dbid,
@@ -151,7 +126,7 @@ my $check = sub {
     }
 
     my $tzone;
-    (undef, $tzone) = $db->selectrow_array("show variables like 'timezone'");
+    (undef, $tzone) = $db->selectrow_array("show variables like 'system_time_zone'");
     $tzone ||= "???";
 
     $sth = $db->prepare("SHOW PROCESSLIST");
@@ -166,13 +141,11 @@ my $check = sub {
         $pcount_busy++ if $r->{'State'};
     }
 
-    my @master_logs;
     my $log_count = 0;
     if ($master_status{$dbid} && $master_status{$dbid}->[1]) {
         $sth = $db->prepare("SHOW MASTER LOGS");
         $sth->execute;
         while (my ($log) = $sth->fetchrow_array) {
-            push @master_logs, $log;
             $log_count++;
         }
     }
@@ -229,8 +202,10 @@ my $check = sub {
        $extra_version) unless $opt_err;
 };
 
+check_report() if $opt_checkreport;
+rate_report() if $opt_rates;
+
 $check_master_status->($_) foreach (sorted_dbids());
-
 $check->($_) foreach (sorted_dbids());
 
 if (@errors) {
@@ -296,7 +271,8 @@ sub _sorted_dbids {
 
     # then clusters, in order
     foreach my $id (sort { $minclust{$a} <=> $minclust{$b} ||
-                               $is_master{$b} <=> $is_master{$a} }
+                               $is_master{$b} <=> $is_master{$a} ||
+                               $dbinfo{$a}->{name} cmp $dbinfo{$b}->{name} }
                     grep { ! $added{$_} && $minclust{$_} } keys %dbinfo) {
         $add->($id);
     }
@@ -308,7 +284,7 @@ sub check_report {
                       keys %dbinfo) {
         my $d = $dbinfo{$dbid};
         die "Bogus DB: $dbid" unless $d;
-        my $db = $root_handle->($d->{name});
+        my $db = $get_root_handle->($d->{name});
 
         unless ($db) {
             print "$d->{name}\t?\t?\t?\n";
@@ -331,8 +307,6 @@ sub check_report {
     exit 0;
 }
 
-use Time::HiRes ();
-
 sub rate_report {
     my %prev;  # dbid -> [ time, questions ]
 
@@ -342,7 +316,7 @@ sub rate_report {
         foreach my $dbid (sorted_dbids()) {
             my $d = $dbinfo{$dbid};
             die "Bogus DB: $dbid" unless $d;
-            my $db = $root_handle->($d->{name});
+            my $db = $get_root_handle->($d->{name});
 
             next unless $db;
             my (undef, $qs) = $db->selectrow_array("SHOW STATUS LIKE 'Questions'");
--------------------------------------------------------------------------------

Post a comment in response:

This account has disabled anonymous posting.
If you don't have an account you can create one now.
HTML doesn't work in the subject.
More info about formatting

If you are unable to use this captcha for any reason, please contact us by email at support@dreamwidth.org