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

📄 merkle_server.c

📁 chord 源码 http://pdos.csail.mit.edu/chord/
💻 C
字号:
#include <chord.h>#include "merkle_hash.h"#include "merkle_node.h"#include "merkle_tree.h"#include "merkle_syncer.h"#include "merkle_sync_prot.h"#include "merkle_server.h"#include <location.h>#include <locationtable.h>#include <comm.h>// ---------------------------------------------------------------------------// merkle_servermerkle_server::merkle_server (merkle_tree *ltree) : ltree (ltree){}voidmerkle_server::dispatch (user_args *sbp){  if (!sbp)    return;  switch (sbp->procno) {  case MERKLESYNC_SENDNODE:    // request a node of the merkle tree    {      sendnode_arg *arg = sbp->Xtmpl getarg<sendnode_arg> ();      merkle_rpc_node *rnode = &arg->node;      merkle_node *lnode;      u_int lnode_depth;      merkle_hash lnode_prefix;      lnode = ltree->lookup (&lnode_depth, rnode->depth, rnode->prefix);      if (lnode_depth != rnode->depth) {	warn << "local depth ( " << lnode_depth 	     << ") is not equal to remote depth (" << rnode->depth << ")\n";	warn << "prefix is " << rnode->prefix << "\n";	//a remote node will only ask us for children if we previously returned	// an index node at depth - 1. If local depth < remote depth, that	// implies that we don't have an index node at depth - 1: assert!	assert (lnode_depth == rnode->depth);      }      lnode_prefix = rnode->prefix;      // XXX isn't this a NOP, given the previous assertion about equal depths       lnode_prefix.clear_suffix (lnode_depth);      sendnode_res res (MERKLE_OK);      format_rpcnode (ltree, lnode_depth, lnode_prefix, 		      lnode, &res.resok->node);      // and reply      sbp->reply (&res);      break;    }       case MERKLESYNC_GETKEYS:    {      getkeys_arg *arg = sbp->Xtmpl getarg<getkeys_arg> ();      //get the first 65 keys in the range. We'll return 64, but we get      // 65 so we can tell if we got them all      vec<chordID> keys = ltree->get_keyrange (arg->rngmin, arg->rngmax, 65);            warn << "get keys (" << arg->rngmin << ", " << arg->rngmax << " returning " << keys.size () << " keys\n";      bool more = (keys.size () == 65); // there is at least one more key to get            getkeys_res res (MERKLE_OK);      res.resok->morekeys = more;      //trim off the extra key if necessary      while (keys.size () > 64) keys.pop_back ();      res.resok->keys = keys;      sbp->reply (&res);      break;    }  default:    fatal << "unknown proc in merkle " << sbp->procno << "\n";    sbp->reject (PROC_UNAVAIL);    break;  }}

⌨️ 快捷键说明

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