web/conf/rhn_dobby.conf | 2 + web/modules/dobby/Dobby/BackupLog.pm | 10 ++++- web/modules/dobby/Dobby/CLI/BackupCommands.pm | 45 ++++++++++++++++++++------ web/modules/dobby/Dobby/DB.pm | 10 +++-- web/modules/dobby/Dobby/Files.pm | 11 +++--- 5 files changed, 56 insertions(+), 22 deletions(-)
New commits: commit 6c56c3af376eb38829f700ad6557e0a80adcd2cf Author: Miroslav Suchý msuchy@redhat.com Date: Mon Oct 22 15:54:36 2012 +0200
implement "db-control examine/verify" on PG
diff --git a/web/modules/dobby/Dobby/CLI/BackupCommands.pm b/web/modules/dobby/Dobby/CLI/BackupCommands.pm index 74c4677..5af2f77 100644 --- a/web/modules/dobby/Dobby/CLI/BackupCommands.pm +++ b/web/modules/dobby/Dobby/CLI/BackupCommands.pm @@ -47,10 +47,16 @@ sub register_dobby_commands { -handler => &command_restore); }
-sub cut_dir { +# returns $file cuted of prefix made from $cut_off_dir +sub cut_off_dir { my ($file, $cut_off_dir) = @_; $file =~ s/^$cut_off_dir//; - return dirname($file); + return $file; +} + +sub cut_dir { + my ($file, $cut_off_dir) = @_; + return dirname(cut_off_dir($file, $cut_off_dir)); }
sub directory_contents { @@ -178,7 +184,11 @@ sub command_restore { # script itself.
my ($src, $dst) = ($file_entry->to, $file_entry->from); - $src = File::Spec->catfile($restore_dir, basename($src)); + if ($log->base_dir) { + $src = File::Spec->catfile($restore_dir, cut_off_dir($src, $log->base_dir)); + } else { # old backups (prior spacewalk 1.8) do not have basedir and assume all in one dir + $src = File::Spec->catfile($restore_dir, basename($src)); + } my ($digest, $missing);
printf " %s", $src;
commit 3f5ed8d35fbd4a2076ad2f43032dbedd3e7d34cd Author: Miroslav Suchý msuchy@redhat.com Date: Mon Oct 22 15:53:19 2012 +0200
put into control file base directory
diff --git a/web/modules/dobby/Dobby/BackupLog.pm b/web/modules/dobby/Dobby/BackupLog.pm index 3b63e35..9b010dd 100644 --- a/web/modules/dobby/Dobby/BackupLog.pm +++ b/web/modules/dobby/Dobby/BackupLog.pm @@ -22,7 +22,7 @@ use Storable qw/freeze thaw/; use XML::LibXML;
our @ISA = qw/RHN::SimpleStruct/; -our @simple_struct_fields = qw/start finish sid tablespaces archive_logs control_file type cold_files/; +our @simple_struct_fields = qw/start finish sid tablespaces archive_logs control_file type cold_files base_dir/;
# UGLY HACK for now; use Storable instead of a real data structure. # ugh. @@ -61,6 +61,7 @@ sub fromXml() { $log->start(getTextValue($doc,'start')); $log->type(getTextValue($doc,'type')); $log->finish(getTextValue($doc,'finish')); + $log->base_dir(getTextValue($doc,'basedir'));
foreach my $fileentry ($doc->getElementsByTagName('fileentry')){ @@ -92,6 +93,8 @@ sub toXml { addTextValue($type, $doc, $self->type); my $finish = $doc->createElement('finish'); addTextValue($finish, $doc, $self->finish); + my $base_dir = $doc->createElement('basedir'); + addTextValue($base_dir, $doc, $self->base_dir);
my $archive_logs = $doc->createElement('archivelogs'); if (defined($self->archive_logs)) { @@ -121,7 +124,8 @@ sub toXml { $root->appendChild($start); $root->appendChild($control_file); $root->appendChild($type); - $root->appendChild($finish); + $root->appendChild($finish); + $root->appendChild($base_dir);
my $retval = $root->toString . "\n"; return $retval; diff --git a/web/modules/dobby/Dobby/CLI/BackupCommands.pm b/web/modules/dobby/Dobby/CLI/BackupCommands.pm index 81d403e..74c4677 100644 --- a/web/modules/dobby/Dobby/CLI/BackupCommands.pm +++ b/web/modules/dobby/Dobby/CLI/BackupCommands.pm @@ -87,6 +87,7 @@ sub command_backup { $log->type('cold'); $log->sid($d->sid); $log->start(time); + $log->base_dir($backup_dir);
$|++; print "Initiating cold backup of database ", $d->sid, "...\n";
commit ffdf3f19acbb6ab0f1b480c2e795205a9f68e3d9 Author: Miroslav Suchý msuchy@redhat.com Date: Mon Oct 22 15:51:31 2012 +0200
if size is undef write 0
diff --git a/web/modules/dobby/Dobby/BackupLog.pm b/web/modules/dobby/Dobby/BackupLog.pm index 8e47594..3b63e35 100644 --- a/web/modules/dobby/Dobby/BackupLog.pm +++ b/web/modules/dobby/Dobby/BackupLog.pm @@ -134,7 +134,7 @@ sub addTextValue { my $node = shift; my $doc = shift; my $value = shift; - if (!$value) { + if (not defined $value) { $value = ""; } my $textNode = $doc->createTextNode($value);
commit 50534140161e52e543a9c14ce7a034adc16c32ac Author: Miroslav Suchý msuchy@redhat.com Date: Mon Oct 22 15:50:46 2012 +0200
implement "db-control backup" on PG
diff --git a/web/conf/rhn_dobby.conf b/web/conf/rhn_dobby.conf index 8cbc290..6212624 100644 --- a/web/conf/rhn_dobby.conf +++ b/web/conf/rhn_dobby.conf @@ -8,4 +8,6 @@ data_dir_format = /rhnsat/data/%s hot_backup_dir_format = /rhnsat/hot-backups/%s/b%02d archive_dir_format = /rhnsat/admin/%s/archive
+pg_data_dir_format = /var/lib/pgsql/data + oracle_user = oracle diff --git a/web/modules/dobby/Dobby/CLI/BackupCommands.pm b/web/modules/dobby/Dobby/CLI/BackupCommands.pm index 7be38f6..81d403e 100644 --- a/web/modules/dobby/Dobby/CLI/BackupCommands.pm +++ b/web/modules/dobby/Dobby/CLI/BackupCommands.pm @@ -19,7 +19,7 @@ package Dobby::CLI::BackupCommands; use Carp; use Dobby::Files; use Dobby::BackupLog; -use File::Basename qw/basename/; +use File::Basename qw/basename dirname/; use File::Spec; use Filesys::Df; use POSIX; @@ -47,14 +47,24 @@ sub register_dobby_commands { -handler => &command_restore); }
+sub cut_dir { + my ($file, $cut_off_dir) = @_; + $file =~ s/^$cut_off_dir//; + return dirname($file); +} + sub directory_contents { - my $cli = shift; - my $dir = shift; + my ($cli, $dir, $cut_off_dir) = @_;
my @files; opendir DIR, $dir or $cli->fatal("opendir $dir: $!"); - push @files, grep { -f $_ } map { File::Spec->catfile($dir, $_) } readdir DIR; + my @dir_content = readdir DIR; closedir DIR; + my @without_up_dir = grep {$_ ne '.' and $_ ne '..'} @dir_content; + foreach my $directory (grep { -d $_ } map { File::Spec->catfile($dir, $_) } @without_up_dir) { + push @files, directory_contents($cli, $directory, $cut_off_dir); + } + push @files, map {[$_, cut_dir($_, $cut_off_dir)]} grep { -f $_ } map { File::Spec->catfile($dir, $_) } @dir_content;
return @files; } @@ -71,6 +81,7 @@ sub command_backup { $cli->fatal("Database is running; please stop before running a cold backup.") if $d->instance_state ne 'OFFLINE';
my $source_dir = $d->data_dir; + my $backend = PXT::Config->get('db_backend');
my $log = new Dobby::BackupLog; $log->type('cold'); @@ -82,15 +93,18 @@ sub command_backup {
my @files;
- push @files, $d->lk_file; - push @files, $d->sp_file; + if ($backend eq 'oracle') { + push @files, $d->lk_file; + push @files, $d->sp_file; + }
for my $dir ($d->data_dir, $d->archive_log_dir) { - push @files, directory_contents($cli, $dir); + push @files, directory_contents($cli, $dir, $dir) if ($dir); }
- for my $file (@files) { - my $file_entry = Dobby::Files->backup_file($file, $backup_dir); + for my $ret (@files) { + my ($file, $rel_dir) = @{$ret}; + my $file_entry = Dobby::Files->backup_file($rel_dir, $file, $backup_dir); $log->add_cold_file($file_entry); }
diff --git a/web/modules/dobby/Dobby/DB.pm b/web/modules/dobby/Dobby/DB.pm index aabe64b..b5c696a 100644 --- a/web/modules/dobby/Dobby/DB.pm +++ b/web/modules/dobby/Dobby/DB.pm @@ -72,14 +72,16 @@ sub database_started {
sub data_dir { my $self = shift; - - return sprintf($self->config->get("data_dir_format"), $self->sid); + my $backend = PXT::Config->get('db_backend'); + return ($backend eq 'postgresql') ? $self->config->get("pg_data_dir_format") : + sprintf($self->config->get("data_dir_format"), $self->sid); }
sub archive_log_dir { my $self = shift; - - return sprintf($self->config->get("archive_dir_format"), $self->sid); + my $backend = PXT::Config->get('db_backend'); + return ($backend eq 'postgresql') ? undef : + sprintf($self->config->get("archive_dir_format"), $self->sid); }
sub oracle_homedir_relative { diff --git a/web/modules/dobby/Dobby/Files.pm b/web/modules/dobby/Dobby/Files.pm index 04b4082..62e15fa 100644 --- a/web/modules/dobby/Dobby/Files.pm +++ b/web/modules/dobby/Dobby/Files.pm @@ -18,7 +18,8 @@ package Dobby::Files; use Digest::MD5; use Compress::Zlib; use File::Basename qw/basename/; - +use File::Spec; +use File::Path;
# given source and dst, gzip a file into dst, returning the checksum # of the original file @@ -88,11 +89,11 @@ sub gunzip_copy { }
sub backup_file { - my $class = shift; - my $file = shift; - my $backup_dir = shift; + my ($class, $rel_dir, $file, $backup_dir) = @_;
- my $dest = sprintf("%s/%s.gz", $backup_dir, basename($file)); + my $real_dest_dir = File::Spec->catdir($backup_dir, $rel_dir); + File::Path::mkpath($real_dest_dir) or (-d $real_dest_dir) or die ("Error: could not create directory $real_dest_dir\n"); + my $dest = sprintf("%s/%s.gz", $real_dest_dir, basename($file)); $dest =~ s(//+)(/)g; my $then = time;
spacewalk-commits@lists.fedorahosted.org