this repo has no description
at master 175 lines 4.6 kB view raw
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