public async Task InvalidateAsync() { if (!_environment.IsDevelopment()) { File.Delete(GetDatabasePath()); File.Delete(GetSuffixTreePath()); } var azureConnectionString = _configuration["AzureStorageConnectionString"]; var databasePath = GetDatabasePath(); if (!File.Exists(databasePath)) { var blobClient = new BlobClient(azureConnectionString, "catalog", "apicatalog.dat"); await blobClient.DownloadToAsync(databasePath); } var catalog = await ApiCatalogModel.LoadAsync(databasePath); var availabilityContext = ApiAvailabilityContext.Create(catalog); var apiByGuid = catalog.GetAllApis().ToDictionary(a => a.Guid); var suffixTreePath = GetSuffixTreePath(); if (!File.Exists(suffixTreePath)) { // TODO: Ideally the underlying file format uses compression. This seems weird. var blobClient = new BlobClient(azureConnectionString, "catalog", "suffixtree.dat.deflate"); using var blobStream = await blobClient.OpenReadAsync(); using var deflateStream = new DeflateStream(blobStream, CompressionMode.Decompress); using var fileStream = File.Create(suffixTreePath); await deflateStream.CopyToAsync(fileStream); } var suffixTree = SuffixTree.Load(suffixTreePath); var jobBlobClient = new BlobClient(azureConnectionString, "catalog", "job.json"); using var jobStream = await jobBlobClient.OpenReadAsync(); var jobInfo = await JsonSerializer.DeserializeAsync <CatalogJobInfo>(jobStream); _catalog = catalog; _availabilityContext = availabilityContext; _statistics = catalog.GetStatistics(); _apiByGuid = apiByGuid; _suffixTree = suffixTree; _jobInfo = jobInfo; }