Skip Menu |

This queue is for tickets about the File-RsyncP CPAN distribution.

Report information
The Basics
Id: 54989
Status: new
Priority: 0/
Queue: File-RsyncP

People
Owner: Nobody in particular
Requestors: ELACOUR [...] cpan.org
Cc:
AdminCc:

Bug Information
Severity: Normal
Broken in: 0.68
Fixed in: (no value)



Subject: Rsync push to a remote rsync share hang on a file
Hi, File::RsyncP hang when I try to sync for the second time (and other next runs) a directory to a remote rsync server. This appears only for a specific file (can be sent privatly by email). For first transfert, src_path as the problematic file, target_path is empty, the copy works. When I run the transfert again, it hangs every time at 58800kbytes (the file is 58973kbytes long). Doing the same with rsync as the client and same file/options works. I tried to debug this but was not able to understand the problem except that it seems to comes from File::RsyncP. Versions: ======== client: File::RsyncP 0.68, OS Debian Lenny 64bit server: rsync 3.0.3, OS Debian Lenny 32 bit The server rsync configuration: ============================== [backup] uid = root gid = root path = / auth users = backup secrets file = /etc/rsyncd.secrets read only = false hosts allow = x.x.x.x The client script that trigger this problem: =========================================== use File::RsyncP; # TargetPath contains utf8 chars use utf8; my $rs = File::RsyncP->new({ rsyncCmd => "/usr/bin/rsync", rsyncArgs => [ '--numeric-ids', '--perms', '--owner', '--group', '-D', '--links', '--hard-links', '--times', '--block-size=2048', '--relative', '--ignore-times', '--recursive', '--checksum-seed=32761', ], }); $rs->serverConnect('server', '873'); $rs->serverService('backup', 'backup', 'xxxxxxx', 0); $rs->serverStart(0, '/target_path'); $rs->go('/src_path'); $rs->serverClose; perl -d: ======= [...] File::RsyncP::getChunk(/usr/lib/perl5/File/RsyncP.pm:1387): 1387: while ( length($rs->{chunkData}) < $len ) { File::RsyncP::fileCsumReceive(/usr/lib/perl5/File/RsyncP.pm:1036): 1036: $fileNum = unpack("V", $rs->{chunkData}); File::RsyncP::fileCsumReceive(/usr/lib/perl5/File/RsyncP.pm:1037): 1037: $rs->{chunkData} = substr($rs->{chunkData}, 4); File::RsyncP::fileCsumReceive(/usr/lib/perl5/File/RsyncP.pm:1038): 1038: if ( $fileNum == 0xffffffff ) { File::RsyncP::fileCsumReceive(/usr/lib/perl5/File/RsyncP.pm:1043): 1043: my $f = $rs->{fileList}->get($fileNum); File::RsyncP::fileCsumReceive(/usr/lib/perl5/File/RsyncP.pm:1044): 1044: next if ( !defined($f) ); File::RsyncP::fileCsumReceive(/usr/lib/perl5/File/RsyncP.pm:1035): 1035: return -1 if ( $rs->getChunk(4) < 0 ); File::RsyncP::getChunk(/usr/lib/perl5/File/RsyncP.pm:1384): 1384: my($rs, $len) = @_; File::RsyncP::getChunk(/usr/lib/perl5/File/RsyncP.pm:1386): 1386: $len ||= 1; File::RsyncP::getChunk(/usr/lib/perl5/File/RsyncP.pm:1387): 1387: while ( length($rs->{chunkData}) < $len ) { File::RsyncP::getChunk(/usr/lib/perl5/File/RsyncP.pm:1388): 1388: return -1 if ( $rs->getData(4) < 0 ); File::RsyncP::getData(/usr/lib/perl5/File/RsyncP.pm:1352): 1352: my($rs, $len) = @_; File::RsyncP::getData(/usr/lib/perl5/File/RsyncP.pm:1353): 1353: my($data); File::RsyncP::getData(/usr/lib/perl5/File/RsyncP.pm:1355): 1355: return -1 if ( $rs->{abort} ); File::RsyncP::getData(/usr/lib/perl5/File/RsyncP.pm:1356): 1356: alarm($rs->{timeout}) if ( $rs->{timeout} ); File::RsyncP::getData(/usr/lib/perl5/File/RsyncP.pm:1357): 1357: while ( length($rs->{readData}) < $len ) { File::RsyncP::getData(/usr/lib/perl5/File/RsyncP.pm:1358): 1358: return -1 if ( $rs->{abort} ); File::RsyncP::getData(/usr/lib/perl5/File/RsyncP.pm:1359): 1359: my $ein; File::RsyncP::getData(/usr/lib/perl5/File/RsyncP.pm:1360): 1360: vec($ein, fileno($rs->{fh}), 1) = 1; File::RsyncP::getData(/usr/lib/perl5/File/RsyncP.pm:1361): 1361: select(my $rout = $ein, undef, $ein, undef); here it hangs.