public void FinalizeBackupAddition(BackupSetReference bsname, byte[] backuphash, byte[] mtreehash, HashTreeNode mtreereferences) { BlobLocation backupblocation = GetBlobLocation(backuphash); int? backupRefCount = backupblocation.GetBSetReferenceCount(bsname); if (!backupRefCount.HasValue || backupRefCount == 0) { BlobLocation mtreeblocation = GetBlobLocation(mtreehash); int? mtreeRefCount = mtreeblocation.GetBSetReferenceCount(bsname); if (!mtreeRefCount.HasValue || mtreeRefCount == 0) { ISkippableChildrenIterator <byte[]> childReferences = mtreereferences.GetChildIterator(); foreach (var blobhash in childReferences) { BlobLocation blocation = GetBlobLocation(blobhash); int? refCount = blocation.GetBSetReferenceCount(bsname); if (refCount.HasValue && refCount > 0) // This was already stored { childReferences.SkipChildrenOfCurrent(); } else if (blocation.BlockHashes != null) { foreach (var mbref in blocation.BlockHashes) { IncrementReferenceCountNoRecurse(bsname, mbref, 1); } } IncrementReferenceCountNoRecurse(bsname, blocation, blobhash, 1); } IncrementReferenceCountNoRecurse(bsname, mtreeblocation, mtreehash, 1); } IncrementReferenceCountNoRecurse(bsname, backupblocation, backuphash, 1); } }
public void FinalizeBackupAddition(string bsname, byte[] backuphash, byte[] mtreehash, HashTreeNode mtreereferences) { BlobLocation backupblocation = GetBlobLocation(backuphash); if (!backupblocation.BSetReferenceCounts.ContainsKey(bsname) || backupblocation.BSetReferenceCounts[bsname] == 0) { BlobLocation mtreeblocation = GetBlobLocation(mtreehash); if (!backupblocation.BSetReferenceCounts.ContainsKey(bsname) || mtreeblocation.BSetReferenceCounts[bsname] == 0) { ISkippableChildrenIterator <byte[]> childReferences = mtreereferences.GetChildIterator(); foreach (var blobhash in childReferences) { BlobLocation blocation = GetBlobLocation(blobhash); if (backupblocation.BSetReferenceCounts.ContainsKey(bsname) && blocation.BSetReferenceCounts[bsname] > 0) // This was already stored { childReferences.SkipChildren(); } else if (blocation.BlockHashes != null) { foreach (var mbref in blocation.BlockHashes) { IncrementReferenceCountNoRecurse(bsname, mbref, 1); } } IncrementReferenceCountNoRecurse(bsname, blocation, blobhash, 1); } IncrementReferenceCountNoRecurse(bsname, mtreeblocation, mtreehash, 1); } IncrementReferenceCountNoRecurse(bsname, backupblocation, backuphash, 1); } }