45fan.com - 路饭网

搜索: 您的位置主页 > 电脑频道 > 编程代码 > 阅读资讯:分析Chord代码介绍

分析Chord代码介绍

2016-08-31 21:35:23 来源:www.45fan.com 【

分析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表里。

 

本文地址:http://www.45fan.com/bcdm/70473.html
Tags: 代码 研究 Chord
编辑:路饭网
推广内容
推荐阅读
热门推荐
推荐文章
关于我们 | 联系我们 | 友情链接 | 网站地图 | Sitemap | App | 返回顶部