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.
using std::max;
using std::list;
using std::map;
using std::max;
using std::list;
using std::map;
using std::set;
using std::string;
using std::set;
using std::string;
static const size_t SEGMENT_SIZE = 4 * 1024 * 1024;
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)
ObjectReference TarSegmentStore::write_object(const char *data, size_t len,
const std::string &group)
segment = new segment_info;
segment->name = generate_uuid();
segment = new segment_info;
segment->name = generate_uuid();
+ segment->group = group;
segment->basename = segment->name + ".tar";
segment->basename += filter_extension;
segment->count = 0;
segment->basename = segment->name + ".tar";
segment->basename += filter_extension;
segment->count = 0;
segment->count++;
segment->size += len;
segment->count++;
segment->size += len;
- group_sizes[group] += len;
+ group_sizes[group].first += len;
ObjectReference ref(segment->name, id_buf);
ObjectReference ref(segment->name, id_buf);
void TarSegmentStore::dump_stats()
{
printf("Data written:\n");
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) {
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);
db->SetSegmentChecksum(segment->name, segment->basename, checksum,
segment->size);
}
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;
+ }
private:
struct segment_info {
Tarfile *file;
private:
struct segment_info {
Tarfile *file;
std::string name; // UUID
int count; // Objects written to this segment
int size; // Combined size of objects written
std::string name; // UUID
int count; // Objects written to this segment
int size; // Combined size of objects written