Skip to content

Commit

Permalink
Apply review feedback.
Browse files Browse the repository at this point in the history
  • Loading branch information
dtivel committed May 24, 2017
1 parent 8c10f33 commit f61913d
Showing 1 changed file with 52 additions and 12 deletions.
64 changes: 52 additions & 12 deletions src/NuGet.Core/NuGet.Protocol/Providers/PluginResourceProvider.cs
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
using NuGet.Common;
using NuGet.Packaging;
using NuGet.Protocol.Plugins;
using NuGet.Shared;

namespace NuGet.Protocol.Core.Types
{
Expand All @@ -28,7 +29,7 @@ public class PluginResourceProvider : ResourceProvider, IDisposable
private Lazy<IPluginDiscoverer> _discoverer;
private bool _isDisposed;
private IPluginFactory _pluginFactory;
private ConcurrentDictionary<string, ConcurrentDictionary<string, Lazy<Task<IReadOnlyList<OperationClaim>>>>> _pluginOperationClaims;
private ConcurrentDictionary<PluginPackageSourceKey, Lazy<Task<IReadOnlyList<OperationClaim>>>> _pluginOperationClaims;
private ConcurrentDictionary<string, Lazy<IPluginMulticlientUtilities>> _pluginUtilities;
private string _rawPluginPaths;
private TimeSpan _requestTimeout;
Expand Down Expand Up @@ -164,8 +165,7 @@ public void Reinitialize(IEnvironmentVariableReader reader,
_requestTimeout = GetRequestTimeout(requestTimeoutInSeconds);
_discoverer = pluginDiscoverer;
_pluginFactory = pluginFactory;
_pluginOperationClaims = new ConcurrentDictionary<string, ConcurrentDictionary<string, Lazy<Task<IReadOnlyList<OperationClaim>>>>>(
StringComparer.OrdinalIgnoreCase);
_pluginOperationClaims = new ConcurrentDictionary<PluginPackageSourceKey, Lazy<Task<IReadOnlyList<OperationClaim>>>>();
_pluginUtilities = new ConcurrentDictionary<string, Lazy<IPluginMulticlientUtilities>>(
StringComparer.OrdinalIgnoreCase);
}
Expand Down Expand Up @@ -210,24 +210,20 @@ await utilities.Value.DoOncePerPluginLifetimeAsync(
() => InitializePluginAsync(plugin, _requestTimeout, cancellationToken),
cancellationToken);

var pluginOperationClaims = _pluginOperationClaims.GetOrAdd(
result.PluginFile.Path,
filePath => new ConcurrentDictionary<string, Lazy<Task<IReadOnlyList<OperationClaim>>>>(StringComparer.OrdinalIgnoreCase));

var lazyOperationClaimsForPackageSource = pluginOperationClaims.GetOrAdd(
packageSourceRepository,
source => new Lazy<Task<IReadOnlyList<OperationClaim>>>(() => GetPluginOperationClaimsAsync(
var lazyOperationClaims = _pluginOperationClaims.GetOrAdd(
new PluginPackageSourceKey(result.PluginFile.Path, packageSourceRepository),
key => new Lazy<Task<IReadOnlyList<OperationClaim>>>(() => GetPluginOperationClaimsAsync(
plugin,
packageSourceRepository,
serviceIndexJson,
cancellationToken)));

await lazyOperationClaimsForPackageSource.Value;
await lazyOperationClaims.Value;

pluginCreationResult = new PluginCreationResult(
plugin,
utilities.Value,
lazyOperationClaimsForPackageSource.Value.Result);
lazyOperationClaims.Value.Result);
}
else
{
Expand Down Expand Up @@ -327,5 +323,49 @@ private static async Task InitializePluginAsync(

plugin.Connection.Options.SetRequestTimeout(requestTimeout);
}

private sealed class PluginPackageSourceKey : IEquatable<PluginPackageSourceKey>
{
internal string PluginFilePath { get; }
internal string PackageSourceRepository { get; }

internal PluginPackageSourceKey(string pluginFilePath, string packageSourceRepository)
{
PluginFilePath = pluginFilePath;
PackageSourceRepository = packageSourceRepository;
}

public override bool Equals(object obj)
{
return Equals(obj as PluginPackageSourceKey);
}

public override int GetHashCode()
{
return HashCodeCombiner.GetHashCode(PluginFilePath, PackageSourceRepository);
}

public bool Equals(PluginPackageSourceKey other)
{
if (ReferenceEquals(this, other))
{
return true;
}

if (ReferenceEquals(null, other))
{
return false;
}

return string.Equals(
PluginFilePath,
other.PluginFilePath,
StringComparison.OrdinalIgnoreCase)
&& string.Equals(
PackageSourceRepository,
other.PackageSourceRepository,
StringComparison.OrdinalIgnoreCase);
}
}
}
}

0 comments on commit f61913d

Please sign in to comment.