Changeset 90
- Timestamp:
- 05/11/07 08:45:49 (2 years ago)
- Files:
-
- trunk/Changes (modified) (1 diff)
- trunk/lib/Brackup/Target/Amazon.pm (modified) (3 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/Changes
r88 r90 1 - clean up old, dead code in Amazon target (the old inventory db which 2 is now an official part of the core, and in the Target base class) 3 4 - retry PUTs to Amazon on failure, once, in case it was a transient error, 5 as seems to happen occasionally 6 1 7 - halve number of stats when walking backup root 2 8 trunk/lib/Brackup/Target/Amazon.pm
r84 r90 8 8 # fields in object: 9 9 # s3 -- Net::Amazon::S3 10 # dbh -- sqlite dbi exist cache11 10 # access_key_id 12 11 # sec_access_key_id … … 81 80 my $dig = $chunk->backup_digest; # "sha1:sdfsdf" format scalar 82 81 83 if (my $dbh = $self->{dbh}) {84 my $ans = $dbh->selectrow_array("SELECT COUNT(*) FROM amazon_key_exists WHERE key=?", undef, $dig);85 return 1 if $ans;86 }87 88 82 my $res = eval { $self->{s3}->head_key({ bucket => $self->{chunk_bucket}, key => $dig }); }; 89 83 return 0 unless $res; 90 84 return 0 if $@ && $@ =~ /key not found/; 91 85 return 0 unless $res->{content_type} eq "x-danga/brackup-chunk"; 92 $self->_cache_existence_of($dig);93 86 return 1; 94 87 } … … 108 101 my $blen = $chunk->backup_length; 109 102 my $len = $chunk->length; 103 my $chunkref = $chunk->chunkref; 110 104 111 my $rv = eval { $self->{s3}->add_key({ 112 bucket => $self->{chunk_bucket}, 113 key => $dig, 114 value => ${ $chunk->chunkref }, 115 content_type => 'x-danga/brackup-chunk', 116 }) }; 117 return 0 unless $rv; 118 $self->_cache_existence_of($dig); 105 my $try = sub { 106 eval { 107 $self->{s3}->add_key({ 108 bucket => $self->{chunk_bucket}, 109 key => $dig, 110 value => $$chunkref, 111 content_type => 'x-danga/brackup-chunk', 112 }); 113 }; 114 }; 115 116 my $rv = $try->(); 117 unless ($rv) { 118 # transient failure? 119 warn "Error uploading chunk $chunk... retrying once...\n"; 120 $rv = $try->(); 121 } 122 unless ($rv) { 123 warn "Error uploading chunk again: " . $self->{s3}->errstr . "\n"; 124 return 0; 125 } 119 126 return 1; 120 }121 122 sub _cache_existence_of {123 my ($self, $dig) = @_;124 if (my $dbh = $self->{dbh}) {125 $dbh->do("INSERT INTO amazon_key_exists VALUES (?,1)", undef, $dig);126 }127 127 } 128 128
