Create an SQL script for cleaning out the local object database.
[cumulus.git] / scandir.cc
index 26b83ed..52c82f8 100644 (file)
@@ -68,7 +68,7 @@ void metadata_flush()
 
     /* Write current metadata information to a new object. */
     LbsObject *meta = new LbsObject;
-    meta->set_group("root");
+    meta->set_group("metadata");
     meta->set_data(m.data(), m.size());
     meta->write(tss);
     meta->checksum();
@@ -145,7 +145,20 @@ int64_t dumpfile(int fd, dictionary &file_info)
         // Store a copy of the object if one does not yet exist
         if (ref.get_segment().size() == 0) {
             LbsObject *o = new LbsObject;
-            o->set_group("data");
+
+            /* We might still have seen this checksum before, if the object was
+             * stored at some time in the past, but we have decided to clean
+             * the segment the object was originally stored in (FindObject will
+             * not return such objects).  When rewriting the object contents,
+             * put it in a separate group, so that old objects get grouped
+             * together.  The hope is that these old objects will continue to
+             * be used in the future, and we obtain segments which will
+             * continue to be well-utilized. */
+            if (db->IsOldObject(block_csum, bytes))
+                o->set_group("compacted");
+            else
+                o->set_group("data");
+
             o->set_data(block_buf, bytes);
             o->write(tss);
             ref = o->get_ref();
@@ -181,7 +194,7 @@ int64_t dumpfile(int fd, dictionary &file_info)
         }
 
         LbsObject *i = new LbsObject;
-        i->set_group("indirect");
+        i->set_group("metadata");
         i->set_data(blocklist.data(), blocklist.size());
         i->write(tss);
         file_info["data"] = "@" + i->get_name();
@@ -466,15 +479,16 @@ int main(int argc, char *argv[])
     const string md = metadata_root.str();
 
     LbsObject *root = new LbsObject;
-    root->set_group("root");
+    root->set_group("metadata");
     root->set_data(md.data(), md.size());
     root->write(tss);
     root->checksum();
 
     segment_list.insert(root->get_ref().get_segment());
-    descriptor << "Root: " << root->get_ref().to_string() << "\n";
+    descriptor << "Format: LBS Snapshot v0.1\n";
     strftime(desc_buf, sizeof(desc_buf), "%Y-%m-%d %H:%M:%S %z", &time_buf);
     descriptor << "Date: " << desc_buf << "\n";
+    descriptor << "Root: " << root->get_ref().to_string() << "\n";
 
     delete root;