Git Product home page Git Product logo

zlog's Introduction

ZLog - a fast distributed shared log

ZLog is a high-performance, strongly consistent shared-log. It's designed to run on top of distributed software-defined storage systems like Ceph.

Getting Started

Language Bindings

The base ZLog project provides C, C++, and Java bindings.

Getting Involved

We welcome and encourage people to learn and contribute to the ZLog project. If you are looking for ways to get started, we use the E-easy and E-intermediate labels to tag issues that are good candidates for new contributors.

Initial funding for development of ZLog came from the Center for Research in Open Source Software.

zlog's People

Contributors

dotnwat avatar houminz avatar javierron avatar michaelsevilla avatar neha-ojha avatar rubenrbs avatar vsui avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

zlog's Issues

test: bootstrap a set of kvstore unit tests in gtest

There are a few different executables in src/kvstore used to stress test the kvstore library, but there are no basic unit tests that can be run as smoke tests, especially for adding tests for specific scenarios and semantics.

This issue would add a new google test case for the key-value store library. The goal would be cover the basic operations (get, put, transactions, iterators), and serving as a place for new tests to be added when needed.

build: remove automake build system

This project currently uses autotools and cmake for build systems, and each library and executable is defined in both frameworks. The only major difference between the two is that the zlog java bindings are built with autotools and not cmake.

This issue would (1) fixup the cmake files to build the java bindings (or potentially use some other solution (eg maven) to build the java bindings), and (2) remove the autotools framework so that only cmake (and possibly a java-specific build system) is used.

ci: test builds for in-tree and out-of-tree

This is just a basic task that ensures that header files and paths are all setup well. It should be as easy as changing the ci run scripts to do:

  1. cmake .; make
  2. mkdir build; cd build; cmake ..; make

test: use googletest sub-module rather than imported gtest repo

The google test framework is used to run unit tests in this project. The entire google test framework was imported into this project, but this makes it hard to update the software, creating massive commits that complicate the git history.

This issue would (1) remove the directory src/gtest, (2) replace it with a git submodule pointing at a release tag of the google test framework git repository, and (3) wire up the build system and tests.

backend: support c api

Currently the C bindings are associated with the ceph backend. This needs to be generalized so we can also pass in a backend to the C bindings. The easiest thing to do is probably give each backend a C API as well that returns an opaque backend object and then pass that to the C api.

doc: build a www launch page

I think we can keep the source in a doc directory and use git subtree publish to push into gh-pages. We'll need to find a new location for the java doc (e.g. /api/java/).

kvstore: remove vector backend

The key-value store library contains a backend abstraction for storing data in zlog or in ram (using std::vector) for development. However, we are adding a ram-based backend for zlog which means that we can remove the backend abstraction for the key-value store and use the zlog backend exclusively.

This issue would remove the key-value store backend abstraction and explicitly use zlog as the only choice.

build: make backend build options tri-mode

With cmake the ceph backend will be built automatically if the correct dependencies exist. The option can be explicitly turned off using -DWITH_CEPH_BACKEND=0. Specifying -DWITH_CEPH_BACKEND=1 is the same as the default when no option is specified.

This issue would add a third mode that distinguishes between the default ON state and the option being explicitly requested. In the later case we want to fail/abort configuration when the dependencies are not found.

See CMakeLists.txt in the root of the project for the current set of options and dependency checks.

sequencer client library is not thread safe

nwatkins@bender:~/src/zlog/src$ CEPH_CONF=/home/nwatkins/src/ceph/src/ceph.conf ./zlog-bench --pool rbd --server localhost --port 5678 --runtime 0 --nextseq --qdepth 2
  workload: next seq
      pool: rbd
   logname: c6ab5b9a-2a84-4e04-b5f9-43b395d95638.log
 seqr-host: localhost
 seqr-port: 5678
   runtime: 0
  stat win: 2
    qdepth: 2
  iops log: 
entry size: 1024
Failed to open log meta object c6ab5b9a-2a84-4e04-b5f9-43b395d95638.log.meta ret -2
lt-zlog-bench: libseq/libseqr.cc:46: virtual int zlog::SeqrClient::CheckTail(uint64_t, const string&, const string&, uint64_t*, bool): Assertion `msg_size < sizeof(buffer)' failed.
lt-zlog-bench: libseq/libseqr.cc:51: virtual int zlog::SeqrClient::CheckTail(uint64_t, const string&, const string&, uint64_t*, bool): Assertion `reply.ParseFromArray(buffer, msg_size)' failed.

kvstore: create tree visitor to replace existing traversals

The binary tree used to represent the key-value store database is traversed in a few different ways. For instance there is a set of methods that traverse the tree to create graphviz/dot output of the tree structure. Another traversal is used for debugging which asserts that a tree is a valid red-black tree. It would be nice to add a few traversal types that can be used to plugin visitors to avoid duplicating the traversal code.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.