diff options
Diffstat (limited to 'src/storage/store.h')
| -rw-r--r-- | src/storage/store.h | 64 |
1 files changed, 64 insertions, 0 deletions
diff --git a/src/storage/store.h b/src/storage/store.h new file mode 100644 index 0000000..cc14a80 --- /dev/null +++ b/src/storage/store.h @@ -0,0 +1,64 @@ +#ifndef TINY_CONVMEM_STORAGE_STORE_H +#define TINY_CONVMEM_STORAGE_STORE_H + +#include <stdbool.h> +#include <stddef.h> +#include <stdint.h> +#include <wchar.h> + +#include "domain/message.h" + +typedef enum tiny_store_status +{ + TINY_STORE_OK = 0, + TINY_STORE_NOT_FOUND, + TINY_STORE_BUSY, + TINY_STORE_IO_ERROR, + TINY_STORE_CORRUPT, + TINY_STORE_NO_MEMORY +} tiny_store_status_t; + +typedef struct tiny_store_entry +{ + tiny_message_t message; + bool deleted; + uint64_t sequence; +} tiny_store_entry_t; + +typedef struct tiny_store tiny_store_t; + +typedef struct tiny_rebuild_report +{ + uint64_t messages_indexed; + uint64_t records_removed; + uint64_t bytes_before; + uint64_t bytes_after; +} tiny_rebuild_report_t; + +typedef struct tiny_store_health +{ + uint64_t log_size; + uint64_t snapshot_size; + uint64_t active_messages; + uint64_t deleted_messages; + uint64_t last_sequence; + bool recovered_tail; + bool snapshot_valid; + char last_error[160]; +} tiny_store_health_t; + +tiny_store_status_t tiny_store_open(tiny_store_t **store, const wchar_t *directory); +void tiny_store_close(tiny_store_t *store); +const char *tiny_store_status_name(tiny_store_status_t status); + +tiny_store_status_t +tiny_store_write(tiny_store_t *store, const tiny_message_t *input, tiny_message_t *written); +tiny_store_status_t +tiny_store_delete(tiny_store_t *store, const char *message_id, const char *session_id); +tiny_store_status_t tiny_store_rebuild(tiny_store_t *store, tiny_rebuild_report_t *report); +void tiny_store_health(const tiny_store_t *store, tiny_store_health_t *health); + +size_t tiny_store_entry_count(const tiny_store_t *store); +const tiny_store_entry_t *tiny_store_entry(const tiny_store_t *store, size_t index); + +#endif |
