Ejemplo n.º 1
0
 public void Delete(PersistentIndexMemoryChunkStatus statusToDelete, bool includeChunksFromEarlierForks)
 {
     foreach (string path in GetPathsOfMemoryChunksToDelete(statusToDelete, includeChunksFromEarlierForks))
     {
         BlobManager.Delete(path);
     }
 }
Ejemplo n.º 2
0
 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;
 }
Ejemplo n.º 3
0
        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);
                    }
                }
            }
        }
Ejemplo n.º 4
0
        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;
        }