static const size_t LBS_METADATA_BLOCK_SIZE = 65536;
+// If true, forces a full write of metadata: will not include pointers to
+// metadata in old snapshots.
+bool flag_full_metadata = false;
+
/* TODO: Move to header file */
void add_segment(const string& segment);
ObjectReference indirect;
for (list<MetadataItem>::iterator i = items.begin();
i != items.end(); ++i) {
+ // If indirectly referencing any other metadata logs, be sure those
+ // segments are properly referenced.
+ if (i->reused)
+ add_segment(i->ref.get_segment());
+
// Write out an indirect reference to any previous objects which could
// be reused
if (!i->reused || !indirect.merge(i->ref)) {
item.reused = false;
item.text += encode_dict(info) + "\n";
- if (info == old_metadata) {
+ if (info == old_metadata && !flag_full_metadata) {
ObjectReference ref = ObjectReference::parse(old_metadata_loc);
if (!ref.is_null()) {
item.reused = true;