Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
02/14/11 18:23:37 (14 years ago)
Author:
cneumuel
Message:

#1233

  • removed GetConfigurationFile from service -> configuration is now submitted as a plugin with one file (the configuration file)
  • resource ids are now checked before uploading a hive experiment, only valid resource names are accepted
  • added SharpZipLib License to ConsoleClient project, so dependecies are satisfied
Location:
branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.Slave/3.4
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.Slave/3.4/Core.cs

    r5451 r5458  
    402402      String pluginDir = Path.Combine(PluginCache.Instance.PluginTempBaseDir, myJob.Id.ToString());
    403403      bool pluginsPrepared = false;
     404      string configFileName = string.Empty;
    404405
    405406      try {
    406         PluginCache.Instance.PreparePlugins(myJob, jobData);
     407        PluginCache.Instance.PreparePlugins(myJob, out configFileName);
    407408        ClientCom.LogMessage("Plugins fetched for job " + myJob.Id);
    408409        pluginsPrepared = true;
     
    414415      if (pluginsPrepared) {
    415416        try {
    416           AppDomain appDomain = HeuristicLab.PluginInfrastructure.Sandboxing.SandboxManager.CreateAndInitSandbox(myJob.Id.ToString(), pluginDir, Path.Combine(pluginDir, PluginCache.ConfigFileName));
     417          AppDomain appDomain = HeuristicLab.PluginInfrastructure.Sandboxing.SandboxManager.CreateAndInitSandbox(myJob.Id.ToString(), pluginDir, Path.Combine(pluginDir, configFileName));
    417418          appDomain.UnhandledException += new UnhandledExceptionEventHandler(appDomain_UnhandledException);
    418419          lock (engines) {
  • branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.Slave/3.4/PluginCache.cs

    r5451 r5458  
    3434  public class PluginCache {
    3535    private static object locker = new object();
    36     public const string ConfigFileName = "Sandbox.config";
    3736    private const string lastUsedFileName = "lastUsed.dat";
    3837
     
    5251          instance = new PluginCache();
    5352        return instance;
    54       }
    55     }
    56 
    57     public string ConfigFilePath {
    58       get {
    59         return Path.Combine(PluginCacheDir, ConfigFileName);
    6053      }
    6154    }
     
    8376
    8477      foreach (string dir in Directory.EnumerateDirectories(PluginCacheDir)) {
    85         cachedPluginsGuids.Add(Guid.Parse(getFilenameFromPath(dir)));
     78        cachedPluginsGuids.Add(Guid.Parse(getFilenameFromPath(dir))); // Todo: cleaner solution to getFilenameFromPath
    8679      }
    8780    }
    8881
    8982    [MethodImpl(MethodImplOptions.Synchronized)]
    90     public void CopyPluginsForJob(List<Plugin> requests, Guid jobId) {
     83    public void CopyPluginsForJob(List<Plugin> requests, Guid jobId, out string configFileName) {
    9184      lock (locker) {
     85        configFileName = string.Empty;
    9286        String targetDir = Path.Combine(PluginTempBaseDir, jobId.ToString());
    9387
     
    9791        Directory.CreateDirectory(targetDir);
    9892
    99 
    10093        foreach (Plugin requestedPlugin in requests) {
    101           string curPath = Path.Combine(PluginCacheDir, requestedPlugin.Id.ToString());
    102           if (Directory.Exists(curPath)) {
    103             writeDateLastUsed(curPath);
    104 
    105             foreach (string file in Directory.GetFiles(curPath)) {
    106               string fn = getFilenameFromPath(file);
    107               if (fn != lastUsedFileName)
    108                 File.Copy(file, Path.Combine(targetDir, fn));
    109             }
    110           }
    111         }
    112 
    113         // copy config file
    114         File.Copy(ConfigFilePath, Path.Combine(targetDir, ConfigFileName));
    115 
    116         // copy files from PluginInfrastructure, which are not declared
     94          var filePaths = GetPluginFilePaths(requestedPlugin.Id);
     95          foreach (string filePath in filePaths) {
     96            File.Copy(filePath, Path.Combine(targetDir, Path.GetFileName(filePath)));
     97          }
     98
     99          if (requestedPlugin.Name == "Configuration") {
     100            configFileName = Path.Combine(targetDir, Path.GetFileName(filePaths.SingleOrDefault())); // configuration plugin consists only of 1 file (usually the "HeuristicLab X.X.exe.config")
     101          }
     102        }
     103
     104        // copy files from PluginInfrastructure (which are not declared in any plugins)
    117105        string baseDir = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
    118106        CopyFile(baseDir, targetDir, "HeuristicLab.PluginInfrastructure-3.3.dll");
     
    137125
    138126    [MethodImpl(MethodImplOptions.Synchronized)]
    139     internal void PreparePlugins(Job myJob, JobData jobData) {
     127    internal void PreparePlugins(Job myJob, out string configFileName) {
    140128      lock (locker) {
    141129        SlaveClientCom.Instance.ClientCom.LogMessage("Fetching plugins for job");
     
    174162        localPlugins.AddRange(missingPlugins);
    175163
    176         IEnumerable<PluginData> updateablePlugins = WcfService.Instance.GetPluginDatas(missingGuids);
    177 
    178         foreach (PluginData updateablePlugin in updateablePlugins) {
    179           string pluginDir = Path.Combine(PluginCacheDir, updateablePlugin.PluginId.ToString());
     164        IEnumerable<PluginData> pluginDatas = WcfService.Instance.GetPluginDatas(missingGuids);
     165
     166        foreach (PluginData pluginData in pluginDatas) {
     167          string pluginDir = Path.Combine(PluginCacheDir, pluginData.PluginId.ToString());
    180168
    181169          //put all files belonging to a plugin in the same directory
     
    183171            DirectoryInfo di = Directory.CreateDirectory(pluginDir);
    184172          }
    185           File.WriteAllBytes(Path.Combine(pluginDir, Path.GetFileName(updateablePlugin.FileName)), updateablePlugin.Data);
    186         }
    187 
    188         PluginData configFile = WcfService.Instance.GetConfigurationFile();
    189         File.WriteAllBytes(ConfigFilePath, configFile.Data);
     173          File.WriteAllBytes(Path.Combine(pluginDir, Path.GetFileName(pluginData.FileName)), pluginData.Data);
     174        }
    190175
    191176        DoUpdateRun();
    192         CopyPluginsForJob(requiredPlugins, myJob.Id);
     177        CopyPluginsForJob(requiredPlugins, myJob.Id, out configFileName);
     178      }
     179    }
     180
     181    /// <summary>
     182    /// Returns a list of files which belong to a plugin from the plugincache
     183    /// </summary>
     184    private IEnumerable<string> GetPluginFilePaths(Guid pluginId) {
     185      string pluginPath = Path.Combine(PluginCacheDir, pluginId.ToString());
     186
     187      if (Directory.Exists(pluginPath)) {
     188        WriteDateLastUsed(pluginPath);
     189        foreach (string filePath in Directory.GetFiles(pluginPath)) {
     190          string fn = Path.GetFileName(filePath);
     191          if (fn != lastUsedFileName)
     192            yield return filePath;
     193        }
    193194      }
    194195    }
     
    198199    /// this can later be used to find plugins which are outdated
    199200    /// </summary>   
    200     private void writeDateLastUsed(string path) {
     201    private void WriteDateLastUsed(string path) {
    201202      FileStream fs = new FileStream(Path.Combine(path, lastUsedFileName), FileMode.Create);
    202203      BinaryFormatter formatter = new BinaryFormatter();
     
    218219    /// </summary>
    219220    /// <param name="path"></param>
    220     private void cleanPluginCache() {
     221    private void CleanPluginCache() {
    221222      FileStream fs = null;
    222223      DateTime luDate;
     
    274275        SlaveClientCom.Instance.ClientCom.LogMessage("failed while unloading " + id + " with exception " + ex);
    275276      }
    276       cleanPluginCache();
     277      CleanPluginCache();
    277278    }
    278279  }
  • branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.Slave/3.4/WcfService.cs

    r5405 r5458  
    238238    }
    239239
    240     public PluginData GetConfigurationFile() {
    241       using (Disposable<IHiveService> service = GetSlaveService()) {
    242         try {
    243           PluginData msg = service.Obj.GetConfigurationFile();
    244           return msg;
    245         }
    246         catch (Exception ex) {
    247           HandleNetworkError(ex);
    248           return null;
    249         }
    250       }
    251     }
    252 
    253240    private static Disposable<IHiveService> GetSlaveService() {
    254241      return ServiceLocator.Instance.GetService("hiveslave", "hiveslave");
Note: See TracChangeset for help on using the changeset viewer.