diff options
| author | Noriko Hosoi <nhosoi@redhat.com> | 2006-10-25 20:36:46 +0000 |
|---|---|---|
| committer | Noriko Hosoi <nhosoi@redhat.com> | 2006-10-25 20:36:46 +0000 |
| commit | 1c02a56cfc3185d4db4a336f6a2be11bc55c1c8f (patch) | |
| tree | dfc204ae9969e272f3deff8e0f87dd67ac7a13cd /ldap/admin/src/scripts/template-verify-db.pl.in | |
| parent | 603b79151aa03f9150216fba4b8b4faa1e63a755 (diff) | |
Resolves: #212098
Summary: Use autoconf to generate task perl script templates
Changes:
1) added template files to AC_CONFIG_FILES list
2) added db_bindir and ldapsdk_bindir to pass their tools path to the template
files. The paths are hardcoded for now.
Diffstat (limited to 'ldap/admin/src/scripts/template-verify-db.pl.in')
| -rw-r--r-- | ldap/admin/src/scripts/template-verify-db.pl.in | 241 |
1 files changed, 241 insertions, 0 deletions
diff --git a/ldap/admin/src/scripts/template-verify-db.pl.in b/ldap/admin/src/scripts/template-verify-db.pl.in new file mode 100644 index 00000000..8cf45afa --- /dev/null +++ b/ldap/admin/src/scripts/template-verify-db.pl.in @@ -0,0 +1,241 @@ +#{{PERL-EXEC}} +# +# BEGIN COPYRIGHT BLOCK +# This Program is free software; you can redistribute it and/or modify it under +# the terms of the GNU General Public License as published by the Free Software +# Foundation; version 2 of the License. +# +# This Program is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License along with +# this Program; if not, write to the Free Software Foundation, Inc., 59 Temple +# Place, Suite 330, Boston, MA 02111-1307 USA. +# +# In addition, as a special exception, Red Hat, Inc. gives You the additional +# right to link the code of this Program with code not covered under the GNU +# General Public License ("Non-GPL Code") and to distribute linked combinations +# including the two, subject to the limitations in this paragraph. Non-GPL Code +# permitted under this exception must only link to the code of this Program +# through those well defined interfaces identified in the file named EXCEPTION +# found in the source code files (the "Approved Interfaces"). The files of +# Non-GPL Code may instantiate templates or use macros or inline functions from +# the Approved Interfaces without causing the resulting work to be covered by +# the GNU General Public License. Only Red Hat, Inc. may make changes or +# additions to the list of Approved Interfaces. You must obey the GNU General +# Public License in all respects for all of the Program code and other code used +# in conjunction with the Program except the Non-GPL Code covered by this +# exception. If you modify this file, you may extend this exception to your +# version of the file, but you are not obligated to do so. If you do not wish to +# provide this exception without modification, you must delete this exception +# statement from your version and license this file solely under the GPL without +# exception. +# +# +# Copyright (C) 2005 Red Hat, Inc. +# All rights reserved. +# END COPYRIGHT BLOCK +# + +sub getDbDir +{ + (my $here) = @_; + my @dbdirs = (); + + opendir(DIR, $here) or die "can't opendir $here : $!"; + while (defined($dir = readdir(DIR))) + { + my $thisdir; + if ("$here" eq ".") + { + $thisdir = $dir; + } + else + { + $thisdir = $here . "{{SEP}}" . $dir; + } + if (-d $thisdir) + { + if (!($thisdir =~ /\./)) + { + opendir(SUBDIR, "$thisdir") or die "can't opendir $thisdir : $!"; + while (defined($file = readdir(SUBDIR))) + { + if ($file eq "DBVERSION") + { + $#dbdirs++; + $dbdirs[$#dbdirs] = $thisdir; + } + } + closedir(SUBDIR); + } + } + } + closedir(DIR); + + return \@dbdirs; +} + +sub getLastLogfile +{ + (my $here) = @_; + my $logfile = ""; + + opendir(DIR, $here) or die "can't opendir $here : $!"; + while (defined($file = readdir(DIR))) + { + if ($file =~ /log./) + { + $logfile = $file; + } + } + closedir(DIR); + + return \$logfile; +} + +$isWin = -d '\\'; +if ($isWin) { + $NULL = "nul"; +} else { + $NULL = "/dev/null"; +} + +print("*****************************************************************\n"); +print("verify-db: This tool should only be run if recovery start fails\n" . + "and the server is down. If you run this tool while the server is\n" . + "running, you may get false reports of corrupted files or other\n" . + "false errors.\n"); +print("*****************************************************************\n"); + +# get dirs having DBVERSION +my $dbdirs = getDbDir("."); +my $brand_ds = {{DS-BRAND}}; +my $prefix = "{{DS-ROOT}}"; + +$ENV{'PATH'} = '$prefix@db_bindir@:$prefix/usr/lib:@db_bindir@:/usr/lib'; +$ENV{'LD_LIBRARY_PATH'} = '@db_libdir@:/usr/lib'; +$ENV{'SHLIB_PATH'} = '@db_libdir@:/usr/lib'; + +for (my $i = 0; $i < @$dbdirs; $i++) +{ + # run db_printlog -h <dbdir> for each <dbdir> + print "Verify log files in $$dbdirs[$i] ... "; + open(PRINTLOG, "db_printlog -h $$dbdirs[$i] 2>&1 1> $NULL |"); + sleep 1; + my $haserr = 0; + while ($l = <PRINTLOG>) + { + if ("$l" ne "") + { + if ($haserr == 0) + { + print "\n"; + } + print "LOG ERROR: $l"; + $haserr++; + } + } + close(PRINTLOG); + if ($haserr == 0 && $? == 0) + { + print "Good\n"; + } + else + { + my $logfile = getLastLogfile($$dbdirs[$i]); + print "Log file(s) in $$dbdirs[$i] could be corrupted.\n"; + print "Please delete a log file $$logfile, and try restarting the server.\n"; + } +} + +for (my $i = 0; $i < @$dbdirs; $i++) +{ + # changelog + opendir(DB, $$dbdirs[$i]) or die "can't opendir $$dbdirs[$i] : $!"; + while (defined($db = readdir(DB))) + { + if ($db =~ /\.db/) + { + my $thisdb = $$dbdirs[$i] . "{{SEP}}" . $db; + print "Verify $thisdb ... "; + open(DBVERIFY, "db_verify $thisdb 2>&1 1> $NULL |"); + sleep 1; + my $haserr = 0; + while ($l = <DBVERIFY>) + { + if ($haserr == 0) + { + print "\n"; + } + if ("$l" ne "") + { + $haserr++; + print "DB ERROR: $l"; + } + } + close(DBVERIFY); + if ($haserr == 0 && $? == 0) + { + print "Good\n"; + } + else + { + print "changelog file $db in $$dbdirs[$i] is corrupted.\n"; + print "Please restore your backup and recover the database.\n"; + } + } + } + closedir(DB); + + # backend: get instance dirs under <dbdir> + my $instdirs = getDbDir($$dbdirs[$i]); + + for (my $j = 0; $j < @$instdirs; $j++) + { + opendir(DIR, $$instdirs[$j]) or die "can't opendir $here : $!"; + while (defined($db = readdir(DIR))) + { + if ($db =~ /\.db/) + { + my $thisdb = $$instdirs[$j] . "{{SEP}}" . $db; + print "Verify $thisdb ... "; + open(DBVERIFY, "db_verify $thisdb 2>&1 1> $NULL |"); + sleep 1; + my $haserr = 0; + while ($l = <DBVERIFY>) + { + if ($haserr == 0) + { + print "\n"; + } + if ("$l" ne "") + { + $haserr++; + print "DB ERROR: $l"; + } + } + close(DBVERIFY); + if ($haserr == 0 && $? == 0) + { + print "Good\n"; + } + else + { + if ("$db" =~ /id2entry.db/) + { + print "Primary db file $db in $$instdirs[$j] is corrupted.\n"; + print "Please restore your backup and recover the database.\n"; + } + else + { + print "Secondary index file $db in $$instdirs[$j] is corrupted.\n"; + print "Please run db2index(.pl) for reindexing.\n"; + } + } + } + } + closedir(DIR); + } +} |
