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

📄 test_locationtable.c

📁 chord 源码 http://pdos.csail.mit.edu/chord/
💻 C
字号:
#include "id_utils.h"#include "chord.h"#include <chord_types.h>#include "configurator.h"#include "locationtable.h"#include "location.h"void printtable (ptr<locationtable> locs, str header, str prefix){  if (header.len ())    warnx << header << "\n";    ptr<location> l = locs->first_loc ();  while (l) {    warnx << prefix << l->id () << " " << l->alive () << "\n";    l = locs->next_loc (l->id ());  }}intmain (int argc, char *argv[]){  ptr<locationtable> locs = New refcounted<locationtable> (10);  Configurator::only ().set_int ("chord.max_vnodes", 1024);    chord_node n;  ptr<location> l;  n.r.hostname = "192.168.0.1";  n.r.port = 11977;  n.vnode_num = 0;  n.x = make_chordID (n.r.hostname, n.r.port, n.vnode_num);  n.coords.setsize (NCOORD);  warnx << "base insert... ";  l = locs->insert (n);  assert (l);  assert (locs->size () == 1);  assert (locs->usablenodes() == 1);  assert (locs->cached (l->id ()));  assert (!locs->pinned (l->id ()));  warnx << "ok\n";  warnx << "setting dead... ";  l->set_alive (false);  assert (locs->usablenodes () == 0);  warnx << "ok\n";  warnx << "flushing... ";  locs->flush ();  assert (locs->size () == 0);  warnx << "ok\n";  warnx << "reinsert... ";  locs->insert (l);  assert (locs->size () == 1);  assert (locs->usablenodes () == 0);  assert (locs->cached (l->id ()));  assert (locs->lookup (l->id ()) == l);  warnx << "ok\n";  warnx << "back to life... ";  l->set_alive (true);  assert (locs->usablenodes () == 1);  warnx << "pinning sole node... ";  locs->pin (n.x, 0);   warnx << "ok\n";  warnx << "verifying pinned... ";  assert (locs->pinned (l->id ()));  warnx << "ok\n";  warnx << "attempting flush of pin node... ";  locs->flush ();  assert (locs->cached (l->id ()));  assert (locs->lookup (l->id ()) == l);  assert (locs->size () == 1);  warnx << "failed as expected.\n";  warnx << "pinning a successor and attempting flush... ";  locs->pin (n.x, 1);  locs->flush ();  assert (locs->cached (l->id ()));  warnx << "ok\n";  warnx << "resetting locationtable... ";  locs = New refcounted<locationtable> (10);  warnx << "ok\n";  locs->insert (l);  warnx << "pinning self, pred and succlist... ";  locs->pin (n.x, 0);  locs->pin (n.x, -1);  locs->pin (n.x, 16);  warnx << " ok\n";  warnx << "flushing... ";  locs->flush ();  assert (locs->cached (l->id ()));  warnx << "ok\n";  warnx << "testing with 2 nodes... ";  n.vnode_num = 1;  n.x = make_chordID (n.r.hostname, n.r.port, n.vnode_num);  l = locs->insert (n);  assert (locs->size () == 2);  assert (locs->pinned (n.x));  locs->flush ();  assert (locs->size () == 2);  warnx << "ok\n";  warnx << "pinning new self, pred and succlist and then flushing... ";  locs->pin (n.x, 0);  locs->pin (n.x, -1);  locs->pin (n.x, 16);  locs->flush ();  assert (locs->cached (l->id ()));  assert (locs->size () == 2);  warnx << "ok\n";  warnx << "inserting 10 nodes... ";  for (unsigned int i = 0; i < 10; i++) {    n.r.hostname = "192.168.1.1";    n.r.port = 1000 + i;    n.vnode_num = i;    n.x = make_chordID (n.r.hostname, n.r.port, i);    l = locs->insert (n);    assert (l);    assert (l->alive ());    assert (locs->size () == 2 + i + 1);    assert (locs->usablenodes () == 2 + i + 1);  }  warnx << "ok\n";  warnx << "testing duplicate insert... ";  ptr<location> w = locs->insert (n);  assert (l == w);  assert (locs->size () == 12);  assert (locs->usablenodes () == 12);  warnx << "ok\n";  printtable (locs, "insert", "");}

⌨️ 快捷键说明

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