41679b6ec5
Reviewers: teon.banek Reviewed By: teon.banek Subscribers: pullbot Differential Revision: https://phabricator.memgraph.io/D1050 |
||
---|---|---|
.. | ||
src | ||
tests | ||
.clang-format | ||
.gitignore | ||
CMakeLists.txt | ||
config | ||
init | ||
main-client.cpp | ||
main.cpp | ||
README.md | ||
start_main.py |
distributed memgraph
This subdirectory structure implements distributed infrastructure of Memgraph.
Terminology
- Memgraph Node Id (mnid): a machine (processs) that runs a (distributed) Memgraph program.
- Node: a computer that performs (distributed) work.
- Vertex: an abstract graph concept.
- Reactor: a unit of concurrent execution, lives on its own thread.
- Channel: a (one-way) communication abstraction between Reactors. The reactors can be on the same machine or on different processes.
- Message: gets sent through channels. Must be serializable if sent via network layer (library: cereal).
- Event: arrival of a (subclass of) Message. You can register callbacks. Register exact callbacks (not for derivated/subclasses).
- EventStream: read-end of a channel, is owned by exactly one Reactor/thread.
- ChannelWriter: write-end of a channel, can be owned (wrote into) by multiple threads.
Ownership:
- System, Distributed are singletons. They should be always alive.
- ChannelWriter (write-end) should be lightweight and can be copied arbitrarily.
- EventStream (read-end) should never be written by anyone except the owner (the reactor that created it).
- In general: always think about who owns an object. Preferably write it in its comment block.
Code Conventions
- Locked: A method having a "Locked..." prefix indicates that you have to lock the appropriate mutex before calling this function.
- ALWAYS close channels. You will memory leak if you don't. Reactor::CloseChannel or Subscription::Close will do the trick.
Dependencies
- cereal