nuRAFT Messaging is a multi-group service layer for nuraft
This project provides a middleware to nuRaft which manages multple NuRaft servers multiplex through a single client/server.
See the Changelog for release information.
This library only provides the nuraft message marshalling and routing. In essense, it translates nuRaft types into comparable Protobuf objects which can be used when defining a gRPC service. A Protobuf schema is included for use with embedding these message types into downstream .proto service files.
You must still provide the following:
nuraft::state_machine
: Provides hooks to implementcommit()
,snapshot()
,rollback()
etc.nuraft::state_mgr
: RAFT state persistence. Loads/Stores state for the state_machine.nuraft::logger
: Provides logging facility to nuraft for debugging.nuraft_mesg::grpc_client
: Callsstep
on associated gRPC client.nuraft_mesg::grpc_server
: Associates/Bindsstep
gRPC call to marshalling calls.
A simple echo server can be found in test_package/example_{client,server}.cpp
Currently this project can only be built on Linux using the GCC compiler toolchain. Work is on-going to support other platforms (e.g. MacOS) using the Clang and VSCode toolchains. Please feel free to contribute changes that support this endeavour.
This project depends on the Symbiosis Library which is currently not available in conan-center. If using conan-center one must first export this recipe to their local conan cache, example:
$ git clone https://github.com/eBay/sisl sisl
$ conan export sisl/ oss/master
This project is typically built from a combination of conan.io and CMake (which must be installed on the host).
$ pip install -U conan
$ conan create --build missing . <user>/<channel>
Copyright 2021 eBay Inc.
Primary Author: Brian Szmyd Primary Developers: Brian Szmyd, Ravi Nagarjun Akella, Harihara Kadayam
Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at https://www.apache.org/licenses/LICENSE-2.0.
Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.