X-Git-Url: http://git.vrable.net/?a=blobdiff_plain;f=store.cc;h=06e94534555fdceaff45778fb888489d5cd8aec7;hb=358b7ac6f741088838fb84979c9127976eb34fdf;hp=52304c2d8f484b3b99ad9fe9a55299170ea5482a;hpb=25b6639fb1783e0061affa177e6d6d2131c457f5;p=cumulus.git diff --git a/store.cc b/store.cc index 52304c2..06e9453 100644 --- a/store.cc +++ b/store.cc @@ -288,3 +288,31 @@ SegmentWriter *SegmentStore::new_segment() return new SegmentWriter(new FileOutputStream(f), id); } + +SegmentPartitioner::SegmentPartitioner(SegmentStore *s) + : store(s), + segment(NULL), + object(NULL) +{ + // Default target size is around 1 MB + target_size = 1024 * 1024; +} + +SegmentPartitioner::~SegmentPartitioner() +{ + if (segment) + delete segment; +} + +OutputStream *SegmentPartitioner::new_object() +{ + if (segment != NULL && segment->get_size() > target_size) { + delete segment; + segment = NULL; + } + + if (segment == NULL) + segment = store->new_segment(); + + return segment->new_object(); +}