锘??xml version="1.0" encoding="utf-8" standalone="yes"?>
鍦?/span>Startup.cc璋冪敤rebuild鍑芥暟
錛?錛?span style="font-size: 7pt; line-height: normal; font-family: 'Times New Roman';"> 濡傛灉涔嬪墠宸茬粡鏈変簡checkpoint錛屼粠checkpoint閲岄噸寤哄唴瀛樻爲錛屽惁鍒欐柊寤轟竴媯靛唴瀛樻爲
錛?錛?span style="font-size: 7pt; line-height: normal; font-family: 'Times New Roman';"> 鍦ㄥ唴瀛樹腑replay璇?/span>checkpoint涔嬪悗鐨勬墍鏈?/span>operation log
MetaServer榪愯鏃跺啓鍏ユ柊鐨?/span>checkpoint錛?br />
logcompactor_main.cc鐨?/span>main鍑芥暟璋冪敤錛屽簲璇ユ槸浠ヨ皟鐢ㄥ彟涓涓繘紼嬬殑鏂瑰紡鏉ユ墽琛岋紝鐚滄兂鏄?/span>Metaserver榪涚▼浼氬畾鏃惰皟鐢ㄨ榪涚▼
錛?錛?span style="font-size: 7pt; line-height: normal; font-family: 'Times New Roman';"> 鏍規嵁鏃х殑checkpoint鍦ㄥ唴瀛樹腑鐢熸垚鐘舵?/span>
錛?錛?span style="font-size: 7pt; line-height: normal; font-family: 'Times New Roman';"> 鍦ㄥ唴瀛樹腑replay涔嬪悗鐨?/span>op log
錛?錛?span style="font-size: 7pt; line-height: normal; font-family: 'Times New Roman';"> 灝嗘鏃剁殑鍐呭瓨鐘舵佸啓鍏ユ柊鐨?/span>checkpoint
MetaServer榪愯鏃跺啓鍏ユ柊鐨?/span>log錛?/span>
鐢?/span>logger.cc鏉ュ啓鍏ユ柊log錛岀湅浜嗕唬鐮佸簲璇ユ槸姣忔淇敼浜嗗厓淇℃伅鐨勬搷浣滐紝閮戒細灝嗚繖鏉?/span>op log鍐欏叆紓佺洏錛岃櫧鐒舵ц兘涓嶉珮錛屼絾鏄瘮杈冨彲闈狅紙涔嬪墠涔熻嚜宸卞啓榪囨棩蹇楀簱錛屼嬌鐢ㄧ殑鏄袱涓?/span>buffer浜ゆ崲鍐欏叆錛岃繖鏍鋒瘮杈冮珮鏁堜竴浜涳級
鍏充簬榪欎簺鏍戠殑瀹氫箟錛屾渶濂借繕鏄弬鑰冪畻娉曞璁虹瓑緇忓吀涔︼紝緗戣礬涓婄殑淇℃伅鏈変簺涓嶆槸寰堝噯紜紝涓轟簡鏂逛究澶у榪樻槸璐翠竴涓摼鎺ワ細
http://www.cnblogs.com/oldhorse/archive/2009/11/16/1604009.html
榪欐槸鎴戜釜浜虹殑鐞嗚В錛?/span>
铏界劧B鏍戝彲浠ュ湪闈炲彾瀛愯妭鐐瑰懡涓紝浼氱緝鐭竴浜涘鉤鍧囨煡鎵鵑暱搴︼紝浣嗘槸B+鏍戝湪榪欑搴旂敤涓涓紭鍔垮氨鏄瘡涓妭鐐歸兘鏈夋寚鍚?/span>next鑺傜偣鐨勬寚閽堬紝瀵逛簬鑼冨洿鏌ヨ鎴栬呴亶鍘嗘搷浣滃緢閫傚悎銆傚浜庢枃浠剁郴緇熺殑涓涓?/span>ls鏌愪釜瀛愮洰褰曠殑闇姹傦紝鐢?/span>B+鏍戝彲浠ヨ緝楂樻晥鐨勮В鍐熾?/span>
MetaNode錛?/span>base class for both internal and leaf nodes
Meta錛?/span>base class for data objects (leaf nodes)
Node錛?/span>an internal node in the KFS search tree
MetaChunkInfo錛?/span>chunk information for a given file offset
MetaDentry 錛?/span>Directory entry, mapping a file name to a file id
MetaFattr錛?/span>File or directory attributes
錛?/span>1錛?/span>Meta綾繪槸瀛愯妭鐐圭殑鐖剁被錛屽叾鏈涓昏鐨勬垚鍛樺彉閲忔槸fid
鏈変笁涓彾瀛愯妭鐐癸細MetaChunkInfo錛?/span>MetaDentry錛?/span>MetaFattr
錛?/span>2錛?/span>MetaDentry錛?/span>瀹炵幇浠庢枃浠跺悕鍒?/span>fid鐨勬槧灝勶紝瀵逛簬姣忎釜鏂囦歡錛堢洰褰曪級閮芥嫢鏈?/span>1涓?/span>MetaDentry
鎴愬憳鍙橀噺鍖呮嫭錛?/span>
dir錛氭枃浠剁埗鐩綍鐨?/span>fid
name錛?/span>dentry鐨勫悕縐幫紝瀹為檯灝辨槸鏂囦歡鍚?br />
錛?/span>3錛?/span>MetaFattr錛?/span>瀹炵幇浠?/span>fid鍒版枃浠跺睘鎬х殑鏄犲皠錛屽浜庢瘡涓枃浠訛紙鐩綍錛夐兘鎷ユ湁涓涓?/span>MetaFattr銆?br />
鎴愬憳鍙橀噺鍖呮嫭錛?/span>
Type錛氭枃浠惰繕鏄洰褰?/span>
numReplicas錛氭枃浠舵湁鍑犱喚鍓湰
mtime錛氫慨鏀規椂闂?/span>
ctime錛氬睘鎬т慨鏀規椂闂?/span>
crtime錛氭枃浠跺垱寤烘椂闂?/span>
chunkcount錛氳繛緇殑chunk鏁扮洰
filesize錛氭枃浠跺ぇ灝?/span>
nextChunkOffset錛氭渶鍚庝竴涓?/span>chunk鍦ㄦ枃浠剁殑鎵澶勭殑offset
mode_t mode錛氭枃浠跺睘鎬э紙rwx浣嶏級
key錛氱敱KFS_FATTR錛?/span>fid鏉ユ瀯鎴愶紝鍙互閫氳繃fid鐩存帴鎵懼埌淇濆瓨鏂囦歡灞炴х殑鑺傜偣銆?br />
錛?/span>4錛?/span>MetaChunkInfo錛?/span>鏍囧織鏌愪釜鏂囦歡瀵瑰簲鐨?/span>chunk淇℃伅錛屽鏋滀竴涓枃浠跺寘鍚涓?/span>chunk錛岄偅涔堥渶瑕佹湁澶氫釜MetaChunkInfo銆?br />
鎴愬憳鍙橀噺鍖呮嫭錛?/span>
offset錛?/span>chunk鍦ㄦ枃浠朵腑鐨勫亸縐婚噺錛屽洜涓轟竴涓枃浠跺彲鑳界敱澶氫釜chunk緇勬垚
chunkId錛?/span>chunk鐨?/span>id鍙?/span>
chunkVersion錛?/span>chunk鐨?/span>version鍊?br />
錛?/span>5錛?/span>Node錛?/span>瀹炵幇鐨勬槸B+鏍戠殑鍐呴儴鑺傜偣錛岃繖縐嶈妭鐐逛粎浠呬綔涓虹儲寮曠敤閫旓紝瀛樺偍瀹為檯鍏冩暟鎹俊鎭殑鑺傜偣浣嶄簬鏈搴曢儴鐨勫彾瀛愯妭鐐廣?br />
鎴愬憳鍙橀噺鍖呮嫭錛?/span>
NKEY = 32錛氭瘡涓妭鐐規渶澶氭嫢鏈夌殑鍏抽敭瀛楁暟鐩紝瀹為檯涓婁篃灝辨槸鏈澶氭嫢鏈夌殑瀛愯妭鐐規暟鐩紝濡傛灉澶氫綑榪欎釜鍊艱妭鐐硅繘琛屽垎瑁?/span>
NSPLIT = NKEY / 2錛氬垎瑁備箣鍚庢瘡涓妭鐐圭殑鍏抽敭瀛楁暟鐩?/span>
NFEWEST = NKEY - NSPLIT錛氭瘡涓妭鐐規渶灝戞嫢鏈夌殑鍏抽敭瀛楁暟鐩紝濡傛灉灝戜簬榪欎釜鍊間袱涓妭鐐硅繘琛屽悎騫?/span>
count錛氳妭鐐瑰疄闄呮嫢鏈夌殑鍏抽敭瀛楁暟鐩?/span>
Key childKey[NKEY]錛氳妭鐐瑰瓨鍌ㄧ殑鍏抽敭瀛楀垪琛?/span>
MetaNode *childNode[NKEY]錛氳妭鐐規寚鍚戝瓙鑺傜偣鐨勬寚閽堝垪琛?/span>
Node *next錛氭寚鍚戜笅涓涓悓綰ц妭鐐圭殑鎸囬拡
瀹為檯涓婃瘡涓唴閮ㄨ妭鐐圭殑闃舵暟涓?/span>32錛屽彲浠ユ湁32涓瓙鑺傜偣錛岃屾瘡涓彾瀛愯妭鐐瑰彧淇濆瓨涓涓?/span>key鍊箋?/span>
鍙互鎯寵薄錛屽繀瀹氭槸灝嗗悓涓綾葷殑鑺傜偣鑱氶泦鍦ㄤ竴璧楓傚洜姝ゅ浜庢帓搴忓嚱鏁板氨鏄厛姣旇緝鑺傜偣綾誨瀷錛岀劧鍚庡啀瀵硅妭鐐瑰唴閮ㄧ殑鎴愬憳鍙橀噺榪涜姣旇緝銆?/span>MetaDentry鏄牴鎹?/span>dir錛堢埗鐩綍鐨?/span>id錛夛紝MetaFattr鏄牴鎹?/span>fid錛?/span>MetaChunkInfo鏄牴鎹?/span>id鍜?/span>chunkId鏉ユ帓搴忋?/span>
鐪嬩笂闈㈢殑涓夌被瀛愯妭鐐癸紝鎴戜滑鍙互鍙戠幇chunk鐨勪綅緗俊鎭茍娌℃湁淇濆瓨鍦˙+鏍戦噷錛屽畠鏄崟鐙繚瀛樺湪涓涓狹ap鏁版嵁緇撴瀯閲岀殑錛屼篃涓嶄細鍦╩eta server閲岃繘琛屾寔涔呭寲錛岃屾槸姣忔chunk鍚姩鏃跺悜meta server鏉ユ姤鍛娿備箣鎵浠ヤ笉鍋氭寔涔呭寲錛屽彲浠ヨ繖鏍鋒潵鐞嗚В錛?/span>
鍙湁Chunk鏈嶅姟鍣ㄦ墠鑳芥渶緇堢‘瀹氫竴涓狢hunk鏄惁鍦ㄥ畠鐨勭‖鐩樹笂銆侰hunk鏈嶅姟鍣ㄧ殑閿欒鍙兘浼氬鑷碈hunk鑷姩娑堝け(姣斿錛岀‖鐩樻崯鍧忎簡鎴栬呮棤娉曡闂簡)錛屼害鎴栬呮搷浣滀漢鍛樺彲鑳戒細閲嶅懡鍚嶄竴涓狢hunk鏈嶅姟鍣紝榪樻槸鐢眂hunk server鏉ユ姤鍛婃瘮杈冮潬璋便?/span>