feat(lsm): pave the way for removals and updates

This commit is contained in:
Jef Roosens 2023-11-10 16:10:20 +01:00
parent ddc38452be
commit 418de748f0
Signed by: Jef Roosens
GPG key ID: B75D4F293C7052DB
5 changed files with 30 additions and 16 deletions

View file

@ -151,7 +151,7 @@ lsm_error lsm_store_insert(lsm_entry_handle **out, lsm_store *store,
handle->store = store;
// Newly inserted entries are always dirty
handle->dirty = true;
handle->states |= lsm_entry_handle_state_new;
*out = handle;
@ -192,7 +192,7 @@ lsm_error lsm_entry_data_append(lsm_entry_handle *handle, lsm_str *data) {
}
entry->data_len = new_len;
handle->dirty = true;
handle->states |= lsm_entry_handle_state_updated;
return lsm_error_ok;
}

View file

@ -173,9 +173,7 @@ lsm_error lsm_store_load_db(lsm_store *store) {
handle->wrapper->entry->idx_file_offset = idx_file_offset;
// We explicitely set the dirty flag here to prevent writing to the datase
// when reading it in
handle->dirty = false;
handle->states = 0;
lsm_entry_close(handle);
store->db_file_size += db_dim[1];

View file

@ -53,8 +53,14 @@ void lsm_entry_close(lsm_entry_handle *handle) {
}
// TODO handle errors here
if (handle->dirty) {
if ((handle->states & lsm_entry_handle_state_new) &&
!(handle->states & lsm_entry_handle_state_removed)) {
lsm_entry_disk_insert(handle);
} else if ((handle->states & lsm_entry_handle_state_removed) &&
!(handle->states & lsm_entry_handle_state_new)) {
/* lsm_entry_disk_remove(handle); */
} else if (handle->states & lsm_entry_handle_state_updated) {
/* lsm_entry_disk_update(handle); */
}
pthread_rwlock_unlock(&handle->wrapper->lock);
@ -157,7 +163,7 @@ lsm_error lsm_entry_attr_remove(lsm_str **out, lsm_entry_handle *handle,
entry->attrs.count--;
entry->attrs.bitmap[type / 64] &= ~(((uint64_t)1) << (type % 64));
handle->dirty = true;
handle->states |= lsm_entry_handle_state_updated;
return lsm_error_ok;
}
@ -184,7 +190,7 @@ lsm_error lsm_entry_attr_insert(lsm_entry_handle *handle, uint8_t type,
entry->attrs.count++;
entry->attrs.bitmap[type / 64] |= ((uint64_t)1) << (type % 64);
handle->dirty = true;
handle->states |= lsm_entry_handle_state_updated;
return lsm_error_ok;
}