Always perform checksum comparison (for disk corruption) when possible.
[cumulus.git] / main.cc
diff --git a/main.cc b/main.cc
index 9734521..0d02727 100644 (file)
--- a/main.cc
+++ b/main.cc
@@ -314,6 +314,12 @@ int64_t dumpfile(int fd, dictionary &file_info, const string &path,
 
             while (!refs.empty()) {
                 ref = refs.front(); refs.pop_front();
+
+                // The file-level checksum guarantees integrity of the data.
+                // To reduce the metadata log size, do not include checksums on
+                // individual objects.
+                ref.clear_checksum();
+
                 object_list.push_back(ref.to_string());
                 db->UseObject(ref);
             }
@@ -326,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)
@@ -850,8 +853,8 @@ int main(int argc, char *argv[])
         dbmeta_filename += backup_scheme + "-";
     dbmeta_filename += timestamp + ".meta" + filter_extension;
     RemoteFile *dbmeta_file = remote->alloc_file(dbmeta_filename, "meta");
-    FileFilter *dbmeta_filter = FileFilter::New(dbmeta_file->get_fd(),
-                                                filter_program);
+    scoped_ptr<FileFilter> dbmeta_filter(FileFilter::New(dbmeta_file->get_fd(),
+                                                         filter_program));
     if (dbmeta_filter == NULL) {
         fprintf(stderr, "Unable to open descriptor output file: %m\n");
         return 1;
@@ -899,8 +902,8 @@ int main(int argc, char *argv[])
 
     RemoteFile *descriptor_file = remote->alloc_file(desc_filename,
                                                      "snapshots");
-    FileFilter *descriptor_filter = FileFilter::New(descriptor_file->get_fd(),
-                                                    signature_filter.c_str());
+    scoped_ptr<FileFilter> descriptor_filter(
+        FileFilter::New(descriptor_file->get_fd(), signature_filter.c_str()));
     if (descriptor_filter == NULL) {
         fprintf(stderr, "Unable to open descriptor output file: %m\n");
         return 1;