X-Git-Url: http://git.vrable.net/?a=blobdiff_plain;f=scandir.cc;h=f119197ff6b1ec8cb0f5547094c1e155791425e5;hb=75e7ec95c43438f4a43e5cff400ebf31e55e5bc5;hp=10e908b68e342aaa4bb91786d6aea908ec6257c1;hpb=8fb5b2c6e85aece6419c28cef278d1ae4204520f;p=cumulus.git diff --git a/scandir.cc b/scandir.cc index 10e908b..f119197 100644 --- a/scandir.cc +++ b/scandir.cc @@ -270,6 +270,10 @@ int64_t dumpfile(int fd, dictionary &file_info, const string &path, subfile.analyze_new_block(block_buf, bytes); refs = subfile.create_incremental(tss, o, block_age); } else { + if (flag_rebuild_statcache && ref.is_normal()) { + subfile.analyze_new_block(block_buf, bytes); + subfile.store_analyzed_signatures(ref); + } refs.push_back(ref); } @@ -294,7 +298,9 @@ int64_t dumpfile(int fd, dictionary &file_info, const string &path, // the checksum in the statcache. If not, we have possible disk corruption // and report a warning. if (flag_rebuild_statcache) { - if (found && file_info["checksum"] != metawriter->get_checksum()) { + if (found + && metawriter->is_unchanged(&stat_buf) + && file_info["checksum"] != metawriter->get_checksum()) { fprintf(stderr, "Warning: Checksum for %s does not match expected value\n" " expected: %s\n" @@ -628,6 +634,7 @@ void usage(const char *program) " --intent=FLOAT intended backup type: 1=daily, 7=weekly, ...\n" " (defaults to \"1\")\n" " --full-metadata do not re-use metadata from previous backups\n" + " --rebuild-statcache re-read all file data to verify statcache\n" " -v --verbose list files as they are backed up\n" "\n" "Exactly one of --dest or --upload-script must be specified.\n", @@ -918,7 +925,7 @@ int main(int argc, char *argv[]) waitpid(signature_pid, &status, 0); if (!WIFEXITED(status) || WEXITSTATUS(status) != 0) { - throw IOException("Signature filter process error"); + fatal("Signature filter process error"); } }