zxid (ZooKeeper Transaction Id,每次請求對應一個唯一的zxid,如果zxid a < zxid b ,則可以保證a一定發生在b之前) zookeeper採用了遞增的事務id號(zxid)來標識事務。所有的提議(proposal)都在被提出的時候加上了zxid。 實現中z ...
zxid (ZooKeeper Transaction Id,每次請求對應一個唯一的zxid,如果zxid a < zxid b ,則可以保證a一定發生在b之前)
zookeeper採用了遞增的事務id號(zxid)來標識事務。所有的提議(proposal)都在被提出的時候加上了zxid。
實現中zxid是一個64位的數字,它高32位是epoch用來標識leader關係是否改變,每次一個leader被選出來,它都會有一個新的epoch,標識當前屬於那個leader的統治時期。低32位用於遞增計數。
ZXID高32位代表epoch(表示紀元或時代),低32位表示counter(表示遞增計數)
ZxidUtils.java:(ZXID工具集)
getEpochFromZxid獲取epoch,getCounterFromZxid獲取遞增計數,makeZxid通過epoch和counter進行移位組合,zxidToString把zxid轉換成16進位字元串。
ConfigUtils:(配置工具集):
讀取配置文件獲取版本號,除此之外讀取"server."首碼參數,併進行QuorumPeer.QuorumServer(-1, value),最終列印版本號以及相對應客戶端的IP和PORT。
KerberosUtil:(Kerberos是一種網路驗證協議,安全網路認證系統,kerberos講解可參考http://www.360doc.com/content/15/0803/10/13047933_489182493.shtml)
通過反射機制的class.forName\getMethod\getDeclaredMethod\invoke調用相關class文件中的getDefaultRealm函數(獲取預設域),
相關的class文件依賴於讀取系統屬性java.verdor載入com.ibm.security.krb5.internal.Config或者是sun.security.krb5.Config。
OSMXBean.java:(操作系統的MXBean工具,該類是com.sun.management.UnixOperatingSystemMXBean的包裝類,用於決定使用sun api或者廠商自定義的實現類如IBM),
對外介面提供getOpenFileDescriptorCount(獲取當前文件打開數)和getMaxFileDescriptorCount(獲取最大文件描述符),
判斷如果是UNIX系統則使用反射機制調用com.sun.management.UnixOperatingSystemMXBean獲取類當中對應的實現函數,
如果是廠商IBM定製的則調用JAVA包底下的Runtime.getRuntime().exec執行shell命令如"ls /proc/"+ pidhost[0] +"/fdinfo | wc -l"
或者"ulimit -n",其中RuntimeMXBean rtmbean = ManagementFactory.getRuntimeMXBean(),用於獲取運行期的MXBean(可瞭解MBean和MXBean之間的區別,
二者都是JMX中一種可以被管理的資源)。
(未完待續......)