commit 41cb63c936e1520def842f381334397a572bc1cd
parent 12fcc053b5bfd2c978ae6daf4a61922249b8e251
Author: default <nobody@localhost>
Date: Thu, 9 Jan 2025 19:21:06 +0100
Added some actor object caching.
Diffstat:
3 files changed, 20 insertions(+), 2 deletions(-)
diff --git a/activitypub.c b/activitypub.c
@@ -1194,10 +1194,20 @@ xs_dict *msg_actor(snac *snac)
xs *avtr = NULL;
xs *kid = NULL;
xs *f_bio = NULL;
- xs_dict *msg = msg_base(snac, "Person", snac->actor, NULL, NULL, NULL);
+ xs_dict *msg = NULL;
const char *p;
int n;
+ /* everybody loves some caching */
+ if (time(NULL) - object_mtime(snac->actor) < 6 * 3600 &&
+ valid_status(object_get(snac->actor, &msg))) {
+ snac_debug(snac, 1, xs_fmt("Returning cached actor %s", snac->actor));
+
+ return msg;
+ }
+
+ msg = msg_base(snac, "Person", snac->actor, NULL, NULL, NULL);
+
/* change the @context (is this really necessary?) */
ctxt = xs_list_append(ctxt, "https:/" "/www.w3.org/ns/activitystreams");
ctxt = xs_list_append(ctxt, "https:/" "/w3id.org/security/v1");
@@ -1330,6 +1340,10 @@ xs_dict *msg_actor(snac *snac)
msg = xs_dict_set(msg, "manuallyApprovesFollowers",
xs_stock(xs_is_true(manually) ? XSTYPE_TRUE : XSTYPE_FALSE));
+ /* cache it */
+ snac_debug(snac, 1, xs_fmt("Caching actor %s", snac->actor));
+ object_add_ow(snac->actor, msg);
+
return msg;
}
diff --git a/data.c b/data.c
@@ -336,6 +336,10 @@ int user_persist(snac *snac, int publish)
if (!nw)
publish = 0;
+ else {
+ /* uncache the actor object */
+ object_del(snac->actor);
+ }
}
}
}
diff --git a/snac.h b/snac.h
@@ -1,7 +1,7 @@
/* snac - A simple, minimalistic ActivityPub instance */
/* copyright (c) 2022 - 2025 grunfink et al. / MIT license */
-#define VERSION "2.68"
+#define VERSION "2.69-dev"
#define USER_AGENT "snac/" VERSION