- Timestamp:
- 02/14/11 18:23:37 (14 years ago)
- 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 402 402 String pluginDir = Path.Combine(PluginCache.Instance.PluginTempBaseDir, myJob.Id.ToString()); 403 403 bool pluginsPrepared = false; 404 string configFileName = string.Empty; 404 405 405 406 try { 406 PluginCache.Instance.PreparePlugins(myJob, jobData);407 PluginCache.Instance.PreparePlugins(myJob, out configFileName); 407 408 ClientCom.LogMessage("Plugins fetched for job " + myJob.Id); 408 409 pluginsPrepared = true; … … 414 415 if (pluginsPrepared) { 415 416 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)); 417 418 appDomain.UnhandledException += new UnhandledExceptionEventHandler(appDomain_UnhandledException); 418 419 lock (engines) { -
branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.Slave/3.4/PluginCache.cs
r5451 r5458 34 34 public class PluginCache { 35 35 private static object locker = new object(); 36 public const string ConfigFileName = "Sandbox.config";37 36 private const string lastUsedFileName = "lastUsed.dat"; 38 37 … … 52 51 instance = new PluginCache(); 53 52 return instance; 54 }55 }56 57 public string ConfigFilePath {58 get {59 return Path.Combine(PluginCacheDir, ConfigFileName);60 53 } 61 54 } … … 83 76 84 77 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 86 79 } 87 80 } 88 81 89 82 [MethodImpl(MethodImplOptions.Synchronized)] 90 public void CopyPluginsForJob(List<Plugin> requests, Guid jobId ) {83 public void CopyPluginsForJob(List<Plugin> requests, Guid jobId, out string configFileName) { 91 84 lock (locker) { 85 configFileName = string.Empty; 92 86 String targetDir = Path.Combine(PluginTempBaseDir, jobId.ToString()); 93 87 … … 97 91 Directory.CreateDirectory(targetDir); 98 92 99 100 93 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) 117 105 string baseDir = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location); 118 106 CopyFile(baseDir, targetDir, "HeuristicLab.PluginInfrastructure-3.3.dll"); … … 137 125 138 126 [MethodImpl(MethodImplOptions.Synchronized)] 139 internal void PreparePlugins(Job myJob, JobData jobData) {127 internal void PreparePlugins(Job myJob, out string configFileName) { 140 128 lock (locker) { 141 129 SlaveClientCom.Instance.ClientCom.LogMessage("Fetching plugins for job"); … … 174 162 localPlugins.AddRange(missingPlugins); 175 163 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()); 180 168 181 169 //put all files belonging to a plugin in the same directory … … 183 171 DirectoryInfo di = Directory.CreateDirectory(pluginDir); 184 172 } 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 } 190 175 191 176 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 } 193 194 } 194 195 } … … 198 199 /// this can later be used to find plugins which are outdated 199 200 /// </summary> 200 private void writeDateLastUsed(string path) {201 private void WriteDateLastUsed(string path) { 201 202 FileStream fs = new FileStream(Path.Combine(path, lastUsedFileName), FileMode.Create); 202 203 BinaryFormatter formatter = new BinaryFormatter(); … … 218 219 /// </summary> 219 220 /// <param name="path"></param> 220 private void cleanPluginCache() {221 private void CleanPluginCache() { 221 222 FileStream fs = null; 222 223 DateTime luDate; … … 274 275 SlaveClientCom.Instance.ClientCom.LogMessage("failed while unloading " + id + " with exception " + ex); 275 276 } 276 cleanPluginCache();277 CleanPluginCache(); 277 278 } 278 279 } -
branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.Slave/3.4/WcfService.cs
r5405 r5458 238 238 } 239 239 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 253 240 private static Disposable<IHiveService> GetSlaveService() { 254 241 return ServiceLocator.Instance.GetService("hiveslave", "hiveslave");
Note: See TracChangeset
for help on using the changeset viewer.