blob: 45e150001d984c78bcac461961b8f750c689f238 [file] [log] [blame] [view]
Davide Pesavento133067f2020-04-02 22:08:27 -04001# PSync: Partial and Full Synchronization Library for NDN
Ashlesh Gawande0b2897e2018-06-20 14:40:47 -05002
Davide Pesavento8dce1942021-10-02 22:31:26 -04003[![CI](https://github.com/named-data/PSync/actions/workflows/ci.yml/badge.svg)](https://github.com/named-data/PSync/actions/workflows/ci.yml)
4[![Docs](https://github.com/named-data/PSync/actions/workflows/docs.yml/badge.svg)](https://github.com/named-data/PSync/actions/workflows/docs.yml)
Davide Pesaventoc407dee2022-07-21 23:56:05 -04005![Language](https://img.shields.io/badge/C%2B%2B-17-blue)
Davide Pesavento8dce1942021-10-02 22:31:26 -04006![Latest version](https://img.shields.io/github/v/tag/named-data/PSync?label=Latest%20version)
Ashlesh Gawande0b2897e2018-06-20 14:40:47 -05007
Davide Pesavento133067f2020-04-02 22:08:27 -04008The PSync library implements the
9[PSync protocol](https://named-data.net/wp-content/uploads/2017/05/scalable_name-based_data_synchronization.pdf).
10It uses Invertible Bloom Lookup Table (IBLT), also known as Invertible Bloom Filter (IBF),
11to represent the state of a producer in partial sync mode and the state of a node in full
12sync mode. An IBF is a compact data structure where difference of two IBFs can be computed
13efficiently. In partial sync, PSync uses a Bloom Filter to represent the subscription list
14of the consumer.
Ashlesh Gawande0b2897e2018-06-20 14:40:47 -050015
Davide Pesavento133067f2020-04-02 22:08:27 -040016PSync uses the [ndn-cxx](https://github.com/named-data/ndn-cxx) library.
Ashlesh Gawande0b2897e2018-06-20 14:40:47 -050017
Davide Pesavento133067f2020-04-02 22:08:27 -040018## Installation
Ashlesh Gawande0b2897e2018-06-20 14:40:47 -050019
20### Prerequisites
21
Davide Pesavento133067f2020-04-02 22:08:27 -040022* [ndn-cxx and its dependencies](https://named-data.net/doc/ndn-cxx/current/INSTALL.html)
Ashlesh Gawande0b2897e2018-06-20 14:40:47 -050023
24### Build
25
Davide Pesavento133067f2020-04-02 22:08:27 -040026To build PSync from source:
Ashlesh Gawande0b2897e2018-06-20 14:40:47 -050027
28 ./waf configure
29 ./waf
30 sudo ./waf install
31
32To build on memory constrained platform, please use `./waf -j1` instead of `./waf`. The
33command will disable parallel compilation.
34
Davide Pesavento133067f2020-04-02 22:08:27 -040035If configured with tests (`./waf configure --with-tests`), the above commands will also
36generate unit tests that can be run with `./build/unit-tests`.
37
38## Reporting bugs
39
40Please submit any bug reports or feature requests to the
41[PSync issue tracker](https://redmine.named-data.net/projects/psync/issues).
42
43## Contributing
44
45We greatly appreciate contributions to the PSync code base, provided that they are
Davide Pesavento36651f12023-01-02 17:07:21 -050046licensed under the GNU LGPL version 3 or a compatible license.
47If you are new to the NDN software community, please read our [Contributor's Guide](
48https://github.com/named-data/.github/blob/master/CONTRIBUTING.md) to get started.
Davide Pesavento133067f2020-04-02 22:08:27 -040049
50## License
51
Davide Pesavento36651f12023-01-02 17:07:21 -050052PSync is free software distributed under the GNU Lesser General Public License version 3.
53See [`COPYING.md`](COPYING.md) for details.