private int GetLastStreamEventNumberCached(ITransactionFileReader reader, string streamId) { Ensure.NotNull(streamId, "streamId"); StreamCacheInfo streamInfo; if (_streamInfoCache.TryGet(streamId, out streamInfo) && streamInfo.LastEventNumber.HasValue) { return(streamInfo.LastEventNumber.Value); } var lastEventNumber = GetLastStreamEventNumberUncached(reader, streamId); if (lastEventNumber != ExpectedVersion.NoStream) { // we should take Max on LastEventNumber because there could be a commit happening in parallel thread // so we should not overwrite the actual LastEventNumber updated by Commit method with our stale one _streamInfoCache.Put( streamId, key => new StreamCacheInfo(lastEventNumber, null), (key, old) => new StreamCacheInfo(Math.Max(lastEventNumber, old.LastEventNumber ?? -1), old.Metadata)); } return(lastEventNumber); }
public bool IsOptimized(TFChunk.TFChunk chunk) { TFChunk.TFChunk value; return(_cache.TryGet(chunk.FileName, out value)); }