psync::PartialProducer Class Reference

Partial sync logic to publish data names. More...

#include <PSync/partial-producer.hpp>

+ Inheritance diagram for psync::PartialProducer:
+ Collaboration diagram for psync::PartialProducer:

Public Member Functions

 PartialProducer (ndn::Face &face, ndn::KeyChain &keyChain, size_t expectedNumEntries, const ndn::Name &syncPrefix, const ndn::Name &userPrefix, ndn::time::milliseconds helloReplyFreshness=HELLO_REPLY_FRESHNESS, ndn::time::milliseconds syncReplyFreshness=SYNC_REPLY_FRESHNESS, CompressionScheme ibltCompression=CompressionScheme::NONE)
 Constructor. More...
 
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 subscribed consumers 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
 

Detailed Description

Partial sync logic to publish data names.

Application should call publishName whenever it wants to let consumers know that new data is available. Additional userPrefix should be added via addUserNode before calling publishName Currently, publishing of data needs to be handled by the application.

Definition at line 36 of file partial-producer.hpp.

Member Typedef Documentation

◆ HashNameBiMap

using psync::ProducerBase::HashNameBiMap = bm::bimap<bm::unordered_set_of<uint32_t>, bm::unordered_set_of<ndn::Name, std::hash<ndn::Name> >>
protectedinherited

Definition at line 167 of file producer-base.hpp.

Constructor & Destructor Documentation

◆ PartialProducer()

psync::PartialProducer::PartialProducer ( ndn::Face &  face,
ndn::KeyChain &  keyChain,
size_t  expectedNumEntries,
const ndn::Name &  syncPrefix,
const ndn::Name &  userPrefix,
ndn::time::milliseconds  helloReplyFreshness = HELLO_REPLY_FRESHNESS,
ndn::time::milliseconds  syncReplyFreshness = SYNC_REPLY_FRESHNESS,
CompressionScheme  ibltCompression = CompressionScheme::NONE 
)

Constructor.

Registers syncPrefix in NFD and sets internal filters for "sync" and "hello" under syncPrefix.

Parameters
faceApplication's face
keyChainKeyChain instance to use for signing
expectedNumEntriesExpected number of entries in IBF
syncPrefixThe prefix of the sync group
userPrefixThe prefix of the first user in the group
helloReplyFreshnessFreshnessPeriod of hello data
syncReplyFreshnessFreshnessPeriod of sync data
ibltCompressionCompression scheme to use for IBF

Definition at line 34 of file partial-producer.cpp.

Member Function Documentation

◆ addUserNode()

bool psync::ProducerBase::addUserNode ( const ndn::Name &  prefix)
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

Parameters
prefixthe user node to be added

Definition at line 56 of file producer-base.cpp.

◆ getSeqNo()

std::optional<uint64_t> psync::ProducerBase::getSeqNo ( const ndn::Name &  prefix) const
inlineinherited

Returns the current sequence number of the given prefix.

Parameters
prefixprefix to get the sequence number of

Definition at line 85 of file producer-base.hpp.

◆ isUserNode()

bool psync::ProducerBase::isUserNode ( const ndn::Name &  prefix) const
inlineprotectedinherited

Definition at line 134 of file producer-base.hpp.

◆ onRegisterFailed()

void psync::ProducerBase::onRegisterFailed ( const ndn::Name &  prefix,
const std::string &  msg 
)
staticprotectedinherited

Logs a message and throws if setting an interest filter fails.

Definition at line 141 of file producer-base.cpp.

◆ publishName()

void psync::PartialProducer::publishName ( const ndn::Name &  prefix,
std::optional< uint64_t >  seq = std::nullopt 
)

Publish name to let subscribed consumers know.

If seq is null then the seq of prefix is incremented by 1 else the supplied sequence is set in the IBF. Upon updating the sequence in the IBF satisfyPendingSyncInterests is called to let subscribed consumers know.

Parameters
prefixthe prefix to be updated
seqthe sequence number of the prefix

Definition at line 57 of file partial-producer.cpp.

◆ removeUserNode()

void psync::ProducerBase::removeUserNode ( const ndn::Name &  prefix)
inherited

Remove the user node from synchronization.

Erases prefix from IBF and other maps

Parameters
prefixthe user node to be removed

Definition at line 68 of file producer-base.cpp.

◆ sendApplicationNack()

void psync::ProducerBase::sendApplicationNack ( const ndn::Name &  name)
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

Parameters
namesend application nack with this name

Definition at line 124 of file producer-base.cpp.

◆ updateSeqNo()

void psync::ProducerBase::updateSeqNo ( const ndn::Name &  prefix,
uint64_t  seq 
)
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

Parameters
prefixprefix of the update
seqsequence number of the update

Definition at line 85 of file producer-base.cpp.

Member Data Documentation

◆ m_biMap

HashNameBiMap psync::ProducerBase::m_biMap
protectedinherited

Definition at line 169 of file producer-base.hpp.

◆ m_contentCompression

const CompressionScheme psync::ProducerBase::m_contentCompression
protectedinherited

Definition at line 181 of file producer-base.hpp.

◆ m_expectedNumEntries

const size_t psync::ProducerBase::m_expectedNumEntries
protectedinherited

Definition at line 173 of file producer-base.hpp.

◆ m_face

ndn::Face& psync::ProducerBase::m_face
protectedinherited

Definition at line 157 of file producer-base.hpp.

◆ m_iblt

detail::IBLT psync::ProducerBase::m_iblt
protectedinherited

Definition at line 162 of file producer-base.hpp.

◆ m_ibltCompression

const CompressionScheme psync::ProducerBase::m_ibltCompression
protectedinherited

Definition at line 180 of file producer-base.hpp.

◆ m_keyChain

ndn::KeyChain& psync::ProducerBase::m_keyChain
protectedinherited

Definition at line 158 of file producer-base.hpp.

◆ m_prefixes

std::map<ndn::Name, uint64_t> psync::ProducerBase::m_prefixes
protectedinherited

Definition at line 165 of file producer-base.hpp.

◆ m_rng

ndn::random::RandomNumberEngine& psync::ProducerBase::m_rng
protectedinherited

Definition at line 160 of file producer-base.hpp.

◆ m_scheduler

ndn::Scheduler psync::ProducerBase::m_scheduler
protectedinherited

Definition at line 159 of file producer-base.hpp.

◆ m_segmentPublisher

SegmentPublisher psync::ProducerBase::m_segmentPublisher
protectedinherited

Definition at line 171 of file producer-base.hpp.

◆ m_syncPrefix

const ndn::Name psync::ProducerBase::m_syncPrefix
protectedinherited

Definition at line 177 of file producer-base.hpp.

◆ m_syncReplyFreshness

const ndn::time::milliseconds psync::ProducerBase::m_syncReplyFreshness
protectedinherited

Definition at line 179 of file producer-base.hpp.

◆ m_threshold

const size_t psync::ProducerBase::m_threshold
protectedinherited

Definition at line 176 of file producer-base.hpp.

◆ m_userPrefix

const ndn::Name psync::ProducerBase::m_userPrefix
protectedinherited

Definition at line 178 of file producer-base.hpp.