public JoinInfo requestToJoin(string server_guid) { // (1) record his guid next_stage.setValue(new RecordKey() .appendKeyPart("_config").appendKeyPart("seeds").appendKeyPart(server_guid), RecordUpdate.WithPayload("")); // (2) send him our instance ID and a list of seeds var ji = new JoinInfo(); ji.data_instance_id = this.data_instance_id; ji.seed_servers = new List<string>(); var seed_key_prefix = new RecordKey() .appendKeyPart("_config") .appendKeyPart("seeds"); foreach (var row in next_stage.scanForward(new ScanRange<RecordKey>(seed_key_prefix, RecordKey.AfterPrefix(seed_key_prefix), null))) { string sname = ((RecordKeyType_String)row.Key.key_parts[row.Key.key_parts.Count - 1]).GetString(); ji.seed_servers.Add(sname); } // add ourself to the seed list! if (!ji.seed_servers.Contains(this.ctx.server_guid)) { ji.seed_servers.Add(this.ctx.server_guid); } return ji; }