commit 41cb63c

default  ·  2025-01-09 18:21:06 +0000 UTC
parent 12fcc05
Added some actor object caching.
3 files changed,  +20, -2
M data.c
M snac.h
+15, -1
 1@@ -1194,10 +1194,20 @@ xs_dict *msg_actor(snac *snac)
 2     xs *avtr     = NULL;
 3     xs *kid      = NULL;
 4     xs *f_bio    = NULL;
 5-    xs_dict *msg = msg_base(snac, "Person", snac->actor, NULL, NULL, NULL);
 6+    xs_dict *msg = NULL;
 7     const char *p;
 8     int n;
 9 
10+    /* everybody loves some caching */
11+    if (time(NULL) - object_mtime(snac->actor) < 6 * 3600 &&
12+        valid_status(object_get(snac->actor, &msg))) {
13+        snac_debug(snac, 1, xs_fmt("Returning cached actor %s", snac->actor));
14+
15+        return msg;
16+    }
17+
18+    msg = msg_base(snac, "Person", snac->actor, NULL, NULL, NULL);
19+
20     /* change the @context (is this really necessary?) */
21     ctxt = xs_list_append(ctxt, "https:/" "/www.w3.org/ns/activitystreams");
22     ctxt = xs_list_append(ctxt, "https:/" "/w3id.org/security/v1");
23@@ -1330,6 +1340,10 @@ xs_dict *msg_actor(snac *snac)
24     msg = xs_dict_set(msg, "manuallyApprovesFollowers",
25         xs_stock(xs_is_true(manually) ? XSTYPE_TRUE : XSTYPE_FALSE));
26 
27+    /* cache it */
28+    snac_debug(snac, 1, xs_fmt("Caching actor %s", snac->actor));
29+    object_add_ow(snac->actor, msg);
30+
31     return msg;
32 }
33 
M data.c
+4, -0
 1@@ -336,6 +336,10 @@ int user_persist(snac *snac, int publish)
 2 
 3                 if (!nw)
 4                     publish = 0;
 5+                else {
 6+                    /* uncache the actor object */
 7+                    object_del(snac->actor);
 8+                }
 9             }
10         }
11     }
M snac.h
+1, -1
1@@ -1,7 +1,7 @@
2 /* snac - A simple, minimalistic ActivityPub instance */
3 /* copyright (c) 2022 - 2025 grunfink et al. / MIT license */
4 
5-#define VERSION "2.68"
6+#define VERSION "2.69-dev"
7 
8 #define USER_AGENT "snac/" VERSION
9