this repo has no description
1defmodule Hobbes.Structs do
2 @moduledoc """
3 This module contains data structures which are shared across
4 multiple types of Server.
5 """
6
7 alias Hobbes.Utils
8
9 defmodule Cluster do
10 # Hide :servers from inspect output because they are spammy and unhelpful
11 @derive {Inspect, except: [:servers]}
12 @type t :: %__MODULE__{
13 coordinators: [term],
14 generation: non_neg_integer,
15 tlog_generations: [TLogGeneration.t],
16 status: :recovering | :normal,
17 manager_pid: pid,
18 servers: %{non_neg_integer => Hobbes.Structs.Server.t},
19 }
20 @enforce_keys [
21 :coordinators,
22 :generation,
23 :tlog_generations,
24 :status,
25 :manager_pid,
26 :servers,
27 ]
28 defstruct @enforce_keys
29 end
30
31 defmodule TLogGeneration do
32 @type t :: %__MODULE__{
33 generation: non_neg_integer,
34 start_version: non_neg_integer,
35 end_version: non_neg_integer | nil,
36 replication_factor: 1 | 2 | 3,
37 tlog_ids: [non_neg_integer],
38 }
39 @enforce_keys [:generation, :start_version, :replication_factor, :tlog_ids]
40 defstruct @enforce_keys ++ [:end_version]
41 end
42
43 defmodule Server do
44 @type t :: %__MODULE__{
45 type: module,
46 id: integer,
47 pid: pid,
48 }
49 @enforce_keys [:type, :id, :pid]
50 defstruct @enforce_keys
51 end
52
53 defmodule SupervisorStatus do
54 @type t :: %__MODULE__{
55 node: atom,
56 pid: pid,
57 generation_failed?: boolean,
58 slots: map | nil,
59 }
60 @enforce_keys [
61 :node,
62 :pid,
63 :generation_failed?,
64 :slots,
65 ]
66 defstruct @enforce_keys
67 end
68
69 defmodule TLogStatus do
70 @type t :: %__MODULE__{
71 id: non_neg_integer,
72 pid: pid,
73 locked?: boolean,
74 known_committed_version: non_neg_integer,
75 durable_version: non_neg_integer,
76 min_popped_version: non_neg_integer | -1,
77 }
78 @enforce_keys [
79 :id,
80 :pid,
81 :locked?,
82 :known_committed_version,
83 :durable_version,
84 :min_popped_version,
85 ]
86 defstruct @enforce_keys
87 end
88
89 defmodule CommitTxn do
90 @type t :: %__MODULE__{
91 read_version: non_neg_integer,
92 read_conflicts: [binary | {binary, binary}],
93 write_conflicts: [binary | {binary, binary}],
94 mutations: [Utils.mutation],
95 from: term,
96 batch_index: non_neg_integer | nil,
97 }
98 @enforce_keys [:read_version, :read_conflicts, :write_conflicts, :mutations]
99 defstruct @enforce_keys ++ [:from, :batch_index]
100 end
101
102 defmodule ResolveBatch do
103 @type t :: %__MODULE__{
104 commit_buffer_id: integer,
105 commit_version: non_neg_integer,
106 prev_commit_version: non_neg_integer,
107 transactions: [
108 # {read_version, read_conflicts, write_conflicts, meta_mutations}
109 {
110 non_neg_integer,
111 [binary | {binary, binary}],
112 [binary | {binary, binary}],
113 [Utils.mutation],
114 }
115 ]
116 }
117 @enforce_keys [:commit_buffer_id, :commit_version, :prev_commit_version, :transactions]
118 defstruct @enforce_keys
119 end
120
121 defmodule LogBatch do
122 @type t :: %__MODULE__{
123 commit_buffer_id: integer,
124 commit_version: non_neg_integer,
125 prev_commit_version: non_neg_integer,
126 tagged_mutations: [{Utils.tag_list, Utils.numbered_mutation}],
127 last_committed_version: non_neg_integer,
128 }
129 @enforce_keys [:commit_buffer_id, :commit_version, :prev_commit_version, :tagged_mutations, :last_committed_version]
130 defstruct @enforce_keys
131 end
132
133 defmodule PeekResult do
134 @type t :: %__MODULE__{
135 tlog_id: non_neg_integer,
136 nonce: reference,
137 known_committed_version: non_neg_integer,
138 start_version: non_neg_integer,
139 end_version: non_neg_integer,
140 batches: list,
141 }
142 @enforce_keys [:tlog_id, :nonce, :known_committed_version, :start_version, :end_version, :batches]
143 defstruct @enforce_keys
144 end
145
146 defmodule RangeResult do
147 @type t :: %__MODULE__{
148 pairs: [{binary, binary | :deleted | nil}],
149 count: non_neg_integer,
150 range: {binary, binary} | nil,
151 more: boolean,
152 }
153 @enforce_keys [:pairs, :more]
154 defstruct [:pairs, :count, :range, :more]
155 end
156
157 defmodule StorageStats do
158 @type t :: %__MODULE__{
159 server_id: non_neg_integer,
160 used_bytes: non_neg_integer,
161 free_bytes: non_neg_integer,
162 }
163 @enforce_keys [:server_id, :used_bytes, :free_bytes]
164 defstruct @enforce_keys
165 end
166
167 defmodule ShardStats do
168 @type t :: %__MODULE__{
169 start_key: binary,
170 end_key: binary,
171 size_bytes: non_neg_integer,
172 midpoint_key: binary,
173 }
174 @enforce_keys [:start_key, :end_key, :size_bytes, :midpoint_key]
175 defstruct @enforce_keys
176 end
177end