DeleteResult <JSONDocument> IDocumentStore.DeleteDocument(RemoveOperation operation) { UsageStats stats = new UsageStats(); stats.BeginSample(); DeleteResult <JSONDocument> result = new DeleteResult <JSONDocument>(); CacheItem cItem; if (!_cache.ContainsKey(operation.RowId)) { //TODO: Read-through if (!_persistenceManager.MetadataIndex(_parent.Name).ContainsRowId(operation.RowId)) { if (LoggerManager.Instance.StorageLogger != null && LoggerManager.Instance.StorageLogger.IsWarnEnabled) { LoggerManager.Instance.StorageLogger.Warn("Delete : document not found.", "Document not found while deleting in metadataIndex. rowId = " + operation.RowId + " collection = " + Name); } AddFailedOperation(operation); return(result); } cItem = LoadDocument(operation.RowId, operation.Context); } else { cItem = CacheGet(operation.RowId); } //Remove an item from eviction index, so that it's not marked for eviction. if (cItem != null) { _evictionPolicy.Remove(operation.RowId, cItem.EvictionHint); } result.Document = cItem.Document; result.RowId = operation.RowId; //_cache.Remove(operation.RowId); //CacheRemove(operation.RowId); _indexManager.UpdateIndex(operation.RowId, result.Document, new JSONDocument(), operation.OperationId); cItem.Flag.SetBit(BitsetConstants.DocumentDirty); cItem.Flag.SetBit(BitsetConstants.MarkedForDeletion); PersistenceOperation persistenceOperation = new PersistenceDeleteOperation(operation.OperationId, _parent.Name, operation.RowId, cItem, operation.Context); AddToPersistenceDictionary(persistenceOperation); _persistenceManager.MetadataIndex(_parent.Name).Remove(new DocumentKey(cItem.Document.Key)); if (_statsCollector != null) { stats.EndSample(); _statsCollector.IncrementStatsValue(StatisticsType.AvgDeleteTime, stats.Current); _statsCollector.IncrementStatsValue(StatisticsType.DeletesPerSec); } return(result); }