Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
06/19/11 23:21:21 (13 years ago)
Author:
cneumuel
Message:

#1233

  • stability improvements for HiveExperiment and HiveEngine
  • parallelized upload of jobs
  • enabled cancellation of job upload
  • reduced the amount of double-assignment of jobs by an additional check in HeartbeatManager
  • tried to tackle the amount of deadlocks by automatically rerunning transactions
  • some fixes
File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive/3.4/Util/PluginUtil.cs

    r6426 r6444  
    3030namespace HeuristicLab.Clients.Hive {
    3131  public static class PluginUtil {
     32    private static object locker = new object();
    3233
    3334    /// <summary>
     
    4041    /// <returns></returns>
    4142    public static List<Guid> GetPluginDependencies(IHiveService service, List<Plugin> onlinePlugins, List<Plugin> alreadyUploadedPlugins, IEnumerable<IPluginDescription> neededPlugins) {
    42       var pluginIds = new List<Guid>();
    43       Dictionary<IPluginDescription, byte[]> checksumsNeededPlugins = CalcChecksumsForPlugins(neededPlugins);
     43      lock (locker) {
     44        var pluginIds = new List<Guid>();
     45        Dictionary<IPluginDescription, byte[]> checksumsNeededPlugins = CalcChecksumsForPlugins(neededPlugins);
    4446
    45       foreach (var neededPlugin in checksumsNeededPlugins) {
    46         Plugin foundPlugin = alreadyUploadedPlugins.FirstOrDefault(p => p.Hash.SequenceEqual(neededPlugin.Value));
    47         if (foundPlugin == null) {
    48           foundPlugin = onlinePlugins.FirstOrDefault(p => {
    49             if (p.Hash != null) {
    50               return p.Hash.SequenceEqual(neededPlugin.Value);
     47        foreach (var neededPlugin in checksumsNeededPlugins) {
     48          Plugin foundPlugin = alreadyUploadedPlugins.FirstOrDefault(p => p.Hash.SequenceEqual(neededPlugin.Value));
     49          if (foundPlugin == null) {
     50            foundPlugin = onlinePlugins.FirstOrDefault(p => {
     51              if (p.Hash != null) {
     52                return p.Hash.SequenceEqual(neededPlugin.Value);
     53              } else {
     54                return false;
     55              }
     56            });
     57
     58            if (foundPlugin == null) {
     59              Plugin p = CreatePlugin(neededPlugin.Key, neededPlugin.Value);
     60              List<PluginData> pd = CreatePluginDatas(neededPlugin.Key);
     61              try {
     62                p.Id = service.AddPlugin(p, pd);
     63                alreadyUploadedPlugins.Add(p);
     64                pluginIds.Add(p.Id);
     65              }
     66              catch (FaultException<PluginAlreadyExistsFault> fault) {
     67                onlinePlugins.Add(service.GetPlugin(fault.Detail.Id));
     68              }
    5169            } else {
    52               return false;
    53             }
    54           });
    55 
    56           if (foundPlugin == null) {
    57             Plugin p = CreatePlugin(neededPlugin.Key, neededPlugin.Value);
    58             List<PluginData> pd = CreatePluginDatas(neededPlugin.Key);
    59             try {
    60               p.Id = service.AddPlugin(p, pd);
    61               alreadyUploadedPlugins.Add(p);
    62               pluginIds.Add(p.Id);
    63             }
    64             catch (FaultException<PluginAlreadyExistsFault> fault) {
    65               onlinePlugins.Add(service.GetPlugin(fault.Detail.Id));
     70              pluginIds.Add(foundPlugin.Id);
    6671            }
    6772          } else {
    6873            pluginIds.Add(foundPlugin.Id);
    6974          }
    70         } else {
    71           pluginIds.Add(foundPlugin.Id);
    7275        }
     76        return pluginIds;
    7377      }
    74       return pluginIds;
    7578    }
    7679
Note: See TracChangeset for help on using the changeset viewer.