From 788d302e416bf2d40fec8936963175c180e60dd8 Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Thu, 12 Nov 2015 13:41:08 -0500 Subject: [PATCH 1/2] adjust http request caching --- .../HttpClientManager/HttpClientManager.cs | 67 +++---------------- 1 file changed, 11 insertions(+), 56 deletions(-) diff --git a/MediaBrowser.Common.Implementations/HttpClientManager/HttpClientManager.cs b/MediaBrowser.Common.Implementations/HttpClientManager/HttpClientManager.cs index f4d4826ebf..054c5aaafb 100644 --- a/MediaBrowser.Common.Implementations/HttpClientManager/HttpClientManager.cs +++ b/MediaBrowser.Common.Implementations/HttpClientManager/HttpClientManager.cs @@ -164,22 +164,9 @@ namespace MediaBrowser.Common.Implementations.HttpClientManager } } - //request.ServicePoint.BindIPEndPointDelegate = BindIPEndPointCallback; - return request; } - private static IPEndPoint BindIPEndPointCallback(ServicePoint servicePoint, IPEndPoint remoteEndPoint, int retryCount) - { - // Prefer local ipv4 - if (remoteEndPoint.AddressFamily == AddressFamily.InterNetworkV6) - { - return new IPEndPoint(IPAddress.IPv6Any, 0); - } - - return new IPEndPoint(IPAddress.Any, 0); - } - private void AddRequestHeaders(HttpWebRequest request, HttpRequestOptions options) { foreach (var header in options.RequestHeaders.ToList()) @@ -199,20 +186,6 @@ namespace MediaBrowser.Common.Implementations.HttpClientManager } } - /// - /// The _semaphoreLocks - /// - private readonly ConcurrentDictionary _semaphoreLocks = new ConcurrentDictionary(StringComparer.OrdinalIgnoreCase); - /// - /// Gets the lock. - /// - /// The filename. - /// System.Object. - private SemaphoreSlim GetLock(string url) - { - return _semaphoreLocks.GetOrAdd(url, key => new SemaphoreSlim(1, 1)); - } - /// /// Gets the response internal. /// @@ -283,7 +256,7 @@ namespace MediaBrowser.Common.Implementations.HttpClientManager var url = options.Url; var urlHash = url.ToLower().GetMD5().ToString("N"); - + var responseCachePath = Path.Combine(_appPaths.CachePath, "httpclient", urlHash); response = await GetCachedResponse(responseCachePath, options.CacheLength, url).ConfigureAwait(false); @@ -292,31 +265,14 @@ namespace MediaBrowser.Common.Implementations.HttpClientManager return response; } - var semaphore = GetLock(url); + response = await SendAsyncInternal(options, httpMethod).ConfigureAwait(false); - await semaphore.WaitAsync(options.CancellationToken).ConfigureAwait(false); - - try + if (response.StatusCode == HttpStatusCode.OK) { - response = await GetCachedResponse(responseCachePath, options.CacheLength, url).ConfigureAwait(false); - if (response != null) - { - return response; - } - - response = await SendAsyncInternal(options, httpMethod).ConfigureAwait(false); - - if (response.StatusCode == HttpStatusCode.OK) - { - await CacheResponse(response, responseCachePath).ConfigureAwait(false); - } - - return response; - } - finally - { - semaphore.Release(); + await CacheResponse(response, responseCachePath).ConfigureAwait(false); } + + return response; } private async Task GetCachedResponse(string responseCachePath, TimeSpan cacheLength, string url) @@ -361,13 +317,12 @@ namespace MediaBrowser.Common.Implementations.HttpClientManager using (var responseStream = response.Content) { - using (var fileStream = _fileSystem.GetFileStream(responseCachePath, FileMode.Create, FileAccess.Write, FileShare.Read, true)) + var memoryStream = new MemoryStream(); + await responseStream.CopyToAsync(memoryStream).ConfigureAwait(false); + memoryStream.Position = 0; + + using (var fileStream = _fileSystem.GetFileStream(responseCachePath, FileMode.Create, FileAccess.Write, FileShare.None, true)) { - var memoryStream = new MemoryStream(); - - await responseStream.CopyToAsync(memoryStream).ConfigureAwait(false); - - memoryStream.Position = 0; await memoryStream.CopyToAsync(fileStream).ConfigureAwait(false); memoryStream.Position = 0; From b5a7483fcc7504b90cac133f5432ab89148b2ae3 Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Thu, 12 Nov 2015 13:42:16 -0500 Subject: [PATCH 2/2] adjust provider caching --- MediaBrowser.Providers/Music/MusicBrainzAlbumProvider.cs | 6 ------ MediaBrowser.Providers/Omdb/OmdbItemProvider.cs | 6 ++---- MediaBrowser.Providers/Omdb/OmdbProvider.cs | 4 +--- 3 files changed, 3 insertions(+), 13 deletions(-) diff --git a/MediaBrowser.Providers/Music/MusicBrainzAlbumProvider.cs b/MediaBrowser.Providers/Music/MusicBrainzAlbumProvider.cs index 978d611a8c..e73a98b6f9 100644 --- a/MediaBrowser.Providers/Music/MusicBrainzAlbumProvider.cs +++ b/MediaBrowser.Providers/Music/MusicBrainzAlbumProvider.cs @@ -297,12 +297,6 @@ namespace MediaBrowser.Providers.Music ResourcePool = _musicBrainzResourcePool }; - if (!isSearch) - { - options.CacheMode = CacheMode.Unconditional; - options.CacheLength = TimeSpan.FromDays(3); - } - using (var xml = await _httpClient.Get(options).ConfigureAwait(false)) { using (var oReader = new StreamReader(xml, Encoding.UTF8)) diff --git a/MediaBrowser.Providers/Omdb/OmdbItemProvider.cs b/MediaBrowser.Providers/Omdb/OmdbItemProvider.cs index c1ec5061d6..efcc76e694 100644 --- a/MediaBrowser.Providers/Omdb/OmdbItemProvider.cs +++ b/MediaBrowser.Providers/Omdb/OmdbItemProvider.cs @@ -99,9 +99,7 @@ namespace MediaBrowser.Providers.Omdb { Url = url, ResourcePool = OmdbProvider.ResourcePool, - CancellationToken = cancellationToken, - CacheMode = CacheMode.Unconditional, - CacheLength = TimeSpan.FromDays(2) + CancellationToken = cancellationToken }).ConfigureAwait(false)) { @@ -133,7 +131,7 @@ namespace MediaBrowser.Providers.Omdb item.SetProviderId(MetadataProviders.Imdb, result.imdbID); int parsedYear; - if (result.Year.Length > 0 + if (result.Year.Length > 0 && int.TryParse(result.Year.Substring(0, Math.Min(result.Year.Length, 4)), NumberStyles.Any, CultureInfo.InvariantCulture, out parsedYear)) { item.ProductionYear = parsedYear; diff --git a/MediaBrowser.Providers/Omdb/OmdbProvider.cs b/MediaBrowser.Providers/Omdb/OmdbProvider.cs index c7ce57fca4..b68f93cf6b 100644 --- a/MediaBrowser.Providers/Omdb/OmdbProvider.cs +++ b/MediaBrowser.Providers/Omdb/OmdbProvider.cs @@ -43,9 +43,7 @@ namespace MediaBrowser.Providers.Omdb { Url = url, ResourcePool = ResourcePool, - CancellationToken = cancellationToken, - CacheMode = CacheMode.Unconditional, - CacheLength = TimeSpan.FromDays(7) + CancellationToken = cancellationToken }).ConfigureAwait(false)) {