X-Git-Url: http://git.vrable.net/?a=blobdiff_plain;f=store.cc;h=8f2c8b328c2d7cacea3ca4c3683993532d1a7980;hb=def20364a3596d7b1fa4a07f3d3ee056cfff2d1e;hp=cf3eea952f3f27524450765b1b8fc232594d0bca;hpb=3addc0c5e928bc7b0fc6ff1ef8b7dff7263cf3ea;p=cumulus.git diff --git a/store.cc b/store.cc index cf3eea9..8f2c8b3 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; @@ -55,7 +57,7 @@ Tarfile::Tarfile(const string &path, const string &segment) 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"); } @@ -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];