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 }
77 @enforce_keys [
78 :id,
79 :pid,
80 :locked?,
81 :known_committed_version,
82 :durable_version,
83 ]
84 defstruct @enforce_keys
85 end
86
87 defmodule CommitTxn do
88 @type t :: %__MODULE__{
89 read_version: non_neg_integer,
90 read_conflicts: [binary | {binary, binary}],
91 write_conflicts: [binary | {binary, binary}],
92 mutations: [Utils.mutation],
93 from: term,
94 batch_index: non_neg_integer | nil,
95 }
96 @enforce_keys [:read_version, :read_conflicts, :write_conflicts, :mutations]
97 defstruct @enforce_keys ++ [:from, :batch_index]
98 end
99
100 defmodule ResolveBatch do
101 @type t :: %__MODULE__{
102 commit_buffer_id: integer,
103 commit_version: non_neg_integer,
104 prev_commit_version: non_neg_integer,
105 transactions: [
106 # {read_version, read_conflicts, write_conflicts, meta_mutations}
107 {
108 non_neg_integer,
109 [binary | {binary, binary}],
110 [binary | {binary, binary}],
111 [Utils.mutation],
112 }
113 ]
114 }
115 @enforce_keys [:commit_buffer_id, :commit_version, :prev_commit_version, :transactions]
116 defstruct @enforce_keys
117 end
118
119 defmodule LogBatch do
120 @type t :: %__MODULE__{
121 commit_buffer_id: integer,
122 commit_version: non_neg_integer,
123 prev_commit_version: non_neg_integer,
124 tagged_mutations: [{Utils.tag_list, Utils.numbered_mutation}],
125 last_committed_version: non_neg_integer,
126 }
127 @enforce_keys [:commit_buffer_id, :commit_version, :prev_commit_version, :tagged_mutations, :last_committed_version]
128 defstruct @enforce_keys
129 end
130
131 defmodule PeekResult do
132 @type t :: %__MODULE__{
133 tlog_id: non_neg_integer,
134 nonce: reference,
135 known_committed_version: non_neg_integer,
136 start_version: non_neg_integer,
137 end_version: non_neg_integer,
138 batches: list,
139 }
140 @enforce_keys [:tlog_id, :nonce, :known_committed_version, :start_version, :end_version, :batches]
141 defstruct @enforce_keys
142 end
143
144 defmodule RangeResult do
145 @type t :: %__MODULE__{
146 pairs: [{binary, binary | :deleted | nil}],
147 count: non_neg_integer,
148 range: {binary, binary} | nil,
149 more: boolean,
150 }
151 @enforce_keys [:pairs, :more]
152 defstruct [:pairs, :count, :range, :more]
153 end
154
155 defmodule StorageStats do
156 @type t :: %__MODULE__{
157 server_id: non_neg_integer,
158 used_bytes: non_neg_integer,
159 free_bytes: non_neg_integer,
160 }
161 @enforce_keys [:server_id, :used_bytes, :free_bytes]
162 defstruct @enforce_keys
163 end
164
165 defmodule ShardStats do
166 @type t :: %__MODULE__{
167 start_key: binary,
168 end_key: binary,
169 size_bytes: non_neg_integer,
170 midpoint_key: binary,
171 }
172 @enforce_keys [:start_key, :end_key, :size_bytes, :midpoint_key]
173 defstruct @enforce_keys
174 end
175end