projects
/
cumulus.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Fix a bug in computing the size of a segment that led to utilization > 1.0.
[cumulus.git]
/
metadata.cc
diff --git
a/metadata.cc
b/metadata.cc
index
a3323a1
..
c27278b
100644
(file)
--- a/
metadata.cc
+++ b/
metadata.cc
@@
-198,12
+198,13
@@
bool MetadataWriter::find(const string& path)
}
/* Does a file appear to be unchanged from the previous time it was backed up,
}
/* Does a file appear to be unchanged from the previous time it was backed up,
- * based on stat information?
- *
- * TODO: Notice files that were modified as they were being backed up the last
- * time. */
+ * based on stat information? */
bool MetadataWriter::is_unchanged(const struct stat *stat_buf)
{
bool MetadataWriter::is_unchanged(const struct stat *stat_buf)
{
+ if (old_metadata.find("volatile") != old_metadata.end()
+ && parse_int(old_metadata["volatile"]) != 0)
+ return false;
+
if (old_metadata.find("ctime") == old_metadata.end())
return false;
if (stat_buf->st_ctime != parse_int(old_metadata["ctime"]))
if (old_metadata.find("ctime") == old_metadata.end())
return false;
if (stat_buf->st_ctime != parse_int(old_metadata["ctime"]))
@@
-268,6
+269,11
@@
void MetadataWriter::metadata_flush()
ObjectReference indirect;
for (list<MetadataItem>::iterator i = items.begin();
i != items.end(); ++i) {
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)) {
// Write out an indirect reference to any previous objects which could
// be reused
if (!i->reused || !indirect.merge(i->ref)) {