From 52df48ca169e07caa5c726d51ed4ed83aed748a5 Mon Sep 17 00:00:00 2001 From: Michael Vrable Date: Mon, 12 May 2008 12:57:49 -0700 Subject: [PATCH] Report compressed size of data written in a backup as well as uncompressed. 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 | 17 +++++++++++++---- store.h | 1 + 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/store.cc b/store.cc index e6e5641..00d0878 100644 --- 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 group_sizes; +/* Backup size summary: segment type -> (uncompressed size, compressed size) */ +static map > 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::iterator i = group_sizes.begin(); + for (map >::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 --- 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 -- 2.20.1