50 std::shared_ptr<ndn::svs::SVSPubSub> svsPubSub,
51 const std::string &nodePrefix,
const std::string &syncPrefix,
52 const std::string &upstreamEdgeName, uint32_t numberOfPartitions,
53 std::optional<std::shared_ptr<CongestionReporter>> congestionReporter);
57 void pushData(
const std::vector<uint8_t> &data);
59 void setTopicPartitions(uint64_t numberOfPartitions);
64 uint32_t getNextPartitionNumber();
66 void reportCongestion(CongestionReason congestionReason);
68 void saveTimestamp(std::chrono::steady_clock::time_point timestamp);
70 void cleanUpTimestamps(
71 std::chrono::time_point<std::chrono::steady_clock> referenceTimepoint);
73 ndn::Name prepareDataName(uint32_t partitionNumber);
75 uint64_t determineIdleTime(
76 std::chrono::time_point<std::chrono::steady_clock> referenceTimepoint);
78 void setupBackchannel();
81 const std::weak_ptr<ndn::svs::SVSPubSub> m_svsPubSub;
83 const std::string m_pubTopic;
85 std::string m_nodePrefix;
87 std::string m_syncPrefix;
89 uint32_t m_numberOfPartitions;
90 std::unordered_set<uint32_t> m_topicPartitions;
92 std::mt19937 m_randomNumberGenerator;
94 std::optional<std::shared_ptr<CongestionReporter>> m_congestionReporter;
96 std::deque<std::chrono::time_point<std::chrono::steady_clock>>
97 m_productionTimestamps;
100 std::chrono::seconds m_maxProductionTimestampAge = std::chrono::seconds(1);
102 const std::string &m_downstreamEdgeName;
104 std::chrono::time_point<std::chrono::steady_clock> m_idleSince;