I'm working on an I/O generator program for a distributed file system. The problem I need to solve can be worded as a set of requirements:
- Reproducible (i.e. given some initial condition, the algorithm must produce the exact same file system).
- Concurrent (or at least concurrency-friendly). Since file system itself is distributed, the I/O generator needs to work with it from multiple computers. Friendliness in this context means that I'd like to maximize the amount of work done independently by each connected computer, each connection from that computer to the file system and each thread operating on that connection.
- Parametrized (i.e. users of the I/O generator should be able to control parameters s.a. how many files are created per directory, how deeply the directories can be nested, similar for symbolic links etc.).
- Supervised error generation. When generating I/O for the testing purposes it is also important to generate legitimate errors, s.a. trying to rename a non-existing file, or renaming an existing file into another existing file and so on.
- Re-entrant (i.e. the state of the algorithm could be saved and the algorithm could be restarted from a given state).
Now, I am fully aware you aren't going to write a pseudocode answering to all the bullet points above... that'd be crazy if you could. What I'm hoping for is if you could point me to white papers / research / existing solutions. I'd be also thankful if you had partial answers, s.a. how to generate a random directed graph with fanout in a given range. Or, how to generate a tree concurrently. I'm more interested in the "algorithm" part of the question rather than in solving other more technical problems. I listed the technical problems in order to maybe give a general idea of what the algorithm needs to be used for.