Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <string.h>
- #include <assert.h>
- #include "libforestdb/forestdb.h"
- int main(int argc, char**argv) {
- fdb_file_handle *file;
- fdb_kvs_handle *kvs, *snapshot;
- fdb_status status;
- fdb_config config;
- fdb_kvs_config kvs_config;
- fdb_seqnum_t seqnum, rollback_seqnum;
- fdb_kvs_info info;
- fdb_iterator *itr, *snapshot_itr;
- fdb_doc *doc;
- int cmpres;
- // 1. Open Database File
- config = fdb_get_default_config();
- status = fdb_open(&file, "/tmp/db", &config);
- assert(status == FDB_RESULT_SUCCESS);
- printf("opened database\n");
- // 2. Open KV Store
- kvs_config = fdb_get_default_kvs_config();
- status = fdb_kvs_open(file, &kvs, "kvs", &kvs_config);
- // 2. Create Key 'a' and Commit
- status = fdb_set_kv(kvs, "a", 1, "val-a", 5);
- assert(status == FDB_RESULT_SUCCESS);
- //status = fdb_commit(file, FDB_COMMIT_NORMAL);
- //assert(status == FDB_RESULT_SUCCESS);
- printf("created key 'a'\n");
- // 3. Create Key 'b' and Commit
- status = fdb_set_kv(kvs, "b", 1, "val-b", 5);
- assert(status == FDB_RESULT_SUCCESS);
- //status = fdb_commit(file, FDB_COMMIT_NORMAL);
- //assert(status == FDB_RESULT_SUCCESS);
- printf("created key 'b'\n");
- // 4. Create Key 'c' and Commit
- status = fdb_set_kv(kvs, "c", 1, "val-c", 5);
- assert(status == FDB_RESULT_SUCCESS);
- //status = fdb_commit(file, FDB_COMMIT_NORMAL);
- //assert(status == FDB_RESULT_SUCCESS);
- printf("created key 'c'\n");
- // 2. Create Key 'd' and Commit
- status = fdb_set_kv(kvs, "d", 1, "val-d", 5);
- assert(status == FDB_RESULT_SUCCESS);
- //status = fdb_commit(file, FDB_COMMIT_NORMAL);
- //assert(status == FDB_RESULT_SUCCESS);
- printf("created key 'd'\n");
- // 3. Create Key 'e' and Commit
- status = fdb_set_kv(kvs, "e", 1, "val-e", 5);
- assert(status == FDB_RESULT_SUCCESS);
- //status = fdb_commit(file, FDB_COMMIT_NORMAL);
- //assert(status == FDB_RESULT_SUCCESS);
- printf("created key 'e'\n");
- // 4. Create Key 'f' and Commit
- status = fdb_set_kv(kvs, "f", 1, "val-f", 5);
- assert(status == FDB_RESULT_SUCCESS);
- status = fdb_commit(file, FDB_COMMIT_NORMAL);
- //assert(status == FDB_RESULT_SUCCESS);
- //printf("created key 'f'\n");
- // 5. Remember seqnum for opening snapshot
- status = fdb_get_kvs_info(kvs, &info);
- assert(status == FDB_RESULT_SUCCESS);
- seqnum = info.last_seqnum;
- printf("seqnum: %llu\n", seqnum);
- // 6. Create an iterator
- status = fdb_iterator_init(kvs, &itr, "b", 1, "d", 1, FDB_ITR_NONE);
- assert(status == FDB_RESULT_SUCCESS);
- // 7. Do a seek
- status = fdb_iterator_seek(itr, "b", 1, FDB_ITR_SEEK_HIGHER);
- assert(status == FDB_RESULT_SUCCESS);
- // check value
- status = fdb_iterator_get(itr, &doc);
- assert(status == FDB_RESULT_SUCCESS);
- cmpres = strncmp("b", doc->key, doc->keylen);
- assert(cmpres == 0);
- // 8. Close the iterator
- status = fdb_iterator_close(itr);
- assert(status == FDB_RESULT_SUCCESS);
- // 9. Open a snapshot at the same point
- status = fdb_snapshot_open(kvs, &snapshot, seqnum);
- assert(status == FDB_RESULT_SUCCESS);
- // That works, now attempt to do exact same sequence on a snapshot
- // The snapshot is opened at the exact same place that the original
- // database handle should be at (last seq 3)
- // 10. Create an iterator on snapshot
- status = fdb_iterator_init(snapshot, &snapshot_itr, "a", 1, "c", 1, FDB_ITR_NONE);
- assert(status == FDB_RESULT_SUCCESS);
- // 11. Do a seek
- status = fdb_iterator_seek(snapshot_itr, "b", 1, FDB_ITR_SEEK_HIGHER);
- assert(status == FDB_RESULT_SUCCESS);
- // check value
- status = fdb_iterator_get(itr, &doc);
- assert(status == FDB_RESULT_SUCCESS);
- cmpres = strncmp("b", doc->key, doc->keylen);
- assert(cmpres == 0);
- // 12. Close the iterator
- status = fdb_iterator_close(snapshot_itr);
- assert(status == FDB_RESULT_SUCCESS);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement