TransientDomainInfo tdi;
container->get(info.id, tdi);
info.notified_serial = tdi.notified_serial;
+ info.last_check = tdi.last_check;
}
}
container->get(info.id, tdi);
// Only remove the in-memory value if it has not been modified since the
// DomainInfo data was set up.
- if (tdi.notified_serial == info.notified_serial) {
+ if (tdi.notified_serial == info.notified_serial && tdi.last_check == info.last_check) {
container->remove(info.id);
}
}
void LMDBBackend::setStale(uint32_t domain_id)
{
- genChangeDomain(domain_id, [](DomainInfo& di) {
- di.last_check = 0;
- });
+ setLastCheckTime(domain_id, 0);
}
void LMDBBackend::setFresh(uint32_t domain_id)
{
- genChangeDomain(domain_id, [](DomainInfo& di) {
- di.last_check = time(nullptr);
- });
+ setLastCheckTime(domain_id, time(nullptr));
+}
+
+void LMDBBackend::setLastCheckTime(uint32_t domain_id, time_t last_check)
+{
+ if (d_write_notification_update) {
+ genChangeDomain(domain_id, [last_check](DomainInfo& info) {
+ info.last_check = last_check;
+ });
+ return;
+ }
+
+ DomainInfo info;
+ if (findDomain(domain_id, info)) {
+ auto container = s_transient_domain_info.write_lock();
+ TransientDomainInfo tdi;
+ container->get(info.id, tdi);
+ tdi.last_check = last_check;
+ container->update(info.id, tdi);
+ }
}
void LMDBBackend::getUpdatedPrimaries(vector<DomainInfo>& updatedDomains, std::unordered_set<DNSName>& catalogs, CatalogHashMap& catalogHashes)
if (findDomain(domain_id, info)) {
auto container = s_transient_domain_info.write_lock();
TransientDomainInfo tdi;
- // will need container->get(info.id, tdi); once TransientDomainInfo grows
- // more fields.
+ container->get(info.id, tdi);
tdi.notified_serial = serial;
container->update(info.id, tdi);
}
void consolidateDomainInfo(DomainInfo& info) const;
void writeDomainInfo(const DomainInfo& info);
+ void setLastCheckTime(uint32_t domain_id, time_t last_check);
+
void getAllDomainsFiltered(vector<DomainInfo>* domains, const std::function<bool(DomainInfo&)>& allow);
bool getSerial(DomainInfo& di);
// database.
struct TransientDomainInfo
{
+ time_t last_check{};
uint32_t notified_serial{};
};
// Cache of DomainInfo notified_serial values