[Box Backup-commit] COMMIT r3592 - box/trunk/lib/backupstore

subversion at boxbackup.org subversion at boxbackup.org
Fri Jul 31 07:39:27 BST 2015


Author: chris
Date: 2015-07-31 06:39:26 +0000 (Fri, 31 Jul 2015)
New Revision: 3592

Modified:
   box/trunk/lib/backupstore/BackupStoreInfo.cpp
   box/trunk/lib/backupstore/BackupStoreInfo.h
Log:
Refactor BackupStoreInfo to allow creating them without RaidFiles.

They can now be created using a constructor, and written to any IOStream.
Needed for writing them to an S3Store.

Modified: box/trunk/lib/backupstore/BackupStoreInfo.cpp
===================================================================
--- box/trunk/lib/backupstore/BackupStoreInfo.cpp	2015-07-31 06:39:13 UTC (rev 3591)
+++ box/trunk/lib/backupstore/BackupStoreInfo.cpp	2015-07-31 06:39:26 UTC (rev 3592)
@@ -34,22 +34,24 @@
 //
 // --------------------------------------------------------------------------
 BackupStoreInfo::BackupStoreInfo()
-	: mAccountID(-1),
-	  mDiscSet(-1),
-	  mReadOnly(true),
-	  mIsModified(false),
-	  mClientStoreMarker(0),
-	  mLastObjectIDUsed(-1),
-	  mBlocksUsed(0),
-	  mBlocksInCurrentFiles(0),
-	  mBlocksInOldFiles(0),
-	  mBlocksInDeletedFiles(0),
-	  mBlocksInDirectories(0),
-	  mNumCurrentFiles(0),
-	  mNumOldFiles(0),
-	  mNumDeletedFiles(0),
-	  mNumDirectories(0),
-	  mAccountEnabled(true)
+: mAccountID(-1),
+  mDiscSet(-1),
+  mReadOnly(true),
+  mIsModified(false),
+  mClientStoreMarker(0),
+  mLastObjectIDUsed(-1),
+  mBlocksUsed(0),
+  mBlocksInCurrentFiles(0),
+  mBlocksInOldFiles(0),
+  mBlocksInDeletedFiles(0),
+  mBlocksInDirectories(0),
+  mBlocksSoftLimit(0),
+  mBlocksHardLimit(0),
+  mNumCurrentFiles(0),
+  mNumOldFiles(0),
+  mNumDeletedFiles(0),
+  mNumDirectories(0),
+  mAccountEnabled(true)
 {
 }
 
@@ -92,6 +94,31 @@
 	info.Save(false);
 }
 
+BackupStoreInfo::BackupStoreInfo(int32_t AccountID, const std::string &FileName,
+	int64_t BlockSoftLimit, int64_t BlockHardLimit)
+: mAccountID(AccountID),
+  mDiscSet(-1),
+  mFilename(FileName),
+  mReadOnly(false),
+  mIsModified(false),
+  mClientStoreMarker(0),
+  mLastObjectIDUsed(0),
+  mBlocksUsed(0),
+  mBlocksInCurrentFiles(0),
+  mBlocksInOldFiles(0),
+  mBlocksInDeletedFiles(0),
+  mBlocksInDirectories(0),
+  mBlocksSoftLimit(BlockSoftLimit),
+  mBlocksHardLimit(BlockHardLimit),
+  mNumCurrentFiles(0),
+  mNumOldFiles(0),
+  mNumDeletedFiles(0),
+  mNumDirectories(0),
+  mAccountEnabled(true)
+{
+	mExtraData.SetForReading(); // extra data is empty in this case
+}
+
 // --------------------------------------------------------------------------
 //
 // Function
@@ -344,11 +371,18 @@
 	// Then... open a write file
 	RaidFileWrite rf(mDiscSet, mFilename);
 	rf.Open(allowOverwrite);
+	Save(rf);
 
+	// Commit it to disc, converting it to RAID now
+	rf.Commit(true);
+}
+
+void BackupStoreInfo::Save(IOStream& rOutStream)
+{
 	// Make header
 	int32_t magic = htonl(INFO_MAGIC_VALUE_2);
-	rf.Write(&magic, sizeof(magic));
-	Archive archive(rf, IOStream::TimeOutInfinite);
+	rOutStream.Write(&magic, sizeof(magic));
+	Archive archive(rOutStream, IOStream::TimeOutInfinite);
 
 	archive.Write(mAccountID);
 	archive.Write(mAccountName);
@@ -389,8 +423,8 @@
 				i++;
 			}
 
-			// Write			
-			rf.Write(objs, b * sizeof(int64_t));
+			// Write
+			rOutStream.Write(objs, b * sizeof(int64_t));
 
 			// Number saved
 			tosave -= b;
@@ -400,12 +434,9 @@
 	archive.Write(mAccountEnabled);
 
 	mExtraData.Seek(0, IOStream::SeekType_Absolute);
-	mExtraData.CopyStreamTo(rf);
+	mExtraData.CopyStreamTo(rOutStream);
 	mExtraData.Seek(0, IOStream::SeekType_Absolute);
 
-	// Commit it to disc, converting it to RAID now
-	rf.Commit(true);
-
 	// Mark is as not modified
 	mIsModified = false;
 }

Modified: box/trunk/lib/backupstore/BackupStoreInfo.h
===================================================================
--- box/trunk/lib/backupstore/BackupStoreInfo.h	2015-07-31 06:39:13 UTC (rev 3591)
+++ box/trunk/lib/backupstore/BackupStoreInfo.h	2015-07-31 06:39:26 UTC (rev 3592)
@@ -80,7 +80,10 @@
 
 public:
 	// Create a New account, saving a blank info object to the disc
-	static void CreateNew(int32_t AccountID, const std::string &rRootDir, int DiscSet, int64_t BlockSoftLimit, int64_t BlockHardLimit);
+	static void CreateNew(int32_t AccountID, const std::string &rRootDir, int DiscSet,
+		int64_t BlockSoftLimit, int64_t BlockHardLimit);
+	BackupStoreInfo(int32_t AccountID, const std::string &FileName,
+		int64_t BlockSoftLimit, int64_t BlockHardLimit);
 
 	// Load it from the store
 	static std::auto_ptr<BackupStoreInfo> Load(int32_t AccountID, const std::string &rRootDir, int DiscSet, bool ReadOnly, int64_t *pRevisionID = 0);
@@ -94,6 +97,7 @@
 
 	// Save modified infomation back to store
 	void Save(bool allowOverwrite = true);
+	void Save(IOStream& rOutStream);
 
 	// Data access functions
 	int32_t GetAccountID() const {return mAccountID;}




More information about the Boxbackup-commit mailing list