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 using clang-tidy (see Getting Started).
  • Third party libraries should be used sparingly.
  • TODO: Continuous Integration.

Refer also to the RISE Lab C++ Project Template.