int main(int argc, char *argv[]) { if(argc != 5) fatal("Usage: filestore sockname -[fls] filename_or_hash" " num_RPCs_in_flight\n"); dhash = New dhashclient(argv[1]); chordID ID; char *cmd = argv[2]; char *name = argv[3]; maxinflight = atoi(argv[4]); if(!strcmp(cmd, "-s")) { // store store(name); } else if(!strcmp(cmd, "-l")) { // list str2chordID(name, ID); dhash->retrieve(ID, wrap(&list_cb)); } else if(!strcmp(cmd, "-f")) { // retrieve str2chordID(name, ID); dhash->retrieve(ID, wrap(&gotinode_cb)); warnx << "retrieve " << ID << "\n"; } else { fatal("Usage: filestore sockname -[fls] filename_or_hash" " num_RPCs_in_flight\n"); } amain(); return 0; }
int main (int argc, char **argv) { uint num_keys = 150; if (argc > 1) { num_keys = atoi (argv[1]); } srandom (time (NULL)); merkle_tree *tree = New merkle_tree_disk ("/tmp/index.mrk", "/tmp/internal.mrk", "/tmp/leaf.mrk", true); // if a trace is provided, execute the trace if (argc > 2) { str filename = argv[2]; str file = file2str (filename); rxx newline ("\\n"); vec<str> lines; split (&lines, newline, file); for (uint i = 0; i < lines.size(); i++) { if (i > num_keys) { warn << "did enough keys!\n"; exit(0); } static const rxx space_rx ("\\s+"); vec<str> parts; split (&parts, space_rx, lines[i]); if (parts.size() != 2) { continue; } chordID c; str2chordID (parts[1], c); if (parts[0] == "I") { warn << i << ") going to insert " << c << "\n"; tree->insert (c); } else { warn << i << ") going to remove " << c << "\n"; tree->remove (c); } tree->check_invariants (); } exit(0); } //tree->dump (); // inserts chordID c; for (uint i = 0; i < num_keys; i++) { c = make_randomID (); warn << "inserting " << c << " (" << i << ")\n"; tree->insert (c); tree->check_invariants(); } // lookups merkle_node_disk *n = (merkle_node_disk *) tree->lookup (to_merkle_hash (c)); warn << "found node " << n->count << ": \n"; if (n->isleaf ()) { merkle_key *k = n->keylist.first (); while (k != NULL) { warn << "\t" << k->id << "\n"; k = n->keylist.next (k); } } tree->lookup_release (n); assert (tree->key_exists (c)); // remove tree->remove (c); assert (!tree->key_exists (c)); //tree->dump (); chordID min = c; chordID max = ((chordID) 1) << 156; vec<chordID> keys = tree->get_keyrange (min, max, 65); for (uint i = 0; i < keys.size (); i++) { warn << "Found key " << keys[i] << " in range [" << min << "," << max << "]\n"; } delete tree; tree = NULL; unlink("/tmp/index.mrk"); unlink("/tmp/internal.mrk"); unlink("/tmp/leaf.mrk"); }