public static ReplHandler InitJoin(IStepsSnapshotKVDB db, ServerContext ctx, string seed_name)
{
// connect to the other server, get his instance id, exchange seeds
IReplConnection seed = ctx.connector.getServerHandle(seed_name);
JoinInfo join_info = seed.requestToJoin(ctx.server_guid);
// record the join result
db.setValue(new RecordKey()
.appendKeyPart("_config")
.appendKeyPart("DATA-INSTANCE-ID"),
RecordUpdate.WithPayload(join_info.data_instance_id));
// init a clean log
db.setValue(new RecordKey()
.appendKeyPart("_logs")
.appendKeyPart(ctx.server_guid)
.appendKeyPart(new RecordKeyType_Long(0)),
RecordUpdate.WithPayload(new byte[0]));
foreach (var seed_server in join_info.seed_servers) {
db.setValue(new RecordKey()
.appendKeyPart("_config")
.appendKeyPart("seeds")
.appendKeyPart(seed_server),
RecordUpdate.WithPayload(""));
}
Console.WriteLine("InitJoin: server ({0}) joining seeds ({1})",
ctx.server_guid, String.Join(",", join_info.seed_servers));
ReplHandler repl = new ReplHandler(db, ctx);
return repl;
}