亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? maintwalk.c

?? 基于DHT的對等協議
?? C
字號:
/* * Walk around the current ring and update any local copies * of their synchronization data. * * Code adapted from tools/walk.C and maint/maint* */#include <db.h>#include <arpc.h>#include <aios.h>#include <comm.h>#include "rpclib.h"#include <merkle.h>#include <merkle_tree_bdb.h>#include <merkle_sync_prot.h>void usage (){  warnx << "Usage: " << progname <<     " [-d maintdir]"    " [-t maxtotaltime]"    " -j <host>:<port>\n";  exit (1);}// {{{ Globalsstatic chordID wellknown_ID = -1;// Sequential is what we believe is the correct sequencing of nodesstatic vec<chord_node> sequential;static const char *localdatapath;static u_int64_t totalbytes = 0;static u_int64_t starttime = 0;static chordID idmax = (chordID (1) << NBIT) - 1;static dhash_ctype ctypes[] = {  DHASH_CONTENTHASH,  DHASH_KEYHASH,  DHASH_NOAUTH};// }}}// {{{ Prototypesstruct sync_info {  chord_node n;  dhash_ctype ctype;  u_int32_t ndiffs;  ptr<merkle_tree> localtree;  ptr<merkle_syncer> msyncer;};void getsucc (const chord_node &n);void getsucc_cb1 (chord_node curr, chord_nodelistextres *res,    clnt_stat err);void getsucc_cb2 (chord_node curr);void sync_with (const chord_node &n, cbv cb);void sync_with_cb1 (u_int64_t start, cbv cb, chord_node n, int fd);void sync_with_cb2 (u_int64_t start, sync_info *si, cbv cb, int err);// }}}// {{{ Misc Utilitystatic str ctype2ext (dhash_ctype c) {  switch (c) {  case DHASH_CONTENTHASH:    return "c";    break;  case DHASH_KEYHASH:    return "k";    break;  case DHASH_NOAUTH:    return "n";    break;  default:    fatal << "bad ctype\n";  }  return "unknown";}voidfail (str msg){  aout << "Total time elapsed: " << (getusec () - starttime)/1000 << "ms\n";  aout << "Total bytes sent:   " << totalbytes << "\n";  if (msg)    fatal << msg;  exit (1);}static voiddoRPCer (ptr<aclnt> c, RPC_delay_args *args){  assert ((args->prog.progno == c->rp.progno) &&          (args->prog.versno == c->rp.versno));  c->call (args->procno, args->in, args->out, args->cb);}void handle_missing (sync_info *si, chordID key, bool missing_local){  si->ndiffs++;  if (missing_local) {    si->localtree->insert (key);  } else {    si->localtree->remove (key);  }}voidtrack_aclnt (aclnt_acct_t a){  totalbytes += a.len;}// }}}// {{{ Main logicvoidgetsucc (const chord_node &n){  chord_nodelistextres *res = New chord_nodelistextres ();  doRPC (n, chord_program_1, CHORDPROC_GETSUCC_EXT, &n.x, res,	 wrap (&getsucc_cb1, n, res));}voidgetsucc_cb1 (chord_node curr, chord_nodelistextres *res, clnt_stat err){  if (err != 0 || res->status != CHORD_OK) {    aout << "failed to get a reading from " << curr << "; skipping.\n";    sequential.pop_front ();    if (sequential.size () == 0) {      fatal << "too many consecutive failures.\n";    }    delete res;    getsucc (sequential[0]);    return;  }    size_t sz = res->resok->nlist.size ();  vec<chord_node> zs;  for (size_t i = 0; i < sz; i++) {    chord_node z = make_chord_node (res->resok->nlist[i].n);    zs.push_back (z);  }  delete res;  // XXX Steal verification code from walk.C?  curr = zs[0];  // ensure we talked to who we think we should be talking to.  assert (curr.x == sequential[0].x);  sequential = zs;  sequential.pop_front ();  sync_with (curr, wrap (&getsucc_cb2, curr));}voidgetsucc_cb2 (chord_node curr){  // wrapped around ring. done.  if (betweenrightincl (curr.x, sequential[0].x, wellknown_ID)) {    aout << "Total time elapsed: " << (getusec () - starttime)/1000 << "ms\n";    aout << "Total bytes sent:   " << totalbytes << "\n";    exit (0);  }    // Out of nodes, done.  if (!sequential.size ())    exit (0);  getsucc (sequential[0]);}voidsync_with (const chord_node &n, cbv cb){  tcpconnect (n.r.hostname, n.r.port-1,      wrap (&sync_with_cb1, getusec (), cb, n));}static int nout (0);voidsync_with_cb1 (u_int64_t start, cbv cb, chord_node n, int fd){  if (fd < 0) {    delaycb (0, cb);    return;  }  ptr<axprt_stream> x = axprt_stream::alloc (fd);  ptr<aclnt> client = aclnt::alloc (x, merklesync_program_1);  client->set_acct_hook (wrap (&track_aclnt));  for (size_t i = 0; i < sizeof (ctypes)/sizeof(ctypes[0]); i++) {    dhash_ctype ctype = ctypes[i];    strbuf succtreepath; succtreepath << localdatapath << "/"       << n.x << "." << ctype2ext (ctype);    sync_info *si = New sync_info ();    si->n = n;    si->ctype = ctype;    si->ndiffs = 0;    si->localtree = New refcounted<merkle_tree_bdb>       (str (succtreepath).cstr (), /* join = */ false, /* ro = */ false );    si->msyncer = New refcounted<merkle_syncer> (	n.vnode_num, ctype,	si->localtree,	wrap (&doRPCer, client),	wrap (&handle_missing, si));    si->msyncer->sync (0, idmax,	wrap (&sync_with_cb2, start, si, cb));    nout++;  }}voidsync_with_cb2 (u_int64_t start, sync_info *si, cbv cb, int err){  nout--;  aout << si->n << " " << ctype2ext (si->ctype)       << " with "       << si->ndiffs << " updates.\n";  if (!nout) {    aout << si->n << " complete in "          << (getusec () - start)/1000 << "ms\n";    delaycb (0, cb);  }  delete si;}// }}}intmain (int argc, char *argv[]){  setprogname (argv[0]);  unsigned int maxtime (0);  str host = "not set";  unsigned short port (0);  localdatapath = "./maintdata/";  int ch;  while ((ch = getopt (argc, argv, "d:j:t:")) != -1) {    switch (ch) {    case 'd':      localdatapath = optarg;      break;    case 'j':       {	char *bs_port = strchr(optarg, ':');	if (!bs_port) usage ();	*bs_port = 0;	bs_port++;	if (inet_addr (optarg) == INADDR_NONE) {	  //yep, this blocks	  struct hostent *h = gethostbyname (optarg);	  if (!h) {	    warn << "Invalid address or hostname: " << optarg << "\n";	    usage ();	  }	  struct in_addr *ptr = (struct in_addr *)h->h_addr;	  host = inet_ntoa (*ptr);	} else	  host = optarg;	port = atoi (bs_port);	break;      }    case 't':      maxtime = atoi (optarg);      break;    }  }  if (host == "not set")    usage ();  {    struct stat sb;    if (stat (localdatapath, &sb) < 0) {      if (errno != ENOENT ||	  (mkdir (localdatapath, 0755) < 0 && errno != EEXIST))	fatal ("%s: %m\n", localdatapath);      if (stat (localdatapath, &sb) < 0)	fatal ("stat (%s): %m\n", localdatapath);      warn << "Created " << localdatapath << " for maintenance state.\n";    }    if (!S_ISDIR (sb.st_mode))      fatal ("%s: not a directory\n", localdatapath);  }  wellknown_ID = make_chordID (host, port, 0);  chord_node wellknown_node;  wellknown_node.x = wellknown_ID;  wellknown_node.r.hostname = host;  wellknown_node.r.port = port;  wellknown_node.vnode_num = 0;  sequential.push_back (wellknown_node);  getsucc (wellknown_node);  starttime = getusec ();  if (maxtime > 0)    delaycb (maxtime, wrap (&fail,	  strbuf ("timed out after %d seconds\n", maxtime)));  sigcb (SIGINT, wrap (&fail, "Received SIGINT\n"));  sigcb (SIGHUP, wrap (&fail, "Received SIGHUP\n"));  sigcb (SIGTERM, wrap (&fail, "Received SIGTERM\n"));  amain ();}// -*-c++-*-// vim: filetype=cpp  foldmethod=marker

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产欧美一区二区精品秋霞影院| 伦理电影国产精品| 热久久免费视频| 亚洲青青青在线视频| 午夜精品福利一区二区三区av| eeuss影院一区二区三区| 欧美在线高清视频| 欧美日韩二区三区| 欧美成人在线直播| 2024国产精品| 91精品国产综合久久久蜜臀粉嫩 | 久久综合久久综合九色| 波波电影院一区二区三区| 午夜精品福利久久久| 亚洲午夜久久久| 亚洲电影第三页| 亚洲第一精品在线| 午夜精品福利一区二区三区av| 亚洲国产成人av| 日本va欧美va精品| 久久 天天综合| 久久福利资源站| 国产乱码一区二区三区| 国产精品一二三区在线| 国产成人欧美日韩在线电影| 国产精品538一区二区在线| 国产高清亚洲一区| 成人午夜av电影| 色域天天综合网| 欧美日韩国产免费一区二区| 欧美日韩高清一区二区| 日韩一区二区在线看| 久久综合五月天婷婷伊人| 国产日韩欧美激情| 亚洲免费电影在线| 日韩精品国产欧美| 久久精品国产久精国产爱| 九一九一国产精品| 成人高清免费观看| 日本高清不卡aⅴ免费网站| 欧美中文字幕一二三区视频| 欧美片在线播放| 久久国产乱子精品免费女| 欧美色图片你懂的| 91精品久久久久久久久99蜜臂| 99久久精品国产观看| 91亚洲精品久久久蜜桃网站 | 伊人性伊人情综合网| av在线一区二区| 中文字幕欧美三区| 91麻豆精品在线观看| 国产精品久久久久久久午夜片| 国产在线播精品第三| 日韩欧美一区二区在线视频| 国产精品久久久久久久久久久免费看 | 成人激情校园春色| 波多野结衣亚洲| 91精品国产91热久久久做人人| 国产美女精品在线| 精品一区二区三区免费播放| 国产69精品一区二区亚洲孕妇| 欧美影视一区在线| 久久久久久久久久久99999| 亚洲精品日日夜夜| 免费欧美日韩国产三级电影| 成人av电影在线观看| 日韩一区二区三免费高清| 中文av一区二区| 婷婷激情综合网| 不卡视频一二三| 日韩精品在线一区二区| 亚洲精品伦理在线| 国产精品白丝jk黑袜喷水| 在线观看视频91| 国产欧美精品区一区二区三区| 亚洲国产美女搞黄色| 国产69精品久久久久777| 欧美日韩电影在线播放| 国产精品久久久久久久久快鸭| 青青草国产成人av片免费| 91麻豆免费观看| 久久精品视频在线看| 视频精品一区二区| 99精品一区二区| 26uuu欧美日本| 亚洲动漫第一页| 波多野结衣欧美| 久久一区二区视频| 日韩专区一卡二卡| 色噜噜偷拍精品综合在线| 久久国产尿小便嘘嘘尿| 日日嗨av一区二区三区四区| 国产电影一区二区三区| 亚洲国产精品视频| 色悠久久久久综合欧美99| 亚洲免费观看高清完整版在线观看熊 | 99视频精品在线| 亚洲成人免费视频| 制服丝袜中文字幕亚洲| 久久精品国产一区二区| 国产精品国产三级国产aⅴ原创| 欧洲精品一区二区| 九一九一国产精品| 亚洲精品久久嫩草网站秘色| 欧美一级淫片007| 国产凹凸在线观看一区二区| 亚洲视频一区在线| 日韩免费视频一区二区| 波波电影院一区二区三区| 亚洲国产美国国产综合一区二区| 日韩午夜激情电影| 色综合久久天天| 日本中文字幕不卡| ...xxx性欧美| 欧美大黄免费观看| 91啪在线观看| 激情图片小说一区| 丝袜亚洲另类丝袜在线| 中文字幕免费一区| 亚洲美女区一区| 国产亚洲精品资源在线26u| 91精品国产黑色紧身裤美女| 色久综合一二码| 91免费看`日韩一区二区| 狠狠色丁香婷综合久久| 婷婷综合在线观看| 亚洲午夜久久久久久久久久久| 久久精品一二三| 久久夜色精品国产噜噜av| 欧美高清精品3d| 精品视频在线免费看| 99久久精品免费| jizz一区二区| 91在线观看美女| 91麻豆精东视频| 色天使色偷偷av一区二区| 99在线精品观看| 97se亚洲国产综合自在线观| 99视频精品全部免费在线| 91伊人久久大香线蕉| 欧美丝袜丝nylons| 欧美午夜精品理论片a级按摩| 成人黄色av网站在线| av男人天堂一区| 在线观看欧美黄色| 午夜av一区二区| 一区二区三区日韩精品视频| 亚洲欧洲99久久| 亚洲成人一区在线| 精品一区二区三区不卡 | 日本在线观看不卡视频| 国产精品一区二区在线播放| 94-欧美-setu| 欧美一区二区三区播放老司机| 日韩一区二区三区电影在线观看| 精品国产乱码久久久久久浪潮| 欧美国产视频在线| 亚洲大片免费看| 粉嫩13p一区二区三区| 欧美日韩国产不卡| 中文字幕成人网| 午夜精品在线视频一区| 韩国女主播一区二区三区| 国产在线精品一区二区夜色| 丝袜亚洲另类丝袜在线| 国产乱子伦一区二区三区国色天香| 日本欧美在线看| 国产精品99久久久久久久vr| 99精品偷自拍| 91精品国产色综合久久| 精品久久久久av影院| 亚洲欧美日韩系列| 亚洲精品一卡二卡| 久久黄色级2电影| 丁香一区二区三区| 欧美一区二区国产| 国产精品欧美精品| 蜜芽一区二区三区| 国产精品一区二区在线播放| 欧美系列日韩一区| 国产亚洲欧美一区在线观看| 日韩电影在线免费观看| 国产91对白在线观看九色| 欧美一区二区三区思思人| 亚洲色图清纯唯美| 国产乱子伦视频一区二区三区 | 高清在线观看日韩| 欧美一级片在线看| 亚洲自拍另类综合| 成人国产视频在线观看| 久久久国产综合精品女国产盗摄| 亚洲综合一区在线| 一本到不卡精品视频在线观看| 欧美日韩dvd在线观看| 一区二区三区中文在线| 91色九色蝌蚪| 亚洲第一搞黄网站| 成人黄页在线观看| 国产精品国产三级国产aⅴ中文| 国产精品一色哟哟哟|