#
#========================================================================
#
-# Version 1.6.0_CVS, released 10 Dec 2002.
+# Version 2.0.0beta3, released 1 Jun 2003.
#
# See http://backuppc.sourceforge.net.
#
$RsyncLibOK = 0;
$RsyncLibErr = "File::RsyncP module doesn't exist";
} else {
- if ( $File::RsyncP::VERSION < 0.20 ) {
+ if ( $File::RsyncP::VERSION < 0.41 ) {
$RsyncLibOK = 0;
- $RsyncLibErr = "File::RsyncP module version too old: need 0.20";
+ $RsyncLibErr = "File::RsyncP module version too old: need 0.41";
} else {
$RsyncLibOK = 1;
}
#
# We add a slash to the share name we pass to rsync
#
- ($t->{shareNameSlash} = "$t->{shareName}/") =~ s{//+$}{};
+ ($t->{shareNameSlash} = "$t->{shareName}/") =~ s{//+$}{/};
if ( $t->{type} eq "restore" ) {
$rsyncClientCmd = $conf->{RsyncClientRestoreCmd};
$remoteDir =~ s{//+}{/}g;
$argList = ['--server', @$rsyncArgs, '.', $remoteDir];
$fioArgs = {
- host => $t->{bkupSrcHost},
+ client => $t->{bkupSrcHost},
share => $t->{bkupSrcShare},
viewNum => $t->{bkupSrcNum},
fileList => $t->{fileList},
# transferred, even though it is a full dump.
#
$rsyncArgs = $conf->{RsyncArgs};
+ $rsyncArgs = [@$rsyncArgs, @fileList] if ( @fileList );
$rsyncArgs = [@$rsyncArgs, "--ignore-times"]
if ( $t->{type} eq "full" );
$rsyncClientCmd = $conf->{RsyncClientCmd};
$argList = ['--server', '--sender', @$rsyncArgs,
'.', $t->{shareNameSlash}];
$fioArgs = {
- host => $t->{host},
+ client => $t->{client},
share => $t->{shareName},
viewNum => $t->{lastFullBkupNum},
};
#
# Merge variables into $rsyncClientCmd
#
- $rsyncClientCmd = $bpc->cmdVarSubstitute($rsyncClientCmd,
- {
- host => $t->{host},
- hostIP => $t->{hostIP},
- shareName => $t->{shareName},
- shareNameSlash => $t->{shareNameSlash},
- rsyncPath => $conf->{RsyncClientPath},
- sshPath => $conf->{SshPath},
- argList => $argList,
- });
+ my $args = {
+ host => $t->{host},
+ hostIP => $t->{hostIP},
+ client => $t->{client},
+ shareName => $t->{shareName},
+ shareNameSlash => $t->{shareNameSlash},
+ rsyncPath => $conf->{RsyncClientPath},
+ sshPath => $conf->{SshPath},
+ argList => $argList,
+ };
+ $rsyncClientCmd = $bpc->cmdVarSubstitute($rsyncClientCmd, $args);
#
# Create the Rsync object, and tell it to use our own File::RsyncP::FileIO
$t->{rs} = File::RsyncP->new({
logLevel => $conf->{RsyncLogLevel},
rsyncCmd => sub {
- $bpc->cmdExecOrEval($rsyncClientCmd);
+ $bpc->verbose(0);
+ $bpc->cmdExecOrEval($rsyncClientCmd, $args);
},
rsyncCmdType => "full",
rsyncArgs => $rsyncArgs,
+ timeout => $conf->{ClientTimeout},
logHandler => sub {
- my($str) = @_;
- $str .= "\n";
- $t->{XferLOG}->write(\$str);
+ my($str) = @_;
+ $str .= "\n";
+ $t->{XferLOG}->write(\$str);
},
+ pidHandler => sub {
+ $t->{pidHandler}(@_);
+ },
fio => BackupPC::Xfer::RsyncFileIO->new({
xfer => $t,
bpc => $t->{bpc},
conf => $t->{conf},
backups => $t->{backups},
logLevel => $conf->{RsyncLogLevel},
- timeout => $conf->{ClientTimeout},
logHandler => sub {
my($str) = @_;
$str .= "\n";
#
# Run rsync command
#
- $t->{XferLOG}->write(\"Running: @{$t->{rsyncClientCmd}}\n");
+ my $str = "Running: "
+ . $t->{bpc}->execCmd2ShellCmd(@{$t->{rsyncClientCmd}})
+ . "\n";
+ $t->{XferLOG}->write(\$str);
$rs->remoteStart($remoteSend, $remoteDir);
} else {
#
if ( defined(my $err = $rs->serverConnect($t->{hostIP},
$conf->{RsyncdClientPort})) ) {
$t->{hostError} = $err;
+ my $str = "Error connecting to rsync daemon at $t->{hostIP}"
+ . ":$conf->{RsyncdClientPort}: $err\n";
+ $t->{XferLOG}->write(\$str);
return;
}
#
$conf->{RsyncdUserName},
$conf->{RsyncdPasswd},
$conf->{RsyncdAuthRequired})) ) {
+ my $str = "Error connecting to module $module at $t->{hostIP}"
+ . ":$conf->{RsyncdClientPort}: $err\n";
+ $t->{XferLOG}->write(\$str);
$t->{hostError} = $err;
return;
}
#
my $stats = $rs->statsFinal;
if ( !defined($error) && defined($stats) ) {
- $t->{xferOK} = 1;
+ $t->{xferOK} = 1;
} else {
- $t->{xferOK} = 0;
+ $t->{xferOK} = 0;
}
- $t->{byteCnt} = $stats->{childStats}{TotalFileSize}
- + $stats->{parentStats}{TotalFileSize};
- $t->{fileCnt} = $stats->{childStats}{TotalFileCnt}
- + $stats->{parentStats}{TotalFileCnt};
+ $t->{xferErrCnt} = $stats->{remoteErrCnt}
+ + $stats->{childStats}{errorCnt}
+ + $stats->{parentStats}{errorCnt};
+ $t->{byteCnt} = $stats->{childStats}{TotalFileSize}
+ + $stats->{parentStats}{TotalFileSize};
+ $t->{fileCnt} = $stats->{childStats}{TotalFileCnt}
+ + $stats->{parentStats}{TotalFileCnt};
+ my $str = "Done: $t->{fileCnt} files, $t->{byteCnt} bytes\n";
+ $t->{XferLOG}->write(\$str);
#
# TODO: get error count, and call fio to get stats...
#
{
my($t) = @_;
- return -1;
+ return ();
}
sub logMsg