projects
/
cumulus.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Slight tweaks to the local database to improve cleaning procedures.
[cumulus.git]
/
metadata.cc
diff --git
a/metadata.cc
b/metadata.cc
index
c27278b
..
2b5f12a
100644
(file)
--- a/
metadata.cc
+++ b/
metadata.cc
@@
-12,6
+12,7
@@
#include <map>
#include "metadata.h"
#include <map>
#include "metadata.h"
+#include "localdb.h"
#include "ref.h"
#include "store.h"
#include "util.h"
#include "ref.h"
#include "store.h"
#include "util.h"
@@
-24,7
+25,12
@@
using std::ostringstream;
static const size_t LBS_METADATA_BLOCK_SIZE = 65536;
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 */
/* 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
void add_segment(const string& segment);
/* Like strcmp, but sorts in the order that files will be visited in the
@@
-271,8
+277,10
@@
void MetadataWriter::metadata_flush()
i != items.end(); ++i) {
// If indirectly referencing any other metadata logs, be sure those
// segments are properly referenced.
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());
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
// Write out an indirect reference to any previous objects which could
// be reused
@@
-320,6
+328,7
@@
void MetadataWriter::metadata_flush()
ObjectReference ref = meta->get_ref();
metadata_root << "@" << ref.to_string() << "\n";
add_segment(ref.get_segment());
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;
delete meta;
@@
-348,7
+357,7
@@
void MetadataWriter::add(dictionary info)
item.reused = false;
item.text += encode_dict(info) + "\n";
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;
ObjectReference ref = ObjectReference::parse(old_metadata_loc);
if (!ref.is_null()) {
item.reused = true;
@@
-374,6
+383,7
@@
ObjectReference MetadataWriter::close()
root->write(store);
root->checksum();
add_segment(root->get_ref().get_segment());
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;
ObjectReference ref = root->get_ref();
delete root;