Skip to content

Commit 643db70

Browse files
committed
thread safe
1 parent a73fabb commit 643db70

File tree

4 files changed

+18
-15
lines changed

4 files changed

+18
-15
lines changed

src/csharp/Extensions/Microsoft.Spark.Extensions.DotNet.Interactive/PackageHelper.cs

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,10 @@
22
// The .NET Foundation licenses this file to you under the MIT license.
33
// See the LICENSE file in the project root for more information.
44

5+
using System.Collections.Concurrent;
56
using System.Collections.Generic;
67
using System.IO;
8+
using System.Threading;
79
using Microsoft.DotNet.Interactive.Utility;
810
using Microsoft.Spark.Utils;
911

@@ -12,13 +14,13 @@ namespace Microsoft.Spark.Extensions.DotNet.Interactive
1214
internal class PackageHelper
1315
{
1416
private readonly PackageRestoreContextWrapper _packageRestoreContextWrapper;
15-
private readonly HashSet<string> _filesCopied;
16-
private ulong _metadataCounter;
17+
private readonly ConcurrentDictionary<string, byte> _filesCopied;
18+
private long _metadataCounter;
1719

1820
internal PackageHelper(PackageRestoreContextWrapper packageRestoreContextWrapper)
1921
{
2022
_packageRestoreContextWrapper = packageRestoreContextWrapper;
21-
_filesCopied = new HashSet<string>();
23+
_filesCopied = new ConcurrentDictionary<string, byte>();
2224
_metadataCounter = 0;
2325
}
2426

@@ -89,7 +91,8 @@ internal IEnumerable<string> GetFiles(string writePath)
8991
var metadataPath =
9092
Path.Combine(
9193
writePath,
92-
DependencyProviderUtils.CreateFileName(++_metadataCounter));
94+
DependencyProviderUtils.CreateFileName(
95+
Interlocked.Increment(ref _metadataCounter)));
9396
new DependencyProviderUtils.Metadata
9497
{
9598
AssemblyProbingPaths = assemblyProbingPaths.ToArray(),
@@ -117,7 +120,7 @@ private IEnumerable<ResolvedNuGetPackage> GetNewPackages()
117120

118121
foreach (FileInfo file in files)
119122
{
120-
if (_filesCopied.Add(file.Name))
123+
if (_filesCopied.TryAdd(file.Name, 1))
121124
{
122125
yield return new ResolvedNuGetPackage
123126
{

src/csharp/Microsoft.Spark.UnitTest/DependencyProviderUtilsTests.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -131,7 +131,7 @@ public void TestMetadataSerDe()
131131
public void TestFileNames()
132132
{
133133
using var tempDir = new TemporaryDirectory();
134-
foreach (ulong num in Enumerable.Range(0, 3).Select(x => System.Math.Pow(10, x)))
134+
foreach (long num in Enumerable.Range(0, 3).Select(x => System.Math.Pow(10, x)))
135135
{
136136
string filePath =
137137
Path.Combine(tempDir.Path, DependencyProviderUtils.CreateFileName(num));
@@ -140,9 +140,9 @@ public void TestFileNames()
140140

141141
var expectedFiles = new string[]
142142
{
143-
"dependencyProviderMetadata_00000000000000000001",
144-
"dependencyProviderMetadata_00000000000000000010",
145-
"dependencyProviderMetadata_00000000000000000100",
143+
"dependencyProviderMetadata_0000000000000000001",
144+
"dependencyProviderMetadata_0000000000000000010",
145+
"dependencyProviderMetadata_0000000000000000100",
146146
};
147147
IOrderedEnumerable<string> actualFiles = DependencyProviderUtils
148148
.GetMetadataFiles(tempDir.Path)

src/csharp/Microsoft.Spark.Worker/Utils/AssemblyLoaderHelper.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ static AssemblyLoaderHelper()
4949
/// These files include:
5050
/// - "{packagename}.{version}.nupkg"
5151
/// The nuget packages
52-
/// - <see cref="DependencyProviderUtils.CreateFileName(ulong)"/>
52+
/// - <see cref="DependencyProviderUtils.CreateFileName(long)"/>
5353
/// Serialized <see cref="DependencyProviderUtils.Metadata"/> object.
5454
///
5555
/// On the Worker, in order to resolve the nuget dependencies referenced by

src/csharp/Microsoft.Spark/Utils/DependencyProviderUtils.cs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -19,12 +19,12 @@ internal static string[] GetMetadataFiles(string path) =>
1919
// function.
2020
//
2121
// number => filename
22-
// 0 => dependencyProviderMetadata_00000000000000000000
23-
// 1 => dependencyProviderMetadata_00000000000000000001
22+
// 0 => dependencyProviderMetadata_0000000000000000000
23+
// 1 => dependencyProviderMetadata_0000000000000000001
2424
// ...
25-
// 20 => dependencyProviderMetadata_00000000000000000020
26-
internal static string CreateFileName(ulong number) =>
27-
s_filePattern.Replace("*", $"{number:D20}");
25+
// 20 => dependencyProviderMetadata_0000000000000000020
26+
internal static string CreateFileName(long number) =>
27+
s_filePattern.Replace("*", $"{number:D19}");
2828

2929
[Serializable]
3030
internal class NuGetMetadata

0 commit comments

Comments
 (0)