fix(lsm): store data len in db; fix bug
parent
ef33825b7b
commit
9c03a36aa2
|
@ -91,6 +91,14 @@ typedef struct lsm_store lsm_store;
|
|||
*/
|
||||
lsm_error lsm_store_init(lsm_store **ptr);
|
||||
|
||||
/**
|
||||
* Return how many elements are stored in the trie.
|
||||
*
|
||||
* @param store store to use
|
||||
* @return how many elements are in the store
|
||||
*/
|
||||
uint64_t lsm_store_size(lsm_store *store);
|
||||
|
||||
/**
|
||||
* Open the given database file and load it into a new store object.
|
||||
*
|
||||
|
|
|
@ -30,6 +30,8 @@ lsm_error lsm_store_init(lsm_store **ptr) {
|
|||
return lsm_error_ok;
|
||||
}
|
||||
|
||||
uint64_t lsm_store_size(lsm_store *store) { return lsm_trie_size(store->trie); }
|
||||
|
||||
lsm_error lsm_store_open_read(lsm_entry_handle **out, lsm_store *store,
|
||||
lsm_str *key) {
|
||||
lsm_entry_wrapper *wrapper;
|
||||
|
|
|
@ -105,6 +105,8 @@ static lsm_error lsm_entry_read_str(lsm_str **out, uint64_t *sum, FILE *f) {
|
|||
return lsm_error_failed_alloc;
|
||||
}
|
||||
|
||||
buf[len] = '\0';
|
||||
|
||||
uint64_t read = 0;
|
||||
|
||||
while (read < len) {
|
||||
|
@ -158,6 +160,8 @@ lsm_error lsm_store_load_db(lsm_store *store) {
|
|||
return lsm_error_failed_io;
|
||||
}
|
||||
|
||||
LSM_RES(lsm_fread(&handle->wrapper->entry->data_len, NULL, store->db_file,
|
||||
sizeof(uint64_t), 1));
|
||||
LSM_RES(lsm_entry_read_attrs(NULL, handle, store->db_file));
|
||||
lsm_entry_close(handle);
|
||||
|
||||
|
|
|
@ -37,10 +37,11 @@ lsm_error lsm_entry_write_db(uint64_t *size, FILE *db_file, lsm_entry *entry,
|
|||
uint64_t pos) {
|
||||
LSM_RES(lsm_seek(db_file, pos));
|
||||
|
||||
// First we write how many attributes follow
|
||||
LSM_RES(lsm_entry_write_uint64_t(db_file, entry->data_len));
|
||||
|
||||
LSM_RES(
|
||||
lsm_entry_write_single(db_file, sizeof(uint8_t), &entry->attrs.count));
|
||||
*size = sizeof(uint8_t);
|
||||
*size = sizeof(uint64_t) + sizeof(uint8_t);
|
||||
|
||||
for (uint8_t i = 0; i < entry->attrs.count; i++) {
|
||||
// Write attribute type, length & value
|
||||
|
|
|
@ -1,4 +1,6 @@
|
|||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <time.h>
|
||||
|
||||
#include "lander.h"
|
||||
#include "log.h"
|
||||
|
@ -20,6 +22,7 @@
|
|||
|
||||
int main() {
|
||||
setvbuf(stdout, NULL, _IONBF, 0);
|
||||
srand(time(NULL));
|
||||
|
||||
ENV(api_key, "LANDER_API_KEY");
|
||||
ENV_OPT(port_str, "LANDER_PORT", "18080");
|
||||
|
@ -47,14 +50,18 @@ int main() {
|
|||
|
||||
lander_gctx *c_gctx = lander_gctx_init();
|
||||
c_gctx->data_dir = data_dir_s;
|
||||
/* c_gctx->trie = trie; */
|
||||
|
||||
lsm_str *data_dir;
|
||||
lsm_str_init_copy(&data_dir, (char *)data_dir_s);
|
||||
|
||||
info("Initializing store from path '%s'", data_dir_s);
|
||||
|
||||
if (lsm_store_load(&c_gctx->store, data_dir) != lsm_error_ok) {
|
||||
critical(2, "Failed to load existing store.");
|
||||
}
|
||||
|
||||
info("Store loaded containing %lu entries.", lsm_store_size(c_gctx->store));
|
||||
|
||||
http_loop *hl = http_loop_init(
|
||||
lander_routes, sizeof(lander_routes) / sizeof(lander_routes[0]), c_gctx,
|
||||
lander_ctx_init, (void (*)(void *))lander_ctx_reset,
|
||||
|
|
Loading…
Reference in New Issue