Chord代码分析(一)

 

最近在研究Chord算法,需要看看其具体实现,所以就把自己看代码的见解写在这里,一来便于查阅,二来可以得到大家的指正,欢迎讨论

mail:hudaiqian@gmail.com yahoo:hudaiqian@yahoo.com.cn

这是今天完成的第一部分代码的阅读小结,欢迎多指教。

本人所用的代码为包含在SFSNet里的部分,目录为SFSNet/chord,里面包括了chord算法的主要实现。当然,如果要完全看懂代码,尤其是关于里面用到的很多refcountedlist等等,那么必须下载另外一份代码----sfslite2,这里面包括了sfsnet要用到的一些常用函数,具体说明见http://www.okws.org/doku.php?id=sfs:libasync

目前我是从sfsnet里面的一个关于location service daemon,简称为lsd程序,在sfsnetlsd目录下,它初始化Chorddhash层,并接受其他客户端的请求。这个lsd算是chord实际应用的一个完整流程,顺着它的运行路线,我想可以研究好Chord算法的实现。

Lsd程序启动是在lsd.C文件里的main函数,程序的开始进行的是对命令行参数的解析,具体可以看代码,这部分对于我们的研究不是很主要,可以快速略过。最后在快要结束的时候,程序进入了最关键的地方,代码如下:

chordnode = New refcounted<chord> (my_name,

                                 myport,

                                 modes[mode].producer,

                                 vnodes,

                     max_loccache);

这里应该是初始化了一个Chord节点,其中的chord是在chord.h文件中定义的chord类,refcounted应该是类似于智能指针一类的东东,具体实现在refcnt.hchord初始化的参数包括主机名,端口,modes[mode].producer是用的哪种路由算法,这里为chordvnodes为虚拟节点的数量,max_loccache为最大缓存位置(?这里还有待考证)

接下来就是chord类的初始化函数,在chord_client.c里面。

首先也是对于配置情况的解释,包括最大virtual nodechordrpc方式(有tcpudp2种方式)。之后,根据rpc方式,初始化了一个rpc manager。然后分别初始化了一个tcpudp的套结字,之后这句locations = New refcounted<locationtable> (max_cache);应该是一个满重要的部分,他针对每个chord node新建了一个locationtable类的locations变量,初步认为是用于定位的算法,因为关于insert,lookup等都是在该类实现。

最后,是一个for循环,循环的计数是vnode的数量,应该是创建每个chord nodefinger table的项,即vnode。在循环里,首先根据ip和端口生成了hash id。然后,再通过前面locations变量将新建的vnode插入到finger table里面。通过locationtablepin方法将新的vnode加入到pin list里。最后,在新建一个vnode节点,将其加入到vnode hash表里。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值