Selaa lähdekoodia

Always do a deferred fsck at startup.

grunfink 10 kuukautta sitten
vanhempi
sitoutus
7796bf39f0
4 muutettua tiedostoa jossa 20 lisäystä ja 0 poistoa
  1. 6 0
      activitypub.c
  2. 11 0
      data.c
  3. 2 0
      httpd.c
  4. 1 0
      snac.h

+ 6 - 0
activitypub.c

@@ -3376,6 +3376,12 @@ void process_queue_item(xs_dict *q_item)
     if (strcmp(type, "rss_hashtag_poll") == 0) {
         rss_poll_hashtags();
     }
+    else
+    if (strcmp(type, "fsck") == 0) {
+        srv_log(xs_fmt("started deferred data integrity check"));
+        data_fsck();
+        srv_log(xs_fmt("finished deferred data integrity check"));
+    }
     else
         srv_log(xs_fmt("unexpected q_item type '%s'", type));
 }

+ 11 - 0
data.c

@@ -3605,6 +3605,17 @@ void enqueue_collect_outbox(snac *user, const char *actor_id)
 }
 
 
+void enqueue_fsck(void)
+/* enqueues an fsck */
+{
+    xs *qmsg   = _new_qmsg("fsck", "", 0);
+    const char *ntid = xs_dict_get(qmsg, "ntid");
+    xs *fn     = xs_fmt("%s/queue/%s.json", srv_basedir, ntid);
+
+    qmsg = _enqueue_put(fn, qmsg);
+}
+
+
 int was_question_voted(snac *user, const char *id)
 /* returns true if the user voted in this poll */
 {

+ 2 - 0
httpd.c

@@ -805,6 +805,8 @@ static void *background_thread(void *arg)
 
     srv_log(xs_fmt("background thread started"));
 
+    enqueue_fsck();
+
     while (p_state->srv_running) {
         int cnt = 0;
 

+ 1 - 0
snac.h

@@ -299,6 +299,7 @@ void enqueue_webmention(const xs_dict *msg);
 void enqueue_notify_webhook(snac *user, const xs_dict *noti, int retries);
 void enqueue_collect_replies(snac *user, const char *post);
 void enqueue_collect_outbox(snac *user, const char *actor_id);
+void enqueue_fsck(void);
 
 int was_question_voted(snac *user, const char *id);