try {
// ZoneXFRTracker uses call by value for its args. That is essential, since we want copies so
// that ZoneXFRTracker gets values with the proper lifetime.
- std::thread theThread(ZoneXFR::zoneXFRTracker, fcz.d_params, generation);
+ std::thread theThread(FWCatZoneXFR::zoneXFRTracker, fcz.d_params, generation);
theThread.detach();
}
catch (const std::exception& e) {
return soaRecordContent;
}
-void ZoneXFR::preloadZoneFile(const DNSName& zoneName, std::shared_ptr<CatalogZone>& oldZone, uint32_t& refresh, uint64_t configGeneration, ZoneWaiter& waiter, Logr::log_t logger)
+void FWCatZoneXFR::preloadZoneFile(const DNSName& zoneName, std::shared_ptr<CatalogZone>& oldZone, uint32_t& refresh, uint64_t configGeneration, ZoneWaiter& waiter, Logr::log_t logger)
{
while (!d_params.soaRecordContent) {
/* if we received an empty sr, the zone was not really preloaded */
}
}
-bool ZoneXFR::zoneTrackerIteration(const DNSName& zoneName, std::shared_ptr<CatalogZone>& oldZone, uint32_t& refresh, bool& skipRefreshDelay, uint64_t configGeneration, ZoneWaiter& waiter, Logr::log_t logger)
+bool FWCatZoneXFR::zoneTrackerIteration(const DNSName& zoneName, std::shared_ptr<CatalogZone>& oldZone, uint32_t& refresh, bool& skipRefreshDelay, uint64_t configGeneration, ZoneWaiter& waiter, Logr::log_t logger)
{
// Don't hold on to oldZone, it well be re-assigned after sleep in the try block
oldZone = nullptr;
}
// coverity[pass_by_value] params is intended to be a copy, as this is the main function of a thread
-void ZoneXFR::zoneXFRTracker(ZoneXFRParams params, uint64_t configGeneration) // NOLINT(performance-unnecessary-value-param)
+void FWCatZoneXFR::zoneXFRTracker(ZoneXFRParams params, uint64_t configGeneration) // NOLINT(performance-unnecessary-value-param)
{
setThreadName("rec/fwcatzixfr");
bool isPreloaded = params.soaRecordContent != nullptr;
insertZoneTracker(zoneName, waiter);
- ZoneXFR xfrObject(params);
+ FWCatZoneXFR xfrObject(params);
xfrObject.preloadZoneFile(zoneName, oldZone, refresh, configGeneration, waiter, logger);
bool skipRefreshDelay = isPreloaded;
while (xfrObject.zoneTrackerIteration(zoneName, oldZone, refresh, skipRefreshDelay, configGeneration, waiter, logger)) {
static bool notifyZoneTracker(const DNSName& name);
static void insertZoneTracker(const DNSName& zoneName, ZoneWaiter& waiter);
static void clearZoneTracker(const DNSName& zoneName);
- static void zoneXFRTracker(ZoneXFRParams params, uint64_t configGeneration);
ZoneXFR(ZoneXFRParams params) :
d_params(std::move(params))
{}
-private:
- void preloadZoneFile(const DNSName& zoneName, std::shared_ptr<CatalogZone>& oldZone, uint32_t& refresh, uint64_t configGeneration, ZoneWaiter& waiter, Logr::log_t logger);
- bool zoneTrackerIteration(const DNSName& zoneName, std::shared_ptr<CatalogZone>& oldZone, uint32_t& refresh, bool& skipRefreshDelay, uint64_t configGeneration, ZoneWaiter& waiter, Logr::log_t logger);
ZoneXFRParams d_params;
static LockGuarded<std::multimap<DNSName, ZoneXFR::ZoneWaiter&>> condVars;
};
+class FWCatZoneXFR : ZoneXFR
+{
+public:
+ FWCatZoneXFR(ZoneXFRParams params) :
+ ZoneXFR(std::move(params))
+ {}
+
+ static void zoneXFRTracker(ZoneXFRParams params, uint64_t configGeneration);
+private:
+ void preloadZoneFile(const DNSName& zoneName, std::shared_ptr<CatalogZone>& oldZone, uint32_t& refresh, uint64_t configGeneration, ZoneWaiter& waiter, Logr::log_t logger);
+ bool zoneTrackerIteration(const DNSName& zoneName, std::shared_ptr<CatalogZone>& oldZone, uint32_t& refresh, bool& skipRefreshDelay, uint64_t configGeneration, ZoneWaiter& waiter, Logr::log_t logger);
+};
+
std::string reloadZoneConfiguration(bool yaml);