public Task UpdateBuildConfigs(string connectionId, IEnumerable <BuildConfig> buildsConfigs) { return(Task.Run( () => { var buildCiIds = buildsConfigs .Where(b => !string.IsNullOrEmpty(b.CiExternalId) && !b.CiExternalId.StartsWith("-")) .Select(b => b.CiExternalId) .ToList() .ToList(); Parallel.ForEach( buildCiIds, build => { if (BuildsPerConnId.ContainsKey(connectionId) && !BuildsPerConnId[connectionId].Contains(build)) { BuildsPerConnId[connectionId].Add(build); } }); Parallel.ForEach( buildCiIds, build => { if (!BuildsToBeRefreshed.ContainsKey(build)) { BuildsToBeRefreshed.TryAdd(build, build); } }); })); }
public Task RemoveAllBuildConfigs(string connectionId) { return(Task.Run( () => { var builds = new List <string>(); if (BuildsPerConnId.ContainsKey(connectionId)) { BuildsPerConnId.TryRemove(connectionId, out builds); } Parallel.ForEach( builds, build => { var exists = BuildsPerConnId.Values .SelectMany(b => b) .Contains(build); if (exists) { return; } string bOut; BuildsToBeRefreshed.TryRemove(build, out bOut); }); Logger.Debug("Remove builds for {connectionId}", connectionId); })); }
public Task RemoveBuildConfig(string connectionId, BuildConfig buildConfig) { return(Task.Run( () => { var buildId = buildConfig.CiExternalId; if (BuildsPerConnId.ContainsKey(connectionId) && BuildsPerConnId[connectionId].Contains(buildId)) { BuildsPerConnId[connectionId].Remove(buildId); } var exists = BuildsPerConnId.Values .SelectMany(b => b) .Contains(buildId); if (exists) { return; } string bOut; BuildsToBeRefreshed.TryRemove(buildId, out bOut); Logger.Debug("Remove build {buildId} for {connectionId}", buildId, connectionId); })); }
public async Task AddBuildConfigs(string connectionId, IEnumerable <BuildConfig> buildsConfigs) { // remove any existing builds for this connection await RemoveAllBuildConfigs(connectionId); var buildCiIds = buildsConfigs .Where(b => !string.IsNullOrEmpty(b.CiExternalId) && !b.CiExternalId.StartsWith("-")) .Select(b => b.CiExternalId) .ToList() .ToList(); BuildsPerConnId.AddOrUpdate(connectionId, buildCiIds, (oldkey, oldvalue) => buildCiIds); Parallel.ForEach(buildCiIds, build => { if (!BuildsToBeRefreshed.ContainsKey(build)) { BuildsToBeRefreshed.TryAdd(build, build); } }); }