this repo has no description
2
fork

Configure Feed

Select the types of activity you want to include in your feed.

Load shard map at storage server (re)start

+17 -6
+1 -3
lib/mem_kv.ex
··· 6 6 7 7 alias Hobbes.Structs.RangeResult 8 8 9 - @special_prefix "\xFF\xFF" 10 - 11 9 @spec new :: :ets.table 12 10 def new do 13 11 :ets.new(:mem_kv, [:ordered_set, :private]) ··· 219 217 220 218 defp do_flush_scan(table, version, prev, acc) do 221 219 case :ets.next(table, prev) do 222 - {key, ver} = full_key when key < @special_prefix -> 220 + {key, ver} = full_key -> 223 221 case ver <= version do 224 222 true -> 225 223 [{^full_key, value}] = :ets.lookup(table, full_key)
+13 -1
lib/servers/storage.ex
··· 151 151 # We are reading from storage here no matter what so the read at version=1 is fine 152 152 startup_version = String.to_integer(HybridKV.get(kv, 1, special_prefix() <> "durable_version") || "0") 153 153 154 + shard_map = SparseShardMap.new() 155 + # Load shard map 156 + HybridKV.scan(kv, 1, special_server_keys_prefix(), special_server_keys_end()).pairs 157 + |> Enum.each(fn {special_server_keys_prefix() <> rest, v} -> 158 + [_id, sk] = String.split(rest, "/") 159 + case v do 160 + "complete/" <> ek -> SparseShardMap.put(shard_map, sk, ek) 161 + # TODO: trigger import unless known to be complete locally 162 + "fetching/" <> _ek -> :noop 163 + end 164 + end) 165 + 154 166 state = %State{ 155 167 id: id, 156 168 cluster: cluster, ··· 165 177 166 178 kv: kv, 167 179 meta_store: MetaStore.new(kv.mem_kv), 168 - shard_map: SparseShardMap.new(), 180 + shard_map: shard_map, 169 181 170 182 imports: %{}, 171 183 shard_clears: [],
+1 -1
lib/workloads/cycle.ex
··· 157 157 Map.put(stats, :avg_latency, mean(latencies) / 1_000_000) 158 158 end) 159 159 160 - cols = [:swaps, :success, :txn_too_old, :read_cflt, :db_lock, :rv_too_old, :too_many_retries, :timeout, :avg_latency] 160 + cols = [:swaps, :success, :txn_too_old, :read_cflt, :db_lock, :rv_too_old, :tm_retries, :timeout, :avg_latency] 161 161 162 162 client_stats_table = 163 163 client_stats
+2 -1
test/mem_kv_test.exs
··· 225 225 226 226 assert MemKV.flush(kv, 1) == [ 227 227 {"foo", "bar", 1}, 228 + {"\xFF\xFFhello", "world", 1}, 228 229 ] 229 230 230 231 assert MemKV.get(kv, 1, 0, "foo") == nil 231 - assert MemKV.get(kv, 1, 0, "\xFF\xFFhello") == "world" 232 + assert MemKV.get(kv, 1, 0, "\xFF\xFFhello") == nil 232 233 end 233 234 end 234 235