this repo has no description
2
fork

Configure Feed

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

Simulate delays during i/o work

+16
+12
lib/construct/sim_server.ex
··· 385 385 386 386 @spec deterministic_random(Enum.t) :: Enum.element 387 387 def deterministic_random(enumerable), do: Enum.random(enumerable) 388 + 389 + @spec simulate_work(integer | [integer]) :: :ok 390 + def simulate_work(delay_or_delays) do 391 + case get_scheduler_pid() do 392 + nil -> :noop 393 + pid -> do_work_delay(delay_or_delays, pid) 394 + end 395 + :ok 396 + end 397 + 398 + defp do_work_delay([_ | _] = delays, pid), do: Scheduler.yield(pid, Enum.random(delays)) 399 + defp do_work_delay(delay, pid) when is_integer(delay), do: Scheduler.yield(pid, delay) 388 400 end
+3
lib/servers/storage.ex
··· 183 183 do 184 184 kv = state.kv 185 185 values = Enum.map(keys, &HybridKV.get(kv, read_version, &1)) 186 + SimServer.simulate_work([1, 2, 3, 10, 30]) 186 187 {:reply, {:ok, values}, state} 187 188 else 188 189 {:error, _err} = error -> ··· 195 196 :ok <- check_contains_range(state, start_key, end_key) 196 197 do 197 198 %RangeResult{} = result = HybridKV.scan(state.kv, read_version, start_key, end_key, limit: limit, reverse: reverse) 199 + SimServer.simulate_work([1, 2, 3, 10, 30]) 198 200 {:reply, {:ok, result}, state} 199 201 else 200 202 {:error, _err} = error -> ··· 351 353 HybridKV.flush(kv, flush_version) 352 354 HybridKV.put_storage(kv, special_prefix() <> "durable_version", Integer.to_string(flush_version)) 353 355 HybridKV.commit(kv) 356 + SimServer.simulate_work([1, 10, 20, 30, 100]) 354 357 355 358 # Send pops to tlogs 356 359 # Note: pop is a cast (async) because the result doesn't matter for correctness
+1
lib/servers/tlog.ex
··· 169 169 # TODO: end_version = max(end_version, start_version) ? 170 170 171 171 batches = TaggedQueue.peek(state.tagged_queue, tag, start_version, end_version) 172 + SimServer.simulate_work([1, 2, 3, 10, 30]) 172 173 173 174 result = %PeekResult{ 174 175 tlog_id: state.id,