コード例 #1
0
    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;
    }