X-Git-Url: http://git.vrable.net/?a=blobdiff_plain;ds=sidebyside;f=scandir.cc;h=f653f4335d9ab69e7fff9c66a49669844fd39670;hb=cc2d3611ed50f5965a9138ffaf3262417993c4f8;hp=654f9fbb99418455e9821299a7d1c736782026cf;hpb=d3c10b747ecec0acc14863fc12db9661c3f88128;p=cumulus.git diff --git a/scandir.cc b/scandir.cc index 654f9fb..f653f43 100644 --- a/scandir.cc +++ b/scandir.cc @@ -57,6 +57,11 @@ LocalDb *db; /* Keep track of all segments which are needed to reconstruct the snapshot. */ std::set segment_list; +/* Snapshot intent: 1=daily, 7=weekly, etc. This is not used directly, but is + * stored in the local database and can help guide segment cleaning and + * snapshot expiration policies. */ +double snapshot_intent = 1.0; + /* Selection of files to include/exclude in the snapshot. */ std::list includes; // Paths in which files should be saved std::list excludes; // Paths which will not be saved @@ -138,7 +143,7 @@ int64_t dumpfile(int fd, dictionary &file_info, const string &path, const ObjectReference &ref = *i; object_list.push_back(ref.to_string()); if (ref.is_normal()) - segment_list.insert(ref.get_segment()); + add_segment(ref.get_segment()); db->UseObject(ref); } size = stat_buf.st_size; @@ -228,7 +233,7 @@ int64_t dumpfile(int fd, dictionary &file_info, const string &path, object_list.push_back(ref.to_string()); if (ref.is_normal()) - segment_list.insert(ref.get_segment()); + add_segment(ref.get_segment()); db->UseObject(ref); size += bytes; @@ -557,7 +562,9 @@ void usage(const char *program) " (defaults to \".bz2\")\n" " --signature-filter=COMMAND\n" " program though which to filter descriptor\n" - " --scheme=NAME optional name for this snapshot\n", + " --scheme=NAME optional name for this snapshot\n" + " --intent=FLOAT intended backup type: 1=daily, 7=weekly, ...\n" + " (defaults to \"1\")\n", lbs_version, program ); } @@ -578,6 +585,7 @@ int main(int argc, char *argv[]) {"dest", 1, 0, 0}, // 4 {"scheme", 1, 0, 0}, // 5 {"signature-filter", 1, 0, 0}, // 6 + {"intent", 1, 0, 0}, // 7 {NULL, 0, 0, 0}, }; @@ -613,6 +621,11 @@ int main(int argc, char *argv[]) case 6: // --signature-filter signature_filter = optarg; break; + case 7: // --intent + snapshot_intent = atof(optarg); + if (snapshot_intent <= 0) + snapshot_intent = 1; + break; default: fprintf(stderr, "Unhandled long option!\n"); return 1; @@ -683,7 +696,8 @@ int main(int argc, char *argv[]) string database_path = localdb_dir + "/localdb.sqlite"; db = new LocalDb; db->Open(database_path.c_str(), desc_buf, - backup_scheme.size() ? backup_scheme.c_str() : NULL); + backup_scheme.size() ? backup_scheme.c_str() : NULL, + snapshot_intent); tss = new TarSegmentStore(backup_dest, db);