zookeeper c api 之Stat結構

來源:互聯網
上載者:User

在標頭檔zookeeper.jute.h中,找到Stat這個結構,首先需要明白這個變數的特點:

1 存在大部分的zookeeper c api的參數中

2 作為znode的節點資訊變數傳遞出去,供外部查詢和使用

結構聲明如下:

struct Stat {
    int64_t czxid;
    int64_t mzxid;
    int64_t ctime;
    int64_t mtime;
    int32_t version;
    int32_t cversion;
    int32_t aversion;
    int64_t ephemeralOwner;
    int32_t dataLength;
    int32_t numChildren;
    int64_t pzxid;
};

舉一個節點的例子可以見

[zk: 10.15.107.155:3352(CONNECTED) 111] stat /c/hfx/sw1
cZxid = 0x2000007df
ctime = Thu Mar 14 11:08:28 CST 2013
mZxid = 0x200000a87
mtime = Thu Mar 14 15:00:34 CST 2013
pZxid = 0x2000007df
cversion = 0
dataVersion = 608
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 6
numChildren = 0

要地說明cZxid表示建立該節點時候的zxid,mZxid表示當前的,zxid是用來為選舉leader服務的,具體可以閱讀zookeeper的原理。

我通常會用到ctime和mtime,前者表示建立的時間,後者表示最近一次更新的時間。要注意的是ctime就定死了建立的那一刻,而mtime會在你調用更改節點函數的時候重新設定;但是exists和get是不會引起其更新的。這個特點可以給我們在業務上很靈活的發揮作用——比如我們想作一些到期判斷等就可以運用此參數。但是需要注意的是,我們stat命令出來的是時間字串,而Stat結構裡面是時間戳記,兩者需要做一個轉換,轉換的方法可以參考如下:  

time_t tmtime = stat.mtime/1000;struct tm * last = localtime(&tmtime);char tmtimes[16];sprintf(tmtimes, "%4d%02d%02d%02d%02d%02d", last->tm_year+1900, last->tm_mon+1, last->tm_mday, last->tm_hour, last->tm_min, last->tm_sec);int64_t lasttime = (int64_t)strtoll(tmtimes, NULL, 10);

 當然你可以可以參考zookeeper源碼裡的東西:

void dumpStat(const struct Stat *stat) {    char tctimes[40];    char tmtimes[40];    time_t tctime;    time_t tmtime;    if (!stat) {        fprintf(stderr,"null\n");        return;    }       tctime = stat->ctime/1000;    tmtime = stat->mtime/1000;    fprintf(stderr, "\tctime = %s\tczxid=%llx\n"    "\tmtime=%s\tmzxid=%llx\n"    "\tversion=%x\taversion=%x\n"    "\tephemeralOwner = %llx\n",    ctime_r(&tctime, tctimes), _LL_CAST_ stat->czxid, ctime_r(&tmtime, tmtimes),    _LL_CAST_ stat->mzxid,    (unsigned int)stat->version, (unsigned int)stat->aversion,    _LL_CAST_ stat->ephemeralOwner);}

 其他幾個變數一般供查詢使用,比如你想瞭解有幾個子節點,就查看numChildren參數。

根據自己的業務需求,適當地使用他們。

在zookeeper的api中,大部分都有兩套介面,一個是不需要傳Stat stat參數的,一個是需要傳入stat的;選擇哪一個就在於你是否想擷取znode的狀態。

一般而言,我們主要想關心的是znode的版本、時間戳記等。

特別要注意的是——結構體變數中的類型和命令出來的資訊的類型之間的轉換使用。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.