Skip to content

Instantly share code, notes, and snippets.

@tahmmee
Created January 6, 2015 22:17
Show Gist options
  • Save tahmmee/531e607bd730c63cfa1e to your computer and use it in GitHub Desktop.
Save tahmmee/531e607bd730c63cfa1e to your computer and use it in GitHub Desktop.
forward rollback
// set n docs within both dbs
for(i=0;i<n;++i){
sprintf(keybuf, "key%d", i);
fdb_doc_create(&doc[i], (void*)keybuf, strlen(keybuf),
NULL, 0, NULL, 0);
fdb_set(kv1, doc[i]);
fdb_set_kv(mirror_kv1, keybuf, strlen(keybuf), setop, 3);
}
// commit and save seqnum1
fdb_commit(dbfile, FDB_COMMIT_NORMAL);
fdb_get_kvs_info(kv1, &info);
rb1_seqnum = info.last_seqnum;
// delete all docs in kv1
for(i=0;i<n;++i){
fdb_del(kv1, doc[i]);
}
// commit and save seqnum2
fdb_commit(dbfile, FDB_COMMIT_NORMAL);
fdb_get_kvs_info(kv1, &info);
rb2_seqnum = info.last_seqnum;
// sets again
for(i=0;i<n;++i){
doc[i]->deleted = false;
fdb_set(kv1, doc[i]);
}
// commit
fdb_commit(dbfile, FDB_COMMIT_NORMAL);
// rollback to first seqnum
status = fdb_rollback(&kv1, rb1_seqnum);
TEST_CHK(status == FDB_RESULT_SUCCESS);
// rollback to second seqnum
status = fdb_rollback(&kv1, rb2_seqnum);
TEST_CHK(status == FDB_RESULT_SUCCESS);
status = fdb_iterator_sequence_init(mirror_kv1, &it, 0, 0, FDB_ITR_NONE);
TEST_CHK(status == FDB_RESULT_SUCCESS);
do {
status = fdb_iterator_get(it, &rdoc);
TEST_CHK(status == FDB_RESULT_SUCCESS);
status = fdb_get(kv1, rdoc);
TEST_CHK(status == FDB_RESULT_KEY_NOT_FOUND);
TEST_CHK(rdoc->deleted == true);
} while(fdb_iterator_next(it) != FDB_RESULT_ITERATOR_FAIL);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment