public void Delete(PersistentIndexMemoryChunkStatus statusToDelete, bool includeChunksFromEarlierForks) { foreach (string path in GetPathsOfMemoryChunksToDelete(statusToDelete, includeChunksFromEarlierForks)) { BlobManager.Delete(path); } }
private void SetMemoryChunkStatus(int memoryBlockID, PersistentIndexMemoryChunkStatus status) { if (memoryBlockID >= MemoryChunkStatus.Length) { const int numToAddAtOnce = 10; byte[] memoryChunkStatus = new byte[memoryBlockID + numToAddAtOnce]; for (int i = 0; i < MemoryChunkStatus.Length; i++) { memoryChunkStatus[i] = (byte)MemoryChunkStatus.Span[i]; } MemoryChunkStatus = memoryChunkStatus; } MemoryChunkStatus.Span[memoryBlockID] = (byte)status; }
private IEnumerable <string> GetPathsOfMemoryChunksToDelete(PersistentIndexMemoryChunkStatus statusToDelete, bool includeChunksFromEarlierForks) { int numIDs = MemoryChunkStatus.Length; for (int memoryBlockID = 0; memoryBlockID < numIDs; memoryBlockID++) { PersistentIndexMemoryChunkStatus status = GetMemoryChunkStatus(memoryBlockID); if (status == statusToDelete) { if (includeChunksFromEarlierForks || MemoryChunkIsOnSameFork(memoryBlockID)) { string fullPath = GetPathForMemoryChunk(memoryBlockID); yield return(fullPath); } } } }
private void InitializeMemoryChunkStatusFromPrevious() { int length = PreviousPersistentIndex.MemoryChunkStatus.Length; byte[] updated = new byte[length]; for (int memoryBlockID = 0; memoryBlockID < length; memoryBlockID++) { PersistentIndexMemoryChunkStatus status = PreviousPersistentIndex.GetMemoryChunkStatus(memoryBlockID); PersistentIndexMemoryChunkStatus revisedStatus = status switch { PersistentIndexMemoryChunkStatus.NotYetUsed => PersistentIndexMemoryChunkStatus.NotYetUsed, PersistentIndexMemoryChunkStatus.PreviouslyIncluded => PersistentIndexMemoryChunkStatus.PreviouslyIncluded, PersistentIndexMemoryChunkStatus.NewlyIncluded => PersistentIndexMemoryChunkStatus.PreviouslyIncluded, PersistentIndexMemoryChunkStatus.PreviouslyOmitted => PersistentIndexMemoryChunkStatus.PreviouslyOmitted, PersistentIndexMemoryChunkStatus.NewlyOmitted => PersistentIndexMemoryChunkStatus.PreviouslyOmitted, _ => throw new NotImplementedException() }; updated[memoryBlockID] = (byte)revisedStatus; } MemoryChunkStatus = updated; }