#ifndef TINY_CONVMEM_STORAGE_STORE_H #define TINY_CONVMEM_STORAGE_STORE_H #include #include #include #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_CONFLICT } 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 { uint32_t format_version; uint64_t log_size; uint64_t snapshot_size; uint64_t active_messages; uint64_t deleted_messages; uint64_t last_sequence; uint64_t update_records; uint64_t dead_bytes; uint64_t write_bytes; uint64_t write_calls; uint64_t flush_calls; uint64_t truncate_calls; uint64_t replace_calls; bool recovered_tail; bool snapshot_valid; char last_error[160]; } tiny_store_health_t; typedef struct tiny_message_patch { const char *content; const tiny_metadata_t *metadata; tiny_metadata_mask_t metadata_mask; uint64_t expected_revision; bool has_expected_revision; } tiny_message_patch_t; tiny_store_status_t tiny_store_open(tiny_store_t **store, const char *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_update(tiny_store_t *store, const char *message_id, const tiny_message_patch_t *patch, tiny_message_t *updated, bool *changed); typedef enum tiny_import_policy { TINY_IMPORT_OVERWRITE = 0, TINY_IMPORT_REJECT } tiny_import_policy_t; typedef struct tiny_import_record { bool deleted; tiny_message_t message; } tiny_import_record_t; tiny_store_status_t tiny_store_rebuild(tiny_store_t *store, tiny_rebuild_report_t *report); tiny_store_status_t tiny_store_import(tiny_store_t *store, const tiny_import_record_t *records, size_t record_count, tiny_import_policy_t policy, size_t *imported_count, size_t *rejected_count); 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