Add fault injection for partial read/writes and random send() delays
This commit is contained in:
@@ -1,3 +1,3 @@
|
|||||||
gcc src/sha256.c src/basic.c src/file_system.c src/byte_queue.c src/file_tree.c src/message.c src/tcp.c src/wal.c src/hash_set.c src/client.c src/metadata_server.c src/chunk_server.c src/random_client.c src/main.c quakey/src/mockfs.c quakey/src/quakey.c -o toasty_simulation -Iquakey/include -Iinclude -Wall -Wextra -ggdb -O0 -DMAIN_SIMULATION
|
gcc src/sha256.c src/basic.c src/file_system.c src/byte_queue.c src/file_tree.c src/message.c src/tcp.c src/wal.c src/hash_set.c src/client.c src/metadata_server.c src/chunk_server.c src/random_client.c src/main.c quakey/src/mockfs.c quakey/src/quakey.c -o toasty_simulation -Iquakey/include -Iinclude -Wall -Wextra -ggdb -O0 -DMAIN_SIMULATION -DFAULT_INJECTION
|
||||||
gcc src/sha256.c src/basic.c src/file_system.c src/byte_queue.c src/file_tree.c src/message.c src/tcp.c src/wal.c src/hash_set.c src/client.c src/metadata_server.c src/chunk_server.c src/random_client.c src/main.c -o toasty_metadata_server -DMAIN_METADATA_SERVER -Wall -Wextra -ggdb -O0 -Iinclude -Iquakey/include
|
gcc src/sha256.c src/basic.c src/file_system.c src/byte_queue.c src/file_tree.c src/message.c src/tcp.c src/wal.c src/hash_set.c src/client.c src/metadata_server.c src/chunk_server.c src/random_client.c src/main.c -o toasty_metadata_server -DMAIN_METADATA_SERVER -Wall -Wextra -ggdb -O0 -Iinclude -Iquakey/include
|
||||||
gcc src/sha256.c src/basic.c src/file_system.c src/byte_queue.c src/file_tree.c src/message.c src/tcp.c src/wal.c src/hash_set.c src/client.c src/metadata_server.c src/chunk_server.c src/random_client.c src/main.c -o toasty_chunk_server -DMAIN_CHUNK_SERVER -Wall -Wextra -ggdb -O0 -Iinclude -Iquakey/include
|
gcc src/sha256.c src/basic.c src/file_system.c src/byte_queue.c src/file_tree.c src/message.c src/tcp.c src/wal.c src/hash_set.c src/client.c src/metadata_server.c src/chunk_server.c src/random_client.c src/main.c -o toasty_chunk_server -DMAIN_CHUNK_SERVER -Wall -Wextra -ggdb -O0 -Iinclude -Iquakey/include
|
||||||
|
|||||||
+34
-1
@@ -841,6 +841,8 @@ static Host *host___;
|
|||||||
|
|
||||||
int errno___;
|
int errno___;
|
||||||
|
|
||||||
|
static uint64_t sim_random(Sim *sim);
|
||||||
|
|
||||||
static void abort_(char *str)
|
static void abort_(char *str)
|
||||||
{
|
{
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
@@ -1666,7 +1668,14 @@ static int send_inner(Desc *desc, char *src, int len)
|
|||||||
if (ret == 0)
|
if (ret == 0)
|
||||||
return HOST_ERROR_WOULDBLOCK;
|
return HOST_ERROR_WOULDBLOCK;
|
||||||
|
|
||||||
time_event_send_data(desc->host->sim, desc->host->sim->current_time + 10000000, desc);
|
Nanos latency = 10000000;
|
||||||
|
#ifdef FAULT_INJECTION
|
||||||
|
Sim *sim = desc->host->sim;
|
||||||
|
uint64_t rng = sim_random(sim);
|
||||||
|
latency = 1000000 + (rng % 99000000); // between 1ms and 100ms
|
||||||
|
#endif
|
||||||
|
time_event_send_data(desc->host->sim, desc->host->sim->current_time + latency, desc);
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1676,6 +1685,12 @@ static int host_read(Host *host, int desc_idx, char *dst, int len)
|
|||||||
return HOST_ERROR_BADIDX;
|
return HOST_ERROR_BADIDX;
|
||||||
Desc *desc = &host->desc[desc_idx];
|
Desc *desc = &host->desc[desc_idx];
|
||||||
|
|
||||||
|
#ifdef FAULT_INJECTION
|
||||||
|
Sim *sim = desc->host->sim;
|
||||||
|
uint64_t rng = sim_random(sim);
|
||||||
|
len = 1 + (rng % len);
|
||||||
|
#endif
|
||||||
|
|
||||||
int num = 0;
|
int num = 0;
|
||||||
if (desc->type == DESC_SOCKET_C) {
|
if (desc->type == DESC_SOCKET_C) {
|
||||||
num = recv_inner(desc, dst, len);
|
num = recv_inner(desc, dst, len);
|
||||||
@@ -1699,6 +1714,12 @@ static int host_write(Host *host, int desc_idx, char *src, int len)
|
|||||||
return HOST_ERROR_BADIDX;
|
return HOST_ERROR_BADIDX;
|
||||||
Desc *desc = &host->desc[desc_idx];
|
Desc *desc = &host->desc[desc_idx];
|
||||||
|
|
||||||
|
#ifdef FAULT_INJECTION
|
||||||
|
Sim *sim = desc->host->sim;
|
||||||
|
uint64_t rng = sim_random(sim);
|
||||||
|
len = 1 + (rng % len);
|
||||||
|
#endif
|
||||||
|
|
||||||
int num = 0;
|
int num = 0;
|
||||||
if (desc->type == DESC_SOCKET_C) {
|
if (desc->type == DESC_SOCKET_C) {
|
||||||
num = send_inner(desc, src, len);
|
num = send_inner(desc, src, len);
|
||||||
@@ -1720,6 +1741,12 @@ static int host_recv(Host *host, int desc_idx, char *dst, int len)
|
|||||||
return HOST_ERROR_BADIDX;
|
return HOST_ERROR_BADIDX;
|
||||||
Desc *desc = &host->desc[desc_idx];
|
Desc *desc = &host->desc[desc_idx];
|
||||||
|
|
||||||
|
#ifdef FAULT_INJECTION
|
||||||
|
Sim *sim = desc->host->sim;
|
||||||
|
uint64_t rng = sim_random(sim);
|
||||||
|
len = 1 + (rng % len);
|
||||||
|
#endif
|
||||||
|
|
||||||
int num = 0;
|
int num = 0;
|
||||||
if (desc->type == DESC_SOCKET_C) {
|
if (desc->type == DESC_SOCKET_C) {
|
||||||
num = recv_inner(desc, dst, len);
|
num = recv_inner(desc, dst, len);
|
||||||
@@ -1738,6 +1765,12 @@ static int host_send(Host *host, int desc_idx, char *src, int len)
|
|||||||
return HOST_ERROR_BADIDX;
|
return HOST_ERROR_BADIDX;
|
||||||
Desc *desc = &host->desc[desc_idx];
|
Desc *desc = &host->desc[desc_idx];
|
||||||
|
|
||||||
|
#ifdef FAULT_INJECTION
|
||||||
|
Sim *sim = desc->host->sim;
|
||||||
|
uint64_t rng = sim_random(sim);
|
||||||
|
len = 1 + (rng % len);
|
||||||
|
#endif
|
||||||
|
|
||||||
int num = 0;
|
int num = 0;
|
||||||
if (desc->type == DESC_SOCKET_C) {
|
if (desc->type == DESC_SOCKET_C) {
|
||||||
num = send_inner(desc, src, len);
|
num = send_inner(desc, src, len);
|
||||||
|
|||||||
Reference in New Issue
Block a user