之前的namenode啟動原始碼是直接編寫**完成,在main方法中呼叫main方法,此處由於要使用rpc,所以使用minicluster即行測試.
把test中的testnamenoderpcservermethods類修改一下(該類的具體位置參看前章),去掉單元測試的註解,直接使用main方法進行測試.主體**如下:
此方法需要和namenode進行rpc,從之前的nnrpc也可以看出.其呼叫的方法樹為:
可以看到,是呼叫了fsdirmkdirop的mkdirs方法,其呼叫樹為:
核心方法是createparentdirectories()和createsingledirectory(),而前者也是迴圈呼叫後者,所以最核心方法是createsingledirectory(),該方法簽名為:
其中fsdirectory是目錄樹,inodesinpath是在路徑上的節點,localname是節點名,permissionstatus是目錄許可權,從引數可以看出所謂建立節點就是向目錄樹新增節點並記錄而已.其呼叫的方法樹為:
可以看到,果然是首先建立了乙個inodediretory,再執行addlastnode()方法,加入到當前的目錄樹中.
這裡只是借助namenode建立了乙個目錄,並沒有寫入資料,所以不需要datanode的參與.可見,namenode只是在jvm程序中維護了乙個目錄樹,並定時持久化到硬碟上而已,具體的資料更新則與datanode有關.
棧的基礎操作原始碼
棧的講解內容可在b站搜尋 源味cheese stack.cpp 此檔案包含 main 函式。程式執行將在此處開始並結束。include const int max size 100 using namespace std typedef struct sqstack sqstack void ini...
STL原始碼 RB Tree insert操作
看stl原始碼剖析時,真正的插入函式 insert base ptr x,base ptr y,const value v 時,發現引數x幾乎沒什麼用,查了一些資料,發現x是在呼叫另乙個insert過載函式時發揮作用的,於是整理了一下insert函式。stl關聯容器map multimp,set m...
操作rpm原始碼包
命令配置 rpm ivh filename rpm i example.rpm 安裝 example.rpm 包 rpm iv example.rpm 安裝 example.rpm 包並在安裝過程中顯示正在安裝的檔案資訊 rpm ivh example.rpm 安裝 example.rpm 包並在安...