/* LBS: An LFS-inspired filesystem backup system
- * Copyright (C) 2007 Michael Vrable
+ * Copyright (C) 2007-2008 Michael Vrable
*
* Handling of metadata written to backup snapshots. This manages the writing
* of file metadata into new backup snapshots, including breaking the metadata
#include <map>
#include "metadata.h"
+#include "localdb.h"
#include "ref.h"
#include "store.h"
#include "util.h"
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 */
+extern LocalDb *db;
void add_segment(const string& segment);
/* Like strcmp, but sorts in the order that files will be visited in the
i != items.end(); ++i) {
// If indirectly referencing any other metadata logs, be sure those
// segments are properly referenced.
- if (i->reused)
+ if (i->reused) {
add_segment(i->ref.get_segment());
+ db->UseSegment(i->ref.get_segment(), 1.0);
+ }
// Write out an indirect reference to any previous objects which could
// be reused
ObjectReference ref = meta->get_ref();
metadata_root << "@" << ref.to_string() << "\n";
add_segment(ref.get_segment());
+ db->UseSegment(ref.get_segment(), 1.0);
delete meta;
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;
root->write(store);
root->checksum();
add_segment(root->get_ref().get_segment());
+ db->UseSegment(root->get_ref().get_segment(), 1.0);
ObjectReference ref = root->get_ref();
delete root;