Full sync logic to synchronize with other nodes where all nodes wants to get all names prefixes synced. More...
#include <PSync/full-producer.hpp>
Public Member Functions | |
FullProducer (ndn::Face &face, ndn::KeyChain &keyChain, size_t expectedNumEntries, const ndn::Name &syncPrefix, const ndn::Name &userPrefix, UpdateCallback onUpdateCallBack, ndn::time::milliseconds syncInterestLifetime=SYNC_INTEREST_LIFETIME, ndn::time::milliseconds syncReplyFreshness=SYNC_REPLY_FRESHNESS, CompressionScheme ibltCompression=CompressionScheme::DEFAULT, CompressionScheme contentCompression=CompressionScheme::DEFAULT) | |
Constructor. More... | |
~FullProducer () | |
bool | addUserNode (const ndn::Name &prefix) |
Adds a user node for synchronization. More... | |
std::optional< uint64_t > | getSeqNo (const ndn::Name &prefix) const |
Returns the current sequence number of the given prefix. More... | |
void | publishName (const ndn::Name &prefix, std::optional< uint64_t > seq=std::nullopt) |
Publish name to let others know. More... | |
void | removeUserNode (const ndn::Name &prefix) |
Remove the user node from synchronization. More... | |
Protected Types | |
using | HashNameBiMap = bm::bimap< bm::unordered_set_of< uint32_t >, bm::unordered_set_of< ndn::Name, std::hash< ndn::Name > >> |
Protected Member Functions | |
bool | isUserNode (const ndn::Name &prefix) const |
void | sendApplicationNack (const ndn::Name &name) |
Sends a data packet with content type nack. More... | |
void | updateSeqNo (const ndn::Name &prefix, uint64_t seq) |
Update m_prefixes and IBF with the given prefix and seq. More... | |
Static Protected Member Functions | |
static void | onRegisterFailed (const ndn::Name &prefix, const std::string &msg) |
Logs a message and throws if setting an interest filter fails. More... | |
Protected Attributes | |
HashNameBiMap | m_biMap |
const CompressionScheme | m_contentCompression |
const size_t | m_expectedNumEntries |
ndn::Face & | m_face |
detail::IBLT | m_iblt |
const CompressionScheme | m_ibltCompression |
ndn::KeyChain & | m_keyChain |
std::map< ndn::Name, uint64_t > | m_prefixes |
ndn::random::RandomNumberEngine & | m_rng |
ndn::Scheduler | m_scheduler |
SegmentPublisher | m_segmentPublisher |
const ndn::Name | m_syncPrefix |
const ndn::time::milliseconds | m_syncReplyFreshness |
const size_t | m_threshold |
const ndn::Name | m_userPrefix |
Full sync logic to synchronize with other nodes where all nodes wants to get all names prefixes synced.
Application should call publishName whenever it wants to let consumers know that new data is available for the userPrefix. Multiple userPrefixes can be added by using addUserNode. Currently, fetching and publishing of data needs to be handled by the application.
Definition at line 41 of file full-producer.hpp.
|
protectedinherited |
Definition at line 167 of file producer-base.hpp.
psync::FullProducer::FullProducer | ( | ndn::Face & | face, |
ndn::KeyChain & | keyChain, | ||
size_t | expectedNumEntries, | ||
const ndn::Name & | syncPrefix, | ||
const ndn::Name & | userPrefix, | ||
UpdateCallback | onUpdateCallBack, | ||
ndn::time::milliseconds | syncInterestLifetime = SYNC_INTEREST_LIFETIME , |
||
ndn::time::milliseconds | syncReplyFreshness = SYNC_REPLY_FRESHNESS , |
||
CompressionScheme | ibltCompression = CompressionScheme::DEFAULT , |
||
CompressionScheme | contentCompression = CompressionScheme::DEFAULT |
||
) |
Constructor.
Registers syncPrefix in NFD and sends a sync interest.
face | Application's face |
keyChain | KeyChain instance to use for signing |
expectedNumEntries | Expected number of entries in IBF |
syncPrefix | The prefix of the sync group |
userPrefix | The prefix of the first user in the group |
onUpdateCallBack | The callback to be invoked when there is new data |
syncInterestLifetime | Lifetime of the sync interest |
syncReplyFreshness | FreshnessPeriod of sync data |
ibltCompression | Compression scheme to use for IBF |
contentCompression | Compression scheme to use for Data content |
Definition at line 34 of file full-producer.cpp.
psync::FullProducer::~FullProducer | ( | ) |
Definition at line 58 of file full-producer.cpp.
|
inherited |
Adds a user node for synchronization.
Initializes m_prefixes[prefix] to zero Does not add zero-th sequence number to IBF because if a large number of user nodes are added then decoding of the difference between own IBF and other IBF will not be possible
prefix | the user node to be added |
Definition at line 56 of file producer-base.cpp.
|
inlineinherited |
Returns the current sequence number of the given prefix.
prefix | prefix to get the sequence number of |
Definition at line 85 of file producer-base.hpp.
|
inlineprotectedinherited |
Definition at line 134 of file producer-base.hpp.
|
staticprotectedinherited |
Logs a message and throws if setting an interest filter fails.
Definition at line 141 of file producer-base.cpp.
void psync::FullProducer::publishName | ( | const ndn::Name & | prefix, |
std::optional< uint64_t > | seq = std::nullopt |
||
) |
Publish name to let others know.
addUserNode needs to be called before this to add the prefix if not already added via the constructor. If seq is null then the seq of prefix is incremented by 1 else the supplied sequence is set in the IBF.
prefix | the prefix to be updated |
seq | the sequence number of the prefix |
Definition at line 66 of file full-producer.cpp.
|
inherited |
Remove the user node from synchronization.
Erases prefix from IBF and other maps
prefix | the user node to be removed |
Definition at line 68 of file producer-base.cpp.
|
protectedinherited |
Sends a data packet with content type nack.
Producer sends a nack to consumer if consumer has very old IBF whose differences with latest IBF can't be decoded successfully
name | send application nack with this name |
Definition at line 124 of file producer-base.cpp.
|
protectedinherited |
Update m_prefixes and IBF with the given prefix and seq.
Whoever calls this needs to make sure that prefix is in m_prefixes We remove already existing prefix/seq from IBF (unless seq is zero because we don't insert zero seq into IBF) Then we update m_prefixes, m_biMap, and IBF
prefix | prefix of the update |
seq | sequence number of the update |
Definition at line 85 of file producer-base.cpp.
|
protectedinherited |
Definition at line 169 of file producer-base.hpp.
|
protectedinherited |
Definition at line 181 of file producer-base.hpp.
|
protectedinherited |
Definition at line 173 of file producer-base.hpp.
|
protectedinherited |
Definition at line 157 of file producer-base.hpp.
|
protectedinherited |
Definition at line 162 of file producer-base.hpp.
|
protectedinherited |
Definition at line 180 of file producer-base.hpp.
|
protectedinherited |
Definition at line 158 of file producer-base.hpp.
|
protectedinherited |
Definition at line 165 of file producer-base.hpp.
|
protectedinherited |
Definition at line 160 of file producer-base.hpp.
|
protectedinherited |
Definition at line 159 of file producer-base.hpp.
|
protectedinherited |
Definition at line 171 of file producer-base.hpp.
|
protectedinherited |
Definition at line 177 of file producer-base.hpp.
|
protectedinherited |
Definition at line 179 of file producer-base.hpp.
|
protectedinherited |
Definition at line 176 of file producer-base.hpp.
|
protectedinherited |
Definition at line 178 of file producer-base.hpp.