⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pseudocode

📁 模拟器提供了一个简单易用的平台
💻
字号:
handle cluster refresh () ====>if (I dont think this pkt src is in this cluster) {  ignore it  return}define s = pkt srcupdate s refresh info in the appropriate agent infocase 1: // I am the root  if (s thinks its the root) {    if (s is doing root transfer to me) {      /* then I rule ... I will maintain status quo */      absorb all members from s unknown to me      if (s doing cluster remove)        remove it      (this might cause cluster split etc)      return    }    if (s is doing root transfer to p, where p <> me)      define y = p    else      define y = s    /* Root challenge should always be sent to s, root transfer     * will be sent to y     */    s_max = dist of s from its farthest known member    my_max = dist of me from my farthest known member    /* memberset(x) defined as set of members with known dists */    if (memberset(s) == memberset(mine)) {      if ( (my_max < s_max) ||           ( (my_max == s_max) && (my->id < s->id) ) ) { // i.e. I win        absorb all members unknown to me from s        send root-challenge to s iff y == s (what about to y, for y <> s)        return      }      else { // I lose        send root-transfer to y        return      }    }    else if (memberset(s) is a superset of memberset(mine)) {      send root-transfer to y      return    }    else if (memberset(mine) is a superset of memberset(s)) {        absorb all members unknown to me from s        send root-challenge to s iff y == s        return    }    else { // each has some members in memberset unknown to the other      if (my id < s->id) {        absorb all members unknown to me from s        send root-challenge to s iff y == s        return	/* Root-challenge: send him an immediate cluster refresh */        /* note: if s was doing a root-transfer to someone else, and         *    if p was not in my cluster, I should add p ?         * automatically taken care of, since p in s cluster         */      }      else { /* my id > s->id, and so I lose */        send root-transfer to y        return      }    }  }  else { // s does not think it is the root  }case 2: // I am not the root  if (s thinks it is the root) {    if (I also think s is the root) {      update info of the cluster as suggested by s    }    else (I think someone else is the root) {      // do nothing, just stay put    }  }end handle-cluster-refresh <=======cluster-refresh-timeout () ========>purge all members that are deadif (i am root and cluster size too small/too large) {  do appropriate repair  if (delay cluster repair flag set) {    clear it  }  return}  if (root is dead) {  select a new root,r, based on local dist info  if (r == me) {    if (cluster size is too small/too lare) {      set a delay cluster repair flag      /* cluster will be repaired in next timeout */    }    send appropriate new cluster refresh to all members  }end cluster-refresh-timeout <========/* Note, in regular cluster-refresh, the leader will repair * the cluster only if its too large/too small, if the delay * cluster repair flag is not set. * Alternative: Cluster repair done only at cluster repair * timeouts */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -