IOSim on Hackageโ
The IOG Networking Team is pleased to announce that we published [io-sim
],
[io-classes
], [si-timers
], [strict-stm
], [strict-mvar
] and
[io-classes-mtl
] on Hackage. These are tools without which we could not
imagine writing a complex distributed system like [Cardano].
These packages support our goal of using the same code to run in production and
simulation, what greatly increases the reliability and quality of the final
system. [io-sim
] and its ecosystem is designed to let write a simulation
environment which provides provided things usually provided by an operating
system like networking stack or disk IO and develop as well as implement
& model complex applications/systems.
For developing a robust system one needs a proper testing framework which
allows one to model the key characteristics of the system. To achieve this
goal we needed to create an abstraction that captures the key aspects of the
Haskell runtime and operating system environment for distributed systems. The
Cardano [network stack][ouroboros-network] is a highly concurrent system, and
as a network application, it needs to deal with time: there are all sorts of
timeouts that guard resource usage: inactivity timeouts, message timeouts, or
an application level TCP
's WAIT_TIMEOUT
among others. The tools which we
provide permitted us to capture issues related to timing (which abound in
network programming) which, in production, would be extremely rare (things like
simultaneous TCP open or critical race conditions) and ensure that we can test
(in the simulation) these scenarios. Recently we caught
a [bug][sim-tcp-open-bug] in simultaneous TCP open when one side of the
connection crashed - a corner case of a corner case, that's how effective is
the combination of quickcheck style property-based testing & simulation!