LatticeFlow
BOOM, Bloom, and Bloom^L explored how the conjunction of data-centric declarative programming and join semilattices could make writing eventually consistent programs easier and more principled. Building upon its academic ancestors, LatticeFlow explores how to make lattice-based stream processing fast and friendly.
Getting Started
First, install clang
, cmake
, and protobuf
(See
here for details).
# Building Code.
./scripts/build_debug.sh # build the code in debug mode
./scripts/build_release.sh # build the code in release mode
# Running Code.
./build/lattices/pair_lattice_test # run a test
(cd build && make test) # run all the tests
./build/flow/filter_bench # run a benchmark
./build/key_value_stores/msgqueue # start the message broker
./build/key_value_stores/server # start the key-value server
./build/key_value_stores/ruc_client # start a key-value client
# Formatting and Linting Code.
clang-format src/key_value_stores/server.cc # format a file
find src -name '*.cc' -o -name '*.h' | xargs clang-format -i # format all files
./scripts/run_clang_tidy.sh src/key_value_stores/server.cc # lint a file
./scripts/run_clang_tidy.sh $(find src -name '*.cc') # lint all files
Tour
Directory | Description |
---|---|
click |
Click-style event driven server framework. |
concurrency |
Concurrency and synchronization primitives. |
flow |
Iterators and stream processors. |
key_value_stores |
Key value store with varying isolation levels. |
lattices |
A collection of join semilattices. |
pushpull |
Click style push and pull operators. |
zmq_util |
ZeroMQ utilities. |
Administrivia
- All code should abide by the Google C++ Style Guide.
- All code should be formatted with
clang-format
and linted usingclang-tidy
(see Getting Started). - Third party libraries should be used sparingly.
- TODO: Continuous Integration.
Refer also to the RISE Lab C++ Project Template.