Sfoglia il codice sorgente

Added some actor object caching.

default 1 anno fa
parent
commit
41cb63c936
3 ha cambiato i file con 20 aggiunte e 2 eliminazioni
  1. 15 1
      activitypub.c
  2. 4 0
      data.c
  3. 1 1
      snac.h

+ 15 - 1
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;
 }
 

+ 4 - 0
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);
+                }
             }
         }
     }

+ 1 - 1
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