集群建立的命令 #138
marsevilspirit
started this conversation in
General
集群建立的命令
#138
Replies: 0 comments
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
-
ref: OpenAtomFoundation/pikiwidb#136
建集群需要实现的三条指令
RAFT.NODE ADD [id] [address:port]
# redis 中 join 指令的实现 ret = redisAsyncCommand(ConnGetRedisCtx(conn), handleNodeAddResponse, conn, "RAFT.NODE ADD %d %s:%u", rr->config.id, rr->config.addr.host, rr->config.addr.port);
主要改动
编译问题:
我直接将我目前的提交 rebase 到了潘磊的分支上,但 pikiwidb 可执行文件好像还没有链接 braft 库,需要进一步修改才能编译成功。
引入了四个文件:
指令实现
RAFT.CLUSTER INIT <id>
RAFT.CLUSTER JOIN [addr:port]
比较麻烦的一个指令,需要向 Leader 发送 ADD 请求。
参考现有的主从实现,会在收到指令时,建立一个连接,建立连接前,会将当前 client 指针等信息保存在 PRaft 中,用于稍后主动回复。
当前线程先不回复 client,所以把消息清空。
client->Clear();
连接建立成功后,会走到 g_pikiwidb->OnNewConnection(obj) 这里
最终在 OnConnect() 中调用 PRaft 的接口,向主节点发送 ADD 请求。
而 pikiwidb 收到消息时,会判断当前连接是否属于 Join 指令发起的连接,如果是,则处理对应的回复。并且从 PRaft 中获取之前发送 join 指令的 client,向其发送回复,这里指令流程才完整结束。
Beta Was this translation helpful? Give feedback.
All reactions