commit ef7b666
grunfink
·
2026-06-24 12:54:45 +0000 UTC
parent 778046f
Implemented semi-random forward_secs in enqueue_object_request() or enqueue_actor_refresh(). If forward_secs is a negative value in these functions, it's used as the modulo of a hash of the user id. This way, a refresh storm of the same object by all users is somewhat distributed in time.
2 files changed,
+12,
-2
M
data.c
+2,
-2
1@@ -3077,7 +3077,7 @@ int process_input_message(snac *snac, const xs_dict *msg, const xs_dict *req)
2 else {
3 /* actor / key mismatch: don't accept blindly, but request an actor update
4 from the original source, as the Update may come from a relay and be legit */
5- enqueue_actor_refresh(snac, actor, 0);
6+ enqueue_actor_refresh(snac, actor, -10);
7
8 snac_log(snac, xs_fmt("Update: mismatched actor '%s' and key '%s'", actor, key_id));
9 }
10@@ -3097,7 +3097,7 @@ int process_input_message(snac *snac, const xs_dict *msg, const xs_dict *req)
11 else
12 if (strcmp(atto, key_id) != 0) {
13 /* actor / key mismatch: request the object from the original source */
14- enqueue_object_request(snac, id, 0);
15+ enqueue_object_request(snac, id, -10);
16
17 snac_log(snac, xs_fmt("Update: mismatched attributedTo '%s' and key '%s'", atto, key_id));
18 }
M
data.c
+10,
-0
1@@ -3858,6 +3858,11 @@ void enqueue_close_question(snac *user, const char *id, int end_secs)
2 void enqueue_object_request(snac *user, const char *id, int forward_secs)
3 /* enqueues the request of an object in the future */
4 {
5+ if (forward_secs < 0) {
6+ /* set it to a somewhat random delay */
7+ forward_secs = xs_hash_func(user->uid, strlen(user->uid)) % -forward_secs;
8+ }
9+
10 xs *qmsg = _new_qmsg("object_request", id, 0);
11 xs *ntid = tid(forward_secs);
12 xs *fn = xs_fmt("%s/queue/%s.json", user->basedir, ntid);
13@@ -3886,6 +3891,11 @@ void enqueue_verify_links(snac *user)
14 void enqueue_actor_refresh(snac *user, const char *actor, int forward_secs)
15 /* enqueues an actor refresh */
16 {
17+ if (forward_secs < 0) {
18+ /* set it to a somewhat random delay */
19+ forward_secs = xs_hash_func(user->uid, strlen(user->uid)) % -forward_secs;
20+ }
21+
22 xs *qmsg = _new_qmsg("actor_refresh", "", 0);
23 xs *ntid = tid(forward_secs);
24 xs *fn = xs_fmt("%s/queue/%s.json", user->basedir, ntid);