#include <algorithm>
#include <list>
+#include <map>
#include <set>
#include <string>
#include <iostream>
using std::max;
using std::list;
+using std::map;
using std::set;
using std::string;
filter_fd = spawn_filter(real_fd);
if (tar_fdopen(&t, filter_fd, (char *)path.c_str(), NULL,
- O_WRONLY | O_CREAT, 0600, TAR_VERBOSE | TAR_GNU) == -1)
+ O_WRONLY | O_CREAT, 0666, TAR_VERBOSE | TAR_GNU) == -1)
throw IOException("Error opening Tarfile");
}
static const size_t SEGMENT_SIZE = 4 * 1024 * 1024;
+static map<string, int64_t> group_sizes;
+
ObjectReference TarSegmentStore::write_object(const char *data, size_t len,
const std::string &group)
{
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
close_segment(segments.begin()->first);
}
+void TarSegmentStore::dump_stats()
+{
+ printf("Data written:\n");
+ for (map<string, int64_t>::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];