private void MemberJoin(Vsync.Group vsyncGroup) { string memberDirectory = _name; string eventName = _name + "/new_node"; string cloudMakeDirectory = memberDirectory + Path.DirectorySeparatorChar + "CloudMake"; string cloudMakeConfigFilename = cloudMakeDirectory + Path.DirectorySeparatorChar.ToString() + "config.xml"; List <Tuple <string, int> > newNodeEntries; HashSet <int> nameSet, cloudMakeConfigSet; if (_localCloudMakefile == null) { throw new Exception("CloudMakeLocal: There is no CloudMakefile."); } nameSet = _localCloudMakefile.Compatible(memberDirectory); if (nameSet.Count > 0) { Directory.SetCurrentDirectory(_name); #if DEBUG CloudManager.WriteLine(_debugFilename, "Create Directory: " + memberDirectory); #endif Directory.CreateDirectory(memberDirectory); cloudMakeConfigSet = _localCloudMakefile.Compatible(cloudMakeConfigFilename, nameSet); if (cloudMakeConfigSet.Count > 0) { #if DEBUG CloudManager.WriteLine(_debugFilename, "Create Directory: " + cloudMakeDirectory); CloudManager.WriteLine(_debugFilename, "Added CloudMake Config: " + cloudMakeConfigFilename); #endif Directory.CreateDirectory(cloudMakeDirectory); _dependencyStructure.AddCloudMakeConfigFile(cloudMakeConfigFilename); } Directory.SetCurrentDirectory(_curDirectory); newNodeEntries = _localCloudMakefile.FindMatchingEntries(eventName); if (newNodeEntries.Count > 1) { throw new Exception("It is impossible for a NEW_NODE event to have more than one corresponding " + "DFA."); } if (newNodeEntries.Count == 1) { _dependencyStructure.AddEntry(newNodeEntries [0]); _dependencyStructure.AddTokenToEntry(newNodeEntries [0].Item1); #if DEBUG CloudManager.WriteLine(_debugFilename, "Added Token to New Node Event: " + eventName); #endif RunCloudMake(vsyncGroup); } } else { throw new Exception("CloudMakeLocal: There is no matching entry for " + _name + "/new_node"); } }
private void NewMember(string memberName) { string memberDirectory = memberName; string eventName = memberName + "/new_node"; string cloudMakeDirectory = memberDirectory + Path.DirectorySeparatorChar + "CloudMake"; string cloudMakeConfigFilename = cloudMakeDirectory + Path.DirectorySeparatorChar.ToString() + "config.xml"; List <Tuple <string, int> > newNodeEntries; HashSet <int> nodenameEntries, cloudMakefileEntries; nodenameEntries = _leaderCloudMakefiles [_partition].Compatible(memberName); foreach (int entry in nodenameEntries) { CloudManager.WriteLine(_debugFilename, "Entry: " + entry.ToString()); } if (nodenameEntries.Count > 0) { Directory.CreateDirectory(memberDirectory); #if DEBUG CloudManager.WriteLine(_debugFilename, "Created Directory: " + memberDirectory); #endif cloudMakefileEntries = _leaderCloudMakefiles [_partition].Compatible(cloudMakeConfigFilename, nodenameEntries); if (cloudMakefileEntries.Count > 0) { Directory.CreateDirectory(cloudMakeDirectory); _dependencyStructure.AddCloudMakeConfigFile(cloudMakeConfigFilename); #if DEBUG CloudManager.WriteLine(_debugFilename, "Created Directory: " + cloudMakeDirectory); CloudManager.WriteLine(_debugFilename, "Added CloudMake Config: " + cloudMakeConfigFilename); #endif } newNodeEntries = _leaderCloudMakefiles [_partition].FindMatchingEntries(eventName); if (newNodeEntries.Count > 1) { throw new Exception("It is impossible for a NEW_NODE event to have more than one corresponding " + "DFA."); } if (newNodeEntries.Count == 1) { _dependencyStructure.AddEntry(newNodeEntries [0]); _dependencyStructure.AddTokenToEntry(newNodeEntries [0].Item1); #if DEBUG CloudManager.WriteLine(_debugFilename, "Added Token to New Node Event: " + eventName); #endif } } }