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

📄 dhash_impl.h

📁 chord 源码 http://pdos.csail.mit.edu/chord/
💻 H
字号:
#ifndef __DHASH_IMPL_H__#define __DHASH_IMPL_H__#include "dhash.h"#include <qhash.h>#include "adb_prot.h"// Forward declarations.class RPC_delay_args;class dhashcli;struct dbrec;class dhblock_srv;class location;struct hashID;// Callback typedefstypedef callback<void,bool,dhash_stat>::ptr cbstore;// Helper structs/classesstruct store_chunk {  store_chunk *next;  unsigned int start;  unsigned int end;  store_chunk (unsigned int s, unsigned int e, store_chunk *n) : next(n), start(s), end(e) {};  ~store_chunk () {};};struct store_state {  chordID key;  unsigned int size;  store_chunk *have;  char *buf;  ihash_entry <store_state> link;     store_state (chordID k, unsigned int z) : key(k),     size(z), have(0), buf(New char[z]) { };  ~store_state ()  {     delete[] buf;     store_chunk *cnext;    for (store_chunk *c=have; c; c=cnext) {      cnext = c->next;      delete c;    }  };  bool gap ();  bool addchunk (unsigned int start, unsigned int end, void *base);  bool iscomplete ();};struct fcb_state {  long nonce;  cbfetch cb;  ihash_entry <fcb_state> link;  fcb_state (cbfetch cb) :  cb (cb) { while ((nonce = random ()) == 0);};};class dhash_impl : public dhash, public virtual refcount {    qhash<dhash_ctype, ref<dhblock_srv> > blocksrv;    ihash<long, fcb_state, &fcb_state::nonce, &fcb_state::link> fetch_cbs;  ptr<vnode> host_node;  ptr<dhashcli> cli;  ihash<chordID, store_state, &store_state::key,     &store_state::link, hashID> pst;    void route_upcall (int procno, void *args, cbupcalldone_t cb);  void doRPC (ptr<location> n, const rpc_program &prog, int procno,	      ptr<void> in, void *out, aclnt_cb cb, 	      cbtmo_t cb_tmo = NULL);  void doRPC (const chord_node &n, const rpc_program &prog, int procno,	      ptr<void> in, void *out, aclnt_cb cb,	      cbtmo_t cb_tmo = NULL);  void doRPC (const chord_node_wire &n, const rpc_program &prog, int procno,	      ptr<void> in, void *out, aclnt_cb cb,	      cbtmo_t cb_tmo = NULL);  void doRPC_reply (svccb *sbp, void *res, 		    const rpc_program &prog, int procno);  void dispatch (user_args *a);  void storesvc_cb (user_args *sbp, s_dhash_insertarg *arg, 		    bool already_present, dhash_stat err);  dhash_fetchiter_res * block_to_res (dhash_stat err, s_dhash_fetch_arg *arg,				      str val);  void fetchiter_gotdata_cb (cbupcalldone_t cb, s_dhash_fetch_arg *farg,			     str val, dhash_stat stat);  void fetchiter_sbp_gotdata_cb (user_args *sbp, s_dhash_fetch_arg *farg,				 str val, dhash_stat stat);  void sent_block_cb (dhash_stat *s, clnt_stat err);  void fetch (blockID id, cbvalue cb);  void fetch_after_db (blockID id, cbvalue cb,		       adb_status stat, chordID k, str data);  void store (s_dhash_insertarg *arg, cbstore cb);    bool key_present (const blockID &n);  void dofetchrec (user_args *sbp, dhash_fetchrec_arg *arg);  void dofetchrec_nexthop (user_args *sbp, dhash_fetchrec_arg *arg,			   ptr<location> p);  void dofetchrec_nexthop_cb (user_args *sbp, dhash_fetchrec_arg *arg,			      ptr<dhash_fetchrec_res> res,			      timespec t,			      clnt_stat err);  void dofetchrec_local (user_args *sbp, dhash_fetchrec_arg *arg);  void dofetchrec_assembler (user_args *sbp, dhash_fetchrec_arg *arg,			     vec<ptr<location> > succs);  void dofetchrec_assembler_cb (user_args *sbp, dhash_fetchrec_arg *arg,				dhash_stat s, ptr<dhash_block> b, route r);  void merkle_dispatch (user_args *sbp);  void fetchcomplete_done (int nonce, chord_node sender,			   dhash_stat status, bool present);  void srv_ready (ptr<uint> num_to_go);  void start_maint ();  /* statistics */  long bytes_stored;  long keys_stored;  long keys_replicated;  long keys_cached;  long keys_others;  long bytes_served;  long keys_served;  long rpc_answered;  cbv donecb; public:  dhash_impl (ptr<vnode> v, str dbname, cbv donecb);  ~dhash_impl ();  vec<dstat> stats ();  void print_stats ();    void stop ();  void start (bool randomize = false);  long register_fetch_callback (cbfetch cb);  void unregister_fetch_callback (long nonce);};#endif

⌨️ 快捷键说明

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