snac2

Fork of https://codeberg.org/grunfink/snac2
git clone https://git.inz.fi/snac2
Log | Files | Refs | README | LICENSE

commit 41cb63c936e1520def842f381334397a572bc1cd
parent 12fcc053b5bfd2c978ae6daf4a61922249b8e251
Author: default <nobody@localhost>
Date:   Thu,  9 Jan 2025 19:21:06 +0100

Added some actor object caching.

Diffstat:
Mactivitypub.c | 16+++++++++++++++-
Mdata.c | 4++++
Msnac.h | 2+-
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