Report compressed size of data written in a backup as well as uncompressed.
authorMichael Vrable <mvrable@cs.ucsd.edu>
Mon, 12 May 2008 19:57:49 +0000 (12:57 -0700)
committerMichael Vrable <mvrable@turin.ucsd.edu>
Mon, 12 May 2008 19:57:49 +0000 (12:57 -0700)
When exiting, a summary of the size of all segments (grouped by type: data,
metadata, ...) is printed.  Extend this so that both the uncompressed and
compressed sizes of the segments are printed, and to do so now also keep
track of the compressed size of data.

store.cc
store.h

index e6e5641..00d0878 100644 (file)
--- a/store.cc
+++ b/store.cc
@@ -29,6 +29,7 @@
 using std::max;
 using std::list;
 using std::map;
+using std::pair;
 using std::set;
 using std::string;
 
@@ -212,7 +213,8 @@ size_t Tarfile::size_estimate()
 
 static const size_t SEGMENT_SIZE = 4 * 1024 * 1024;
 
-static map<string, int64_t> group_sizes;
+/* Backup size summary: segment type -> (uncompressed size, compressed size) */
+static map<string, pair<int64_t, int64_t> > group_sizes;
 
 ObjectReference TarSegmentStore::write_object(const char *data, size_t len,
                                               const std::string &group)
@@ -225,6 +227,7 @@ ObjectReference TarSegmentStore::write_object(const char *data, size_t len,
         segment = new segment_info;
 
         segment->name = generate_uuid();
+        segment->group = group;
         segment->basename = segment->name + ".tar";
         segment->basename += filter_extension;
         segment->count = 0;
@@ -245,7 +248,7 @@ ObjectReference TarSegmentStore::write_object(const char *data, size_t len,
     segment->count++;
     segment->size += len;
 
-    group_sizes[group] += len;
+    group_sizes[group].first += len;
 
     ObjectReference ref(segment->name, id_buf);
 
@@ -266,9 +269,10 @@ void TarSegmentStore::sync()
 void TarSegmentStore::dump_stats()
 {
     printf("Data written:\n");
-    for (map<string, int64_t>::iterator i = group_sizes.begin();
+    for (map<string, pair<int64_t, int64_t> >::iterator i = group_sizes.begin();
          i != group_sizes.end(); ++i) {
-        printf("    %s: %lld\n", i->first.c_str(), i->second);
+        printf("    %s: %lld (%lld compressed)\n", i->first.c_str(),
+               i->second.first, i->second.second);
     }
 }
 
@@ -285,6 +289,11 @@ void TarSegmentStore::close_segment(const string &group)
             db->SetSegmentChecksum(segment->name, segment->basename, checksum,
                                    segment->size);
         }
+
+        struct stat stat_buf;
+        if (stat(segment->rf->get_local_path().c_str(), &stat_buf) == 0) {
+            group_sizes[segment->group].second += stat_buf.st_size;
+        }
     }
 
     segment->rf->send();
diff --git a/store.h b/store.h
index c358770..1f1edf8 100644 (file)
--- a/store.h
+++ b/store.h
@@ -116,6 +116,7 @@ public:
 private:
     struct segment_info {
         Tarfile *file;
+        std::string group;
         std::string name;           // UUID
         int count;                  // Objects written to this segment
         int size;                   // Combined size of objects written