Skip to content

Commit 4a16bac

Browse files
committed
Fix issue where stall variation response is found
1 parent 2d44d60 commit 4a16bac

2 files changed

Lines changed: 27 additions & 24 deletions

File tree

src/HttpClient.Cache/Files/FileCache.cs

Lines changed: 16 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,7 @@ TimeProvider timeProvider
9696
CancellationToken cancellationToken = default
9797
)
9898
{
99-
var response = await GetResponseWithVariationAsync(request);
99+
var response = await GetResponseWithVariationAsync(request, cancellationToken);
100100
return response?.Response;
101101
}
102102

@@ -156,27 +156,24 @@ TimeProvider timeProvider
156156
return null;
157157
}
158158

159-
fileInfo = FindJsonFile(responseKey);
160-
if (fileInfo is null)
159+
filename = filename.GetMetadataFileName(responseKey);
160+
fileInfo = filename.GetFileInfo(_rootDirectory);
161+
if (!fileInfo.Exists)
161162
{
162163
return null;
163164
}
164165

165-
filename = FileName.FromFileInfo(fileInfo);
166-
if (filename.IsMetadataFile)
166+
var filePair = ResponseFilePair.FromMetadataFileInfo(fileInfo);
167+
var response = await filePair.GetResponseAsync(_timeProvider.GetUtcNow());
168+
if (response is null)
167169
{
168-
var filePair = ResponseFilePair.FromMetadataFileInfo(fileInfo);
169-
var response = await filePair.GetResponseAsync(_timeProvider.GetUtcNow());
170-
if (response is null)
171-
{
172-
// Response is expired
173-
filePair.TryDelete();
174-
return null;
175-
}
176-
177-
response.RequestMessage = request;
178-
return new(response, variation);
170+
// Response is expired
171+
filePair.TryDelete();
172+
return null;
179173
}
174+
175+
response.RequestMessage = request;
176+
return new(response, variation);
180177
}
181178

182179
return null;
@@ -397,14 +394,9 @@ DateTimeOffset expiration
397394
return;
398395
}
399396

400-
fileInfo = FindJsonFile(responseKey);
401-
if (fileInfo is null)
402-
{
403-
return;
404-
}
405-
406-
filename = FileName.FromFileInfo(fileInfo);
407-
if (!filename.IsMetadataFile)
397+
filename = filename.GetMetadataFileName(responseKey);
398+
fileInfo = filename.GetFileInfo(_rootDirectory);
399+
if (!fileInfo.Exists)
408400
{
409401
return;
410402
}

src/HttpClient.Cache/Files/FileName.cs

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,12 +25,23 @@ string Extension
2525
private FileName(string tempGuid, string extension)
2626
: this(tempGuid, default, null, extension) { }
2727

28+
public FileInfo GetFileInfo(DirectoryInfo directory)
29+
{
30+
return new(Path.Combine(directory.FullName, ToString()));
31+
}
32+
2833
public FileName ToResponseFileName()
2934
{
3035
Debug.Assert(IsMetadataFile, "Cannot convert non-metadata file to response file name.");
3136
return new(KeyHash, ModifiedUtc, EtagHash, ResponseExtension);
3237
}
3338

39+
public FileName GetMetadataFileName(string key)
40+
{
41+
Debug.Assert(IsVariationFile, "Cannot convert non-variation file to metadata file name.");
42+
return new(Hash.ComputeHash(key), ModifiedUtc, EtagHash, MetadataExtension);
43+
}
44+
3445
public void Refresh(FileInfo fileInfo, DateTimeOffset now)
3546
{
3647
Debug.Assert(fileInfo.Name.EndsWith(Extension), "FileInfo name does not match FileName.");

0 commit comments

Comments
 (0)