peer to peer sync using low level languages
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
dependencies
src
test
.gitignore
.travis.yml
Dockerbuild
Dockerfile
LICENSE
P2S.pro
README.md

README.md

logomakr_0ewpnu

##Intro

Protocol capable of P2P (master to master) syncing key-value datastores. using c++ high performance web server with a redis backend. The path to requests is /rpc and takes only POST requests in JSON-RPC 2.0. The methods that have been implemented are:

  • datastorePut({ collection: String, changes: [Object] }) -> : sync objects to the server.
  • datastoreGet({ collection: String, all: Boolean, ids: [String] }) -> [Object]: retrieve all of the objects which are newer on the server.
  • datastoreMeta({ collection: String }) -> [id,mtime]: get last modification times of all objects upstream.

Arguments explanation:

  • collection: this is a string identifier of the collection we want to sync.
  • changes: this is an array of objects to save in the collection; every object can be anything (JSON object). Has three special properties:
    • _id: (always required) is the object key/id.
    • _mtime: is the last time the object was modified. This is a POSIX time in millisecons.
    • _delete: is set to true if we want to remove this object from the collection. If not it can be either false or not included.
  • all: this is a boolean which, when set to true, makes datastoreGet return all objects in the collection
  • ids: array of strings, specifies which objects to fetch from the database.

The implementation is integrated in Travis-CI, that will generate and publish automatically containers to easy deploy the application.

Deployment

Download the container from the docker-hub

docker pull kanekotic/p2s

And execute with the next command

docker run -p <service port> -e PORT=<service port> -e REDIS_IP=<redis ip> -e REDIS_PORT=<redis port> --net=host kanekotic/p2s

Development

Current development enviroment is based on un an Ubuntu machine. Please follow the next steps to setup the enviroment:

  • Basic building will require the next packages
sudo apt-get install redis-server libboost-all-dev gcc-5 g++-5 libgtest-dev cmake qt5-qmake qt5-default qtbase5-dev qttools5-dev-tools
  • To build gtest run
cd /usr/src/gtest
sudo cmake .
sudo cmake --build . 
sudo mv libg* /usr/local/lib/
  • you will also need to pull the dependency for the redis client trought
git clone https://github.com/Cylix/cpp_redis.git 
cd cpp_redis 
mkdir build 
cd build 
cmake .. 
make -j 
sudo make install -j 
sudo cp /usr/local/lib/libcpp_redis.so /usr/lib/libcpp_redis.so
  • the code can be build using the next command line on the directory
qmake 
make

optional

  • Use Qt Creator as development enviroment, it can be installed by:
sudo apt-get install qtcreator
  • Install and use Postman for integration testing (./test/Test_P2S_Postman.json).