public Cluster(int basePort, int size, Func <int, bool> leaderCandidate) { this.basePort = basePort; var members = new Configuration.Member[size]; for (int i = 0; i < size; i++) { members[i] = new Configuration.Member(testOffset + i, leaderCandidate(i)); } cfg = new Configuration(members); this.members = new Node[size]; for (int i = 0; i < size; i++) { this.members[i] = new ClusterNode(cfg, cfg.Members[i], new Address(basePort + i), GetAddressOf); } attachments = new object[size]; }
public void ChangeConfiguration(int size, Func <int, bool> leaderCandidate) { var cfgMembers = new Configuration.Member[size]; for (int i = 0; i < size; i++) { cfgMembers[i] = new Configuration.Member(testOffset + i, leaderCandidate(i)); } var newCFG = new Configuration(cfgMembers); if (size < members.Length) { for (int i = 0; i < size; i++) { members[i].ChangeConfiguration(newCFG); } for (int i = size; i < this.members.Length; i++) { members[i].Dispose(); } members = members.Subarray(0, size); } else { var newMembers = new Node[size]; for (int i = 0; i < members.Length; i++) { members[i].ChangeConfiguration(newCFG); newMembers[i] = members[i]; } for (int i = members.Length; i < size; i++) { newMembers[i] = new ClusterNode(newCFG, newCFG.Members[i], new Address(basePort + i), GetAddressOf); } members = newMembers; } cfg = newCFG; }
public ClusterNode(Configuration cfg, Configuration.Member self, Address selfAddress, Func <int, Address> getAddressOf) : base(self) { this.getAddressOf = getAddressOf; Port = Start(cfg, selfAddress, null); }
public void OnOutOfConfig(Configuration newConfig, Configuration.Member memberID) { Assert.Fail("Configuration error: Local member ID " + memberID + " not found in new configuration " + newConfig); }
public void OnOutOfConfig(Configuration newConfig, Configuration.Member memberID) { Log.Error("Terminal: Consensus member ID " + memberID + " not found in new configuration " + newConfig); Environment.Exit(-1); }