Davide Pesavento | 133067f | 2020-04-02 22:08:27 -0400 | [diff] [blame] | 1 | # PSync: Partial and Full Synchronization Library for NDN |
Ashlesh Gawande | 0b2897e | 2018-06-20 14:40:47 -0500 | [diff] [blame] | 2 | |
Davide Pesavento | 6a562f0 | 2024-04-22 01:11:31 -0400 | [diff] [blame] | 3 |  |
| 4 |  |
Davide Pesavento | 8dce194 | 2021-10-02 22:31:26 -0400 | [diff] [blame] | 5 | [](https://github.com/named-data/PSync/actions/workflows/ci.yml) |
| 6 | [](https://github.com/named-data/PSync/actions/workflows/docs.yml) |
Ashlesh Gawande | 0b2897e | 2018-06-20 14:40:47 -0500 | [diff] [blame] | 7 | |
Davide Pesavento | 133067f | 2020-04-02 22:08:27 -0400 | [diff] [blame] | 8 | The PSync library implements the |
| 9 | [PSync protocol](https://named-data.net/wp-content/uploads/2017/05/scalable_name-based_data_synchronization.pdf). |
| 10 | It uses Invertible Bloom Lookup Table (IBLT), also known as Invertible Bloom Filter (IBF), |
| 11 | to represent the state of a producer in partial sync mode and the state of a node in full |
| 12 | sync mode. An IBF is a compact data structure where difference of two IBFs can be computed |
| 13 | efficiently. In partial sync, PSync uses a Bloom Filter to represent the subscription list |
| 14 | of the consumer. |
Ashlesh Gawande | 0b2897e | 2018-06-20 14:40:47 -0500 | [diff] [blame] | 15 | |
Davide Pesavento | 133067f | 2020-04-02 22:08:27 -0400 | [diff] [blame] | 16 | PSync uses the [ndn-cxx](https://github.com/named-data/ndn-cxx) library. |
Ashlesh Gawande | 0b2897e | 2018-06-20 14:40:47 -0500 | [diff] [blame] | 17 | |
Davide Pesavento | 133067f | 2020-04-02 22:08:27 -0400 | [diff] [blame] | 18 | ## Installation |
Ashlesh Gawande | 0b2897e | 2018-06-20 14:40:47 -0500 | [diff] [blame] | 19 | |
| 20 | ### Prerequisites |
| 21 | |
Davide Pesavento | 46bac78 | 2023-02-19 20:32:24 -0500 | [diff] [blame] | 22 | * [ndn-cxx and its dependencies](https://docs.named-data.net/ndn-cxx/current/INSTALL.html) |
Ashlesh Gawande | 0b2897e | 2018-06-20 14:40:47 -0500 | [diff] [blame] | 23 | |
| 24 | ### Build |
| 25 | |
Davide Pesavento | 133067f | 2020-04-02 22:08:27 -0400 | [diff] [blame] | 26 | To build PSync from source: |
Ashlesh Gawande | 0b2897e | 2018-06-20 14:40:47 -0500 | [diff] [blame] | 27 | |
Davide Pesavento | dcb0bb8 | 2024-04-23 20:02:05 -0400 | [diff] [blame] | 28 | ```shell |
| 29 | ./waf configure |
| 30 | ./waf |
| 31 | sudo ./waf install |
| 32 | ``` |
Ashlesh Gawande | 0b2897e | 2018-06-20 14:40:47 -0500 | [diff] [blame] | 33 | |
Davide Pesavento | 46bac78 | 2023-02-19 20:32:24 -0500 | [diff] [blame] | 34 | To build on memory constrained systems, please use `./waf -j1` instead of `./waf`. This |
| 35 | will disable parallel compilation. |
Ashlesh Gawande | 0b2897e | 2018-06-20 14:40:47 -0500 | [diff] [blame] | 36 | |
Davide Pesavento | 133067f | 2020-04-02 22:08:27 -0400 | [diff] [blame] | 37 | If configured with tests (`./waf configure --with-tests`), the above commands will also |
Davide Pesavento | 46bac78 | 2023-02-19 20:32:24 -0500 | [diff] [blame] | 38 | build a suite of unit tests that can be run with `./build/unit-tests`. |
Davide Pesavento | 133067f | 2020-04-02 22:08:27 -0400 | [diff] [blame] | 39 | |
| 40 | ## Reporting bugs |
| 41 | |
| 42 | Please 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 Pesavento | 46bac78 | 2023-02-19 20:32:24 -0500 | [diff] [blame] | 47 | Contributions to PSync are greatly appreciated and can be made through our |
| 48 | [Gerrit code review site](https://gerrit.named-data.net/). |
Davide Pesavento | 36651f1 | 2023-01-02 17:07:21 -0500 | [diff] [blame] | 49 | If you are new to the NDN software community, please read our [Contributor's Guide]( |
Davide Pesavento | 46bac78 | 2023-02-19 20:32:24 -0500 | [diff] [blame] | 50 | https://github.com/named-data/.github/blob/main/CONTRIBUTING.md) to get started. |
Davide Pesavento | 133067f | 2020-04-02 22:08:27 -0400 | [diff] [blame] | 51 | |
| 52 | ## License |
| 53 | |
Davide Pesavento | 36651f1 | 2023-01-02 17:07:21 -0500 | [diff] [blame] | 54 | PSync is free software distributed under the GNU Lesser General Public License version 3. |
Davide Pesavento | dcb0bb8 | 2024-04-23 20:02:05 -0400 | [diff] [blame] | 55 | See [`COPYING.md`](COPYING.md) and [`COPYING.lesser`](COPYING.lesser) for details. |
| 56 | |
| 57 | PSync 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) |