private void RunCloudMake(Vsync.Group vsyncGroup) { _dependencyStructure.Run(); if (_rank == 0) { Dist(vsyncGroup, _dependencyStructure.GetModifiedConfigFiles(), _dependencyStructure.GetModifiedCloudMakeConfigFiles()); } else { vsyncGroup.P2PSend(new Address(_leaders [_partition] [_rank - 1]), CloudManager.RUN_CLOUD_MAKE); } _dependencyStructure.Reset(); }
private void RunCloudMake(Vsync.Group vsyncGroup) { Tuple <HashSet <string>, List <RemoteProcessInfo> > processedInfo; HashSet <string> configFiles; HashSet <string> cloudMakeConfigFiles; HashSet <string> activeConfigFiles; List <RemoteProcessInfo> processes = null; Directory.SetCurrentDirectory(_name); _dependencyStructure.Run(); configFiles = _dependencyStructure.GetModifiedConfigFiles(); cloudMakeConfigFiles = _dependencyStructure.GetModifiedCloudMakeConfigFiles(); CloudManager.WriteLine(_debugFilename, _dependencyStructure.ToString()); foreach (string cloudMakeConfigFilename in cloudMakeConfigFiles) { CloudManager.WriteLine(_debugFilename, cloudMakeConfigFilename); } if (cloudMakeConfigFiles.Count > 1) { throw new Exception("CloudMakeLocal: There are more than one CloudMake config files."); } if (cloudMakeConfigFiles.Count == 1) { processedInfo = ProcessCloudMakeConfigFile(vsyncGroup); activeConfigFiles = processedInfo.Item1; processes = processedInfo.Item2; foreach (string activeConfigFile in activeConfigFiles) { if (File.Exists(activeConfigFile)) { configFiles.Add(activeConfigFile); } } } #if DEBUG CloudManager.WriteLine(_debugFilename, "Active config files:"); foreach (string filename in configFiles) { CloudManager.WriteLine(_debugFilename, filename); } CloudManager.WriteLine(_debugFilename, ""); CloudManager.WriteLine(_debugFilename, "Active CloudMake config files:"); foreach (string filename in cloudMakeConfigFiles) { CloudManager.WriteLine(_debugFilename, filename); } CloudManager.WriteLine(_debugFilename, ""); #endif foreach (string activeConfigFile in configFiles) { List <string> fields = new List <string> (activeConfigFile.Split('/')); string filename = String.Join(Path.DirectorySeparatorChar.ToString(), fields); XmlDocument xmlDoc = new XmlDocument(); xmlDoc.Load(filename); UpdateConfig(filename, xmlDoc.OuterXml); } if (cloudMakeConfigFiles.Count == 1) { foreach (RemoteProcessInfo proc in processes) { if (proc.GetAction() == Action.RUN) { RunProcess(proc.GetName(), proc.GetPath(), proc.GetExec(), proc.GetArgs()); } else if (proc.GetAction() == Action.KILL) { KillProcess(proc.GetName()); } } } _dependencyStructure.Reset(); Directory.SetCurrentDirectory(_curDirectory); }