前面我们分析了Codis Proxy的初始化:Codis Proxy初始化篇,今天分析其它部件的初始化,包括Redis Group及Slot的初始化。
一、Redis Group初始化
Group的功能大概有:添加Group、往Group中添加Redis Server,先看添加Group。
看下在Fe中添加Group的流程:
r.Put("/create/:xauth/:gid", api.CreateGroup)
添加Group的请求由CreateGroup函数处理,后者再调用s.topom.CreateGroup:
func (s *apiServer) CreateGroup(params martini.Params) (int, string) { //省略其它代码 //创建Group if err := s.topom.CreateGroup(gid); err != nil { return rpc.ApiResponseError(err) } else { return rpc.ApiResponseJson("OK") }}
再看topom.CreateGroup:
func (s *Topom) CreateGroup(gid int) error { //省略无关代码 return s.storeCreateGroup(g)}
再跟进去发现在Zk上保存的路径为:
其中0001为GroupId经过补0处理了。
二、Group添加Redis Server
处理函数为api.GroupAddServer:
r.Put("/add/:xauth/:gid/:addr/:datacenter", api.GroupAddServer)
然后会调用Topom的GroupAddServer
//先检测是否存在 for _, g := range ctx.group { f