blob: a7137295be61f389143281e14c759fd61f54dbd7 [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 Pesavento6a562f02024-04-22 01:11:31 -04003![Latest version](https://img.shields.io/github/v/tag/named-data/PSync?label=Latest%20version)
4![Language](https://img.shields.io/badge/C%2B%2B-17-blue)
Davide Pesavento8dce1942021-10-02 22:31:26 -04005[![CI](https://github.com/named-data/PSync/actions/workflows/ci.yml/badge.svg)](https://github.com/named-data/PSync/actions/workflows/ci.yml)
6[![Docs](https://github.com/named-data/PSync/actions/workflows/docs.yml/badge.svg)](https://github.com/named-data/PSync/actions/workflows/docs.yml)
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 Pesavento46bac782023-02-19 20:32:24 -050022* [ndn-cxx and its dependencies](https://docs.named-data.net/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
Davide Pesaventodcb0bb82024-04-23 20:02:05 -040028```shell
29./waf configure
30./waf
31sudo ./waf install
32```
Ashlesh Gawande0b2897e2018-06-20 14:40:47 -050033
Davide Pesavento46bac782023-02-19 20:32:24 -050034To build on memory constrained systems, please use `./waf -j1` instead of `./waf`. This
35will disable parallel compilation.
Ashlesh Gawande0b2897e2018-06-20 14:40:47 -050036
Davide Pesavento133067f2020-04-02 22:08:27 -040037If configured with tests (`./waf configure --with-tests`), the above commands will also
Davide Pesavento46bac782023-02-19 20:32:24 -050038build a suite of unit tests that can be run with `./build/unit-tests`.
Davide Pesavento133067f2020-04-02 22:08:27 -040039
40## Reporting bugs
41
42Please submit any bug reports or feature requests to the
43[PSync issue tracker](https://redmine.named-data.net/projects/psync/issues).
44
45## Contributing
46
Davide Pesavento46bac782023-02-19 20:32:24 -050047Contributions to PSync are greatly appreciated and can be made through our
48[Gerrit code review site](https://gerrit.named-data.net/).
Davide Pesavento36651f12023-01-02 17:07:21 -050049If you are new to the NDN software community, please read our [Contributor's Guide](
Davide Pesavento46bac782023-02-19 20:32:24 -050050https://github.com/named-data/.github/blob/main/CONTRIBUTING.md) to get started.
Davide Pesavento133067f2020-04-02 22:08:27 -040051
52## License
53
Davide Pesavento36651f12023-01-02 17:07:21 -050054PSync is free software distributed under the GNU Lesser General Public License version 3.
Davide Pesaventodcb0bb82024-04-23 20:02:05 -040055See [`COPYING.md`](COPYING.md) and [`COPYING.lesser`](COPYING.lesser) for details.
56
57PSync contains third-party software, licensed under the following licenses:
58
59* The *C++ Bloom Filter Library* is licensed under the
60 [MIT license](https://www.partow.net/programming/bloomfilter/index.html)
61* *IBLT_Cplusplus* is licensed under the
62 [MIT license](https://github.com/gavinandresen/IBLT_Cplusplus/blob/master/LICENSE)
63* The *waf* build system is licensed under the [3-clause BSD license](waf)