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

📄 accordion.h

📁 chord 源码 http://pdos.csail.mit.edu/chord/
💻 H
字号:
#ifndef _ACCORDIONROUTE_H_#define _ACCORDIONROUTE_H_#include <recroute_prot.h>#include <accordion_prot.h>#include "chord_impl.h"#include "route_recchord.h"//jy: this is all hard coded now#define BYTES_PER_ID 36#define BYTES_PER_LOOKUP 76#define BYTES_PER_LOOKUPCOMPLETE 12class accordion_table;class accordion;class route_accordion : public route_recchord { public:  route_accordion (ptr<vnode> vi, chordID xi) : route_recchord (vi,xi) {arouteid_ = routeid_;};  route_accordion (ptr<vnode> vi, chordID xi,		  rpc_program uc_prog,		  int uc_procno,		  ptr<void> uc_args) : route_recchord (vi, xi, uc_prog, uc_procno, uc_args) {arouteid_ = routeid_;};  ~route_accordion() {};  u_long arouteid_;  ihash_entry<route_accordion> ahlink_;  void send (ptr<chordID> guess) { assert(0); }  void first_hop (cbhop_t cb, ptr<chordID> guess);};class sentinfo {  public:  sentinfo(unsigned id, time_t now, unsigned o) : routeid_(id), sent_t(now), outstanding(o) {}  unsigned routeid_;  time_t sent_t;  int outstanding;  vec<ptr<location> > tried;  ihash_entry<sentinfo> hlink_;};class accordion : public vnode_impl {  protected:    accordion (ref<chord> _chordnode,		    ref<rpc_manager> _rpcm,		    ref<location> _l);    ~accordion () {}    ptr<accordion_table> fingers_;  private:    time_t starttime;    void init ();    void dofillgap (user_args *sbp, accordion_fillgap_arg *ra, ptr<location> src);    void dogetfingers_ext (user_args *sbp);    void docomplete (user_args *sbp, recroute_complete_arg *ra, ptr<location> src);    void doaccroute_sendcomplete (recroute_route_arg *ra,	                          const vec<ptr<location> > cs);    void accroute_sent_complete_cb (ptr<location> l, chordID x, clnt_stat status);    bool accroute_sent_complete_timeout_cb (ptr<location> l, chordID x, chord_node n, int rexmit_number);    void doaccroute_sendroute (recroute_route_arg *ra, ptr<location> p, bool redun=false, unsigned para=1);    void fill_gap_cb (ptr<location> l, 	              cbchordIDlist_t cb,	              chord_nodelistres *res, 		      clnt_stat err);    bool fill_gap_timeout_cb (ptr<location> l,	              chord_node n,		      int rexmit_number);    void accroute_hop_cb (long *seqp, ptr<recroute_route_arg> ra, 	                  ptr<location> p,			  chord_nodelistres *res,			  clnt_stat status);    bool accroute_hop_timeout_cb (long *seqp, u_int64_t t, ptr<recroute_route_arg> ra,				  ptr<location> p,				  chord_node n,				  int rexmit_number);    void update_bavail();    unsigned get_parallelism ();    void fill_nodelistres (chord_nodelistres *res, vec<ptr<location> > fs);    ihash<u_long, route_accordion, &route_accordion::arouteid_, &route_accordion::ahlink_> routers;    ihash<unsigned, sentinfo, &sentinfo::routeid_, &sentinfo::hlink_> sent;    int budget_;    int burst_;    int stopearly_;    int bavail;    time_t bavail_t;    unsigned lookups_;    unsigned explored_;    unsigned para_;  public:    void stabilize (void);    void doaccroute (user_args *sbp, recroute_route_arg *ra);    static ref<vnode> produce_vnode (ref<chord> _chordnode,				     ref<rpc_manager> _rpcm,				     ref<location> _l);    ptr<route_iterator> produce_iterator (chordID xi);    ptr<route_iterator> produce_iterator (chordID xi,	                                  const rpc_program &uc_prog,					  int uc_procno,					  ptr<void> uc_args);    route_iterator *produce_iterator_ptr (chordID xi);    route_iterator *produce_iterator_ptr (chordID xi,	                                  const rpc_program &uc_prog,					  int uc_procno,					  ptr<void> uc_args);    virtual void dispatch (user_args *a);    void fill_gap (ptr<location> n, ptr<location> end, cbchordIDlist_t cb);    void periodic();    int get_bavail () { update_bavail(); return bavail; }    int get_budget () { return budget_; }    int burst () { return burst_;}    void explored () { explored_++;}    void bytes_sent (unsigned b) { bavail -= b; if ((bavail+burst_) < 0) bavail = -burst_; }    unsigned get_para() { return para_;}    ptr<location> closestpred (const chordID &x, const vec<chordID> &f) { assert (0); return NULL;}};#endif

⌨️ 快捷键说明

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