1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
|
#ifndef TINY_CONVMEM_STORAGE_STORE_H
#define TINY_CONVMEM_STORAGE_STORE_H
#include <stdbool.h>
#include <stddef.h>
#include <stdint.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_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);
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
|