X-Git-Url: http://git.vrable.net/?a=blobdiff_plain;f=store.h;h=7629673397d064c3a17ea1d80d0b7bc3fc29228c;hb=358b7ac6f741088838fb84979c9127976eb34fdf;hp=0bc21717dae7f9d63a2e5ba53beb6bf2415b80b6;hpb=25b6639fb1783e0061affa177e6d6d2131c457f5;p=cumulus.git diff --git a/store.h b/store.h index 0bc2171..7629673 100644 --- a/store.h +++ b/store.h @@ -161,6 +161,9 @@ public: OutputStream *new_object(); void finish_object(); + // Determine size of segment data written out so far. + size_t get_size() const { return raw_out->get_pos(); } + // Utility functions for generating and formatting UUIDs for display. static struct uuid generate_uuid(); static std::string format_uuid(const struct uuid u); @@ -193,4 +196,23 @@ private: std::string directory; }; +/* A SegmentPartitioner helps to divide objects up among a collection of + * segments to meet a rough size limit per segment. Like a SegmentWriter, only + * one object should be written at a time; however, multiple + * SegmentPartitioners can be created using the same base SegmentStore. */ +class SegmentPartitioner { +public: + explicit SegmentPartitioner(SegmentStore *s); + ~SegmentPartitioner(); + + OutputStream *new_object(); + +private: + size_t target_size; + + SegmentStore *store; + SegmentWriter *segment; + OutputStream *object; +}; + #endif // _LBS_STORE_H