X-Git-Url: http://git.vrable.net/?p=cumulus.git;a=blobdiff_plain;f=metadata.cc;h=96d21ea27d31e512c9e910aa727bee3d2eb75117;hp=2933ce9c067e94fcc53703f4e706aa2d9a5ccec5;hb=HEAD;hpb=64bff41cb3ccdd60e767a5bb9ed8525d2dda1966 diff --git a/metadata.cc b/metadata.cc index 2933ce9..96d21ea 100644 --- a/metadata.cc +++ b/metadata.cc @@ -25,6 +25,7 @@ #include #include +#include #include #include #include @@ -49,7 +50,6 @@ bool flag_full_metadata = false; /* TODO: Move to header file */ extern LocalDb *db; -void add_segment(const string& segment); /* Like strcmp, but sorts in the order that files will be visited in the * filesystem. That is, we break paths apart at slashes, and compare path @@ -296,8 +296,7 @@ void MetadataWriter::metadata_flush() // If indirectly referencing any other metadata logs, be sure those // segments are properly referenced. if (i->reused) { - add_segment(i->ref.get_segment()); - db->UseSegment(i->ref.get_segment(), 1.0); + db->UseObject(i->ref); } // Write out an indirect reference to any previous objects which could @@ -338,15 +337,13 @@ void MetadataWriter::metadata_flush() /* Write current metadata information to a new object. */ LbsObject *meta = new LbsObject; meta->set_group("metadata"); - meta->set_data(m.data(), m.size()); + meta->set_data(m.data(), m.size(), NULL); meta->write(store); - meta->checksum(); /* Write a reference to this block in the root. */ ObjectReference ref = meta->get_ref(); metadata_root << "@" << ref.to_string() << "\n"; - add_segment(ref.get_segment()); - db->UseSegment(ref.get_segment(), 1.0); + db->UseObject(ref); delete meta; @@ -377,7 +374,7 @@ void MetadataWriter::add(dictionary info) if (info == old_metadata && !flag_full_metadata) { ObjectReference ref = ObjectReference::parse(old_metadata_loc); - if (!ref.is_null()) { + if (!ref.is_null() && db->IsAvailable(ref)) { item.reused = true; item.ref = ref; } @@ -397,11 +394,9 @@ ObjectReference MetadataWriter::close() LbsObject *root = new LbsObject; root->set_group("metadata"); - root->set_data(root_data.data(), root_data.size()); + root->set_data(root_data.data(), root_data.size(), NULL); root->write(store); - root->checksum(); - add_segment(root->get_ref().get_segment()); - db->UseSegment(root->get_ref().get_segment(), 1.0); + db->UseObject(root->get_ref()); ObjectReference ref = root->get_ref(); delete root;