node: add fault enable toggle
This commit is contained in:
+11
-1
@@ -72,6 +72,7 @@ arena: std.heap.ArenaAllocator,
|
|||||||
argv: [][*:0]const u8,
|
argv: [][*:0]const u8,
|
||||||
environ_map: std.process.Environ.Map,
|
environ_map: std.process.Environ.Map,
|
||||||
scheduler: *Scheduler,
|
scheduler: *Scheduler,
|
||||||
|
faults_enabled: bool,
|
||||||
file_system: FileSystem,
|
file_system: FileSystem,
|
||||||
network_host: Network.Host,
|
network_host: Network.Host,
|
||||||
descriptors: [MAX_DESCRIPTORS]Descriptor,
|
descriptors: [MAX_DESCRIPTORS]Descriptor,
|
||||||
@@ -124,6 +125,7 @@ pub fn init(self: *Node, real_io: std.Io, trace: *Trace, prng: *std.Random.Defau
|
|||||||
self.local_time = 0;
|
self.local_time = 0;
|
||||||
self.arena = .init(gpa);
|
self.arena = .init(gpa);
|
||||||
self.scheduler = scheduler;
|
self.scheduler = scheduler;
|
||||||
|
self.faults_enabled = true;
|
||||||
try self.file_system.init(gpa);
|
try self.file_system.init(gpa);
|
||||||
|
|
||||||
self.network_host.init(network, addresses, gpa);
|
self.network_host.init(network, addresses, gpa);
|
||||||
@@ -174,7 +176,9 @@ pub fn sleep(self: *Node, delta_us: u64) !void {
|
|||||||
fn fakeDelay(self: *Node, range: DelayRange) !void {
|
fn fakeDelay(self: *Node, range: DelayRange) !void {
|
||||||
std.debug.assert(range.min_us <= range.max_us);
|
std.debug.assert(range.min_us <= range.max_us);
|
||||||
|
|
||||||
const delay_us = if (range.min_us == range.max_us) range.min_us else blk: {
|
const delay_us = if (!self.faults_enabled or range.min_us == range.max_us)
|
||||||
|
range.min_us
|
||||||
|
else blk: {
|
||||||
const random = self.prng.random();
|
const random = self.prng.random();
|
||||||
break :blk range.min_us + random.uintLessThan(u64, range.max_us - range.min_us + 1);
|
break :blk range.min_us + random.uintLessThan(u64, range.max_us - range.min_us + 1);
|
||||||
};
|
};
|
||||||
@@ -758,7 +762,13 @@ pub fn connect(self: *Node, address: Address) ConnectError!Handle {
|
|||||||
pub const ReadSocketError = HandleError || CancelError;
|
pub const ReadSocketError = HandleError || CancelError;
|
||||||
|
|
||||||
// TODO: make this configurable
|
// TODO: make this configurable
|
||||||
|
pub fn enableFaults(self: *Node, yes: bool) void {
|
||||||
|
self.faults_enabled = yes;
|
||||||
|
}
|
||||||
|
|
||||||
fn shortenForFault(self: *Node, len: usize) usize {
|
fn shortenForFault(self: *Node, len: usize) usize {
|
||||||
|
if (!self.faults_enabled)
|
||||||
|
return len;
|
||||||
if (len <= 1)
|
if (len <= 1)
|
||||||
return len;
|
return len;
|
||||||
return 1 + self.prng.random().uintLessThan(usize, len);
|
return 1 + self.prng.random().uintLessThan(usize, len);
|
||||||
|
|||||||
Reference in New Issue
Block a user