X-Git-Url: http://git.vrable.net/?a=blobdiff_plain;f=store.cc;h=eb1c6dae9bcaea98735c68534f13b52b09570fb7;hb=82025c010191040717501135d2758db7f5e9fa62;hp=cf3eea952f3f27524450765b1b8fc232594d0bca;hpb=8c77f7c39bcd4ef747ac4167d431d48bd95a4322;p=cumulus.git diff --git a/store.cc b/store.cc index cf3eea9..eb1c6da 100644 --- a/store.cc +++ b/store.cc @@ -18,6 +18,7 @@ #include #include +#include #include #include #include @@ -27,6 +28,7 @@ using std::max; using std::list; +using std::map; using std::set; using std::string; @@ -194,6 +196,8 @@ size_t Tarfile::size_estimate() static const size_t SEGMENT_SIZE = 4 * 1024 * 1024; +static map group_sizes; + ObjectReference TarSegmentStore::write_object(const char *data, size_t len, const std::string &group) { @@ -224,6 +228,8 @@ ObjectReference TarSegmentStore::write_object(const char *data, size_t len, segment->file->write_object(id, data, len); segment->count++; + group_sizes[group] += len; + ObjectReference ref(segment->name, id_buf); // If this segment meets or exceeds the size target, close it so that @@ -240,6 +246,15 @@ void TarSegmentStore::sync() close_segment(segments.begin()->first); } +void TarSegmentStore::dump_stats() +{ + printf("Data written:\n"); + for (map::iterator i = group_sizes.begin(); + i != group_sizes.end(); ++i) { + printf(" %s: %lld\n", i->first.c_str(), i->second); + } +} + void TarSegmentStore::close_segment(const string &group) { struct segment_info *segment = segments[group];