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);
79 const std::weak_ptr<ndn::svs::SVSPubSub> m_svsPubSub;
80 const std::string m_pubTopic;
82 std::string m_nodePrefix;
84 uint32_t m_numberOfPartitions;
85 std::unordered_set<uint32_t> m_topicPartitions;
87 std::mt19937 m_randomNumberGenerator;
89 std::optional<std::shared_ptr<CongestionReporter>> m_congestionReporter;
91 std::deque<std::chrono::time_point<std::chrono::steady_clock>>
92 m_productionTimestamps;
95 std::chrono::seconds m_maxProductionTimestampAge = std::chrono::seconds(1);
97 const std::string &m_downstreamEdgeName;
99 std::chrono::time_point<std::chrono::steady_clock> m_idleSince;