Shift 7.0

master
Paul Kolano 2019-10-04 14:48:02 -07:00
parent f004bcfe82
commit 82e9ad2643
3 changed files with 98 additions and 36 deletions

18
CHANGES
View File

@ -54,7 +54,7 @@ CHANGES
- Fixed table of contents truncation during remote tar creation - Fixed table of contents truncation during remote tar creation
* Shift 4.0 (07/23/15) * Shift 4.0 (07/23/15)
- Note that this version is not backward compatible with previous versions - Note that metadata is not backward compatible with previous versions
- Added backgroundable, parallelizable, and restartable initialization - Added backgroundable, parallelizable, and restartable initialization
- Added --newer and --older options for incremental backups - Added --newer and --older options for incremental backups
- Added --preallocate option to preallocate files below given sparsity - Added --preallocate option to preallocate files below given sparsity
@ -196,7 +196,7 @@ CHANGES
- Fixed hash errors when remote source mapped to local file system - Fixed hash errors when remote source mapped to local file system
* Shift 6.0 (01/16/19) * Shift 6.0 (01/16/19)
- Note that this version is not backward compatible with previous versions - Note that metadata is not backward compatible with previous versions
- Added depth-first file stage processing using --pipeline - Added depth-first file stage processing using --pipeline
- Added CSV history output using --history=csv - Added CSV history output using --history=csv
- Added disablement of email status for states given in --no-mail - Added disablement of email status for states given in --no-mail
@ -303,3 +303,17 @@ CHANGES
- Fixed missing write error handling in fish and fish-tcp transports - Fixed missing write error handling in fish and fish-tcp transports
- Fixed metadata counts during tar creation renames with --restart=ignore - Fixed metadata counts during tar creation renames with --restart=ignore
- Fixed bad newline handling in shift-aux escape/unescape commands - Fixed bad newline handling in shift-aux escape/unescape commands
* Shift 7.0 (10/04/19)
- Note that metadata is not backward compatible with previous versions
- Fixed vulnerability in root --stats/--status due to use of Storable
when metadata directly accessible by users (bug report by J. Neff)
- Fixed race condition causing permission denied during some remote mkdirs
- Fixed built-in checksums when thread creation fails
- Fixed chattrs when thread creation fails
- Fixed leftover shift-bin processes due to unneeded chattr thread spawns
- Fixed exception when setting binmode on remote file handles
- Fixed local dmget calls during traversal when source is not local
- Fixed duplicated source tar lines in dmget input files
- Fixed deceptive thread creation errors during fish-tcp initialization

View File

@ -66,7 +66,7 @@ use Symbol qw(gensym);
use Sys::Hostname; use Sys::Hostname;
use Text::ParseWords; use Text::ParseWords;
our $VERSION = 6.03; our $VERSION = 7.0;
# do not die when receiving sigpipe # do not die when receiving sigpipe
$SIG{PIPE} = 'IGNORE'; $SIG{PIPE} = 'IGNORE';
@ -1471,17 +1471,18 @@ sub sum {
} }
return if (!$perl{threads} || $opts{threads} <= 1); return if (!$perl{threads} || $opts{threads} <= 1);
# choose min of specified threads and amount of work # choose min of specified threads minus self and amount of work
my $nthr = min($opts{threads}, $q->pending); my $nthr = min($opts{threads} - 1, $q->pending);
my @threads = map {threads->create(sub { my $dqsum = sub {
while (defined (my $sum = $q->dequeue)) { while (defined (my $sum = $q->dequeue_nb)) {
my ($qi, $i, $file, $x1, $x2) = @{$sum}; my ($qi, $i, $file, $x1, $x2) = @{$sum};
my $hash = sum1($file, $x1, $x2); my $hash = sum1($file, $x1, $x2);
$qret->enqueue([$qi, $i, $hash]); $qret->enqueue([$qi, $i, $hash]);
} }
})} (1 .. $nthr); };
# force threads to exit my @threads = map {threads->create($dqsum)} (1 .. $nthr);
$q->enqueue(undef) foreach (@threads); # ensure work gets done even if thread creation fails
&$dqsum();
foreach (@threads) { foreach (@threads) {
$_->join if ($_); $_->join if ($_);
} }

File diff suppressed because one or more lines are too long