From: Michael Vrable Date: Wed, 10 Sep 2014 21:36:18 +0000 (-0700) Subject: Always perform checksum comparison (for disk corruption) when possible. X-Git-Url: http://git.vrable.net/?p=cumulus.git;a=commitdiff_plain;h=42113f2be5d9d3c6f1f2bcedcea3518efe2bdcf2 Always perform checksum comparison (for disk corruption) when possible. If the statcache indicates that a file should be unchanged, but we have read the file contents anyway (generally, because this was needed for segment cleaning), then comparing the old and new checksums is basically free. Do so, and report any discrepancies as they may indicate on-disk corruption. --- diff --git a/main.cc b/main.cc index daad058..0d02727 100644 --- a/main.cc +++ b/main.cc @@ -332,22 +332,19 @@ int64_t dumpfile(int fd, dictionary &file_info, const string &path, file_info["checksum"] = file_hash->digest_str(); } - // Sanity check: if we are rebuilding the statcache, but the file looks - // like it hasn't changed, then the newly-computed checksum should match - // the checksum in the statcache. If not, we have possible disk corruption - // and report a warning. - if (flag_rebuild_statcache) { - 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" - " actual: %s\n", - path.c_str(), - metawriter->get_checksum().c_str(), - file_info["checksum"].c_str()); - } + // Sanity check: if the file looks like it hasn't changed, then the + // newly-computed checksum should match the checksum in the statcache. If + // not, we have possible disk corruption and report a warning. + 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" + " actual: %s\n", + path.c_str(), + metawriter->get_checksum().c_str(), + file_info["checksum"].c_str()); } if (verbose && status != NULL)