Advertisement
Guest User

Untitled

a guest
Dec 26th, 2014
173
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.90 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <assert.h>
  4. #include "libforestdb/forestdb.h"
  5.  
  6. int main(int argc, char**argv) {
  7. fdb_file_handle *file;
  8. fdb_kvs_handle *kvs, *snapshot;
  9. fdb_status status;
  10. fdb_config config;
  11. fdb_kvs_config kvs_config;
  12. fdb_seqnum_t seqnum, rollback_seqnum;
  13. fdb_kvs_info info;
  14. fdb_iterator *itr, *snapshot_itr;
  15. fdb_doc *doc;
  16.  
  17. int cmpres;
  18.  
  19. // 1. Open Database File
  20. config = fdb_get_default_config();
  21. status = fdb_open(&file, "/tmp/db", &config);
  22. assert(status == FDB_RESULT_SUCCESS);
  23. printf("opened database\n");
  24.  
  25. // 2. Open KV Store
  26. kvs_config = fdb_get_default_kvs_config();
  27. status = fdb_kvs_open(file, &kvs, "kvs", &kvs_config);
  28.  
  29. // 2. Create Key 'a' and Commit
  30. status = fdb_set_kv(kvs, "a", 1, "val-a", 5);
  31. assert(status == FDB_RESULT_SUCCESS);
  32. //status = fdb_commit(file, FDB_COMMIT_NORMAL);
  33. //assert(status == FDB_RESULT_SUCCESS);
  34. printf("created key 'a'\n");
  35.  
  36. // 3. Create Key 'b' and Commit
  37. status = fdb_set_kv(kvs, "b", 1, "val-b", 5);
  38. assert(status == FDB_RESULT_SUCCESS);
  39. //status = fdb_commit(file, FDB_COMMIT_NORMAL);
  40. //assert(status == FDB_RESULT_SUCCESS);
  41. printf("created key 'b'\n");
  42.  
  43. // 4. Create Key 'c' and Commit
  44. status = fdb_set_kv(kvs, "c", 1, "val-c", 5);
  45. assert(status == FDB_RESULT_SUCCESS);
  46. //status = fdb_commit(file, FDB_COMMIT_NORMAL);
  47. //assert(status == FDB_RESULT_SUCCESS);
  48. printf("created key 'c'\n");
  49.  
  50. // 2. Create Key 'd' and Commit
  51. status = fdb_set_kv(kvs, "d", 1, "val-d", 5);
  52. assert(status == FDB_RESULT_SUCCESS);
  53. //status = fdb_commit(file, FDB_COMMIT_NORMAL);
  54. //assert(status == FDB_RESULT_SUCCESS);
  55. printf("created key 'd'\n");
  56.  
  57. // 3. Create Key 'e' and Commit
  58. status = fdb_set_kv(kvs, "e", 1, "val-e", 5);
  59. assert(status == FDB_RESULT_SUCCESS);
  60. //status = fdb_commit(file, FDB_COMMIT_NORMAL);
  61. //assert(status == FDB_RESULT_SUCCESS);
  62. printf("created key 'e'\n");
  63.  
  64. // 4. Create Key 'f' and Commit
  65. status = fdb_set_kv(kvs, "f", 1, "val-f", 5);
  66. assert(status == FDB_RESULT_SUCCESS);
  67. status = fdb_commit(file, FDB_COMMIT_NORMAL);
  68. //assert(status == FDB_RESULT_SUCCESS);
  69. //printf("created key 'f'\n");
  70.  
  71. // 5. Remember seqnum for opening snapshot
  72. status = fdb_get_kvs_info(kvs, &info);
  73. assert(status == FDB_RESULT_SUCCESS);
  74. seqnum = info.last_seqnum;
  75. printf("seqnum: %llu\n", seqnum);
  76.  
  77. // 6. Create an iterator
  78. status = fdb_iterator_init(kvs, &itr, "b", 1, "d", 1, FDB_ITR_NONE);
  79. assert(status == FDB_RESULT_SUCCESS);
  80.  
  81. // 7. Do a seek
  82. status = fdb_iterator_seek(itr, "b", 1, FDB_ITR_SEEK_HIGHER);
  83. assert(status == FDB_RESULT_SUCCESS);
  84.  
  85. // check value
  86. status = fdb_iterator_get(itr, &doc);
  87. assert(status == FDB_RESULT_SUCCESS);
  88.  
  89. cmpres = strncmp("b", doc->key, doc->keylen);
  90. assert(cmpres == 0);
  91.  
  92. // 8. Close the iterator
  93. status = fdb_iterator_close(itr);
  94. assert(status == FDB_RESULT_SUCCESS);
  95.  
  96. // 9. Open a snapshot at the same point
  97. status = fdb_snapshot_open(kvs, &snapshot, seqnum);
  98. assert(status == FDB_RESULT_SUCCESS);
  99.  
  100. // That works, now attempt to do exact same sequence on a snapshot
  101. // The snapshot is opened at the exact same place that the original
  102. // database handle should be at (last seq 3)
  103.  
  104. // 10. Create an iterator on snapshot
  105. status = fdb_iterator_init(snapshot, &snapshot_itr, "a", 1, "c", 1, FDB_ITR_NONE);
  106. assert(status == FDB_RESULT_SUCCESS);
  107.  
  108. // 11. Do a seek
  109. status = fdb_iterator_seek(snapshot_itr, "b", 1, FDB_ITR_SEEK_HIGHER);
  110. assert(status == FDB_RESULT_SUCCESS);
  111.  
  112. // check value
  113. status = fdb_iterator_get(itr, &doc);
  114. assert(status == FDB_RESULT_SUCCESS);
  115.  
  116. cmpres = strncmp("b", doc->key, doc->keylen);
  117. assert(cmpres == 0);
  118.  
  119. // 12. Close the iterator
  120. status = fdb_iterator_close(snapshot_itr);
  121. assert(status == FDB_RESULT_SUCCESS);
  122.  
  123. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement