See #689: added a task to refresh nodeinfo data on known domain periodically
This commit is contained in:
parent
b45cada689
commit
84e2f0af9f
|
@ -486,8 +486,15 @@ CELERY_BEAT_SCHEDULE = {
|
|||
"schedule": crontab(minute="0", hour="0"),
|
||||
"options": {"expires": 60 * 60 * 24},
|
||||
},
|
||||
"federation.refresh_nodeinfo_known_nodes": {
|
||||
"task": "federation.refresh_nodeinfo_known_nodes",
|
||||
"schedule": crontab(minute="0", hour="*"),
|
||||
"options": {"expires": 60 * 60},
|
||||
},
|
||||
}
|
||||
|
||||
NODEINFO_REFRESH_DELAY = env.int("NODEINFO_REFRESH_DELAY", default=3600 * 24)
|
||||
|
||||
JWT_AUTH = {
|
||||
"JWT_ALLOW_REFRESH": True,
|
||||
"JWT_EXPIRATION_DELTA": datetime.timedelta(days=7),
|
||||
|
|
|
@ -212,6 +212,22 @@ def update_domain_nodeinfo(domain):
|
|||
domain.save(update_fields=["nodeinfo", "nodeinfo_fetch_date", "service_actor"])
|
||||
|
||||
|
||||
@celery.app.task(name="federation.refresh_nodeinfo_known_nodes")
|
||||
def refresh_nodeinfo_known_nodes():
|
||||
"""
|
||||
Trigger a node info refresh on all nodes that weren't refreshed since
|
||||
settings.NODEINFO_REFRESH_DELAY
|
||||
"""
|
||||
limit = timezone.now() - datetime.timedelta(seconds=settings.NODEINFO_REFRESH_DELAY)
|
||||
candidates = models.Domain.objects.external().exclude(
|
||||
nodeinfo_fetch_date__gte=limit
|
||||
)
|
||||
names = candidates.values_list("name", flat=True)
|
||||
logger.info("Launching periodic nodeinfo refresh on %s domains", len(names))
|
||||
for domain_name in names:
|
||||
update_domain_nodeinfo.delay(domain_name=domain_name)
|
||||
|
||||
|
||||
def delete_qs(qs):
|
||||
label = qs.model._meta.label
|
||||
result = qs.delete()
|
||||
|
|
|
@ -216,6 +216,31 @@ def test_update_domain_nodeinfo_error(factories, r_mock, now):
|
|||
}
|
||||
|
||||
|
||||
def test_refresh_nodeinfo_known_nodes(settings, factories, mocker, now):
|
||||
settings.NODEINFO_REFRESH_DELAY = 666
|
||||
|
||||
refreshed = [
|
||||
factories["federation.Domain"](nodeinfo_fetch_date=None),
|
||||
factories["federation.Domain"](
|
||||
nodeinfo_fetch_date=now
|
||||
- datetime.timedelta(seconds=settings.NODEINFO_REFRESH_DELAY + 1)
|
||||
),
|
||||
]
|
||||
factories["federation.Domain"](
|
||||
nodeinfo_fetch_date=now
|
||||
- datetime.timedelta(seconds=settings.NODEINFO_REFRESH_DELAY - 1)
|
||||
)
|
||||
|
||||
update_domain_nodeinfo = mocker.patch.object(tasks.update_domain_nodeinfo, "delay")
|
||||
|
||||
tasks.refresh_nodeinfo_known_nodes()
|
||||
|
||||
assert update_domain_nodeinfo.call_count == len(refreshed)
|
||||
|
||||
for d in refreshed:
|
||||
update_domain_nodeinfo.assert_any_call(domain_name=d.name)
|
||||
|
||||
|
||||
def test_handle_purge_actors(factories, mocker):
|
||||
to_purge = factories["federation.Actor"]()
|
||||
keeped = [
|
||||
|
|
Loading…
Reference in New Issue