X-Git-Url: http://git.vrable.net/?a=blobdiff_plain;f=metadata.cc;h=96d21ea27d31e512c9e910aa727bee3d2eb75117;hb=5a6aa5c252a70554a6987bfbb721ef7d722e1e20;hp=2ae075190cf49afaed661fd53f66498843bb6a97;hpb=f38dd9bcb0caffd3fc9126b05788c936690e8288;p=cumulus.git diff --git a/metadata.cc b/metadata.cc index 2ae0751..96d21ea 100644 --- a/metadata.cc +++ b/metadata.cc @@ -1,7 +1,6 @@ -/* Cumulus: Smart Filesystem Backup to Dumb Servers - * - * Copyright (C) 2007-2008 The Regents of the University of California - * Written by Michael Vrable +/* Cumulus: Efficient Filesystem Backup to the Cloud + * Copyright (C) 2007-2008 The Cumulus Developers + * See the AUTHORS file for a list of contributors. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -26,6 +25,7 @@ #include #include +#include #include #include #include @@ -50,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 @@ -297,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 @@ -339,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; @@ -378,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; } @@ -398,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;