commit afb970a

default  ·  2022-11-26 04:05:57 +0000 UTC
parent 9867f32
purge_server() deletes using object_del().
2 files changed,  +32, -16
M data.c
M data.c
+31, -15
  1@@ -380,7 +380,6 @@ d_char *_object_fn_by_md5(const char *md5)
  2 d_char *_object_fn(const char *id)
  3 {
  4     xs *md5 = xs_md5_hex(id, strlen(id));
  5-
  6     return _object_fn_by_md5(md5);
  7 }
  8 
  9@@ -425,7 +424,6 @@ int object_get(const char *id, d_char **obj, const char *type)
 10 /* returns a stored object, optionally of the requested type */
 11 {
 12     xs *md5 = xs_md5_hex(id, strlen(id));
 13-
 14     return object_get_by_md5(md5, obj, type);
 15 }
 16 
 17@@ -473,18 +471,18 @@ int object_add(const char *id, d_char *obj)
 18 }
 19 
 20 
 21-int object_del(const char *id)
 22-/* deletes an object */
 23+int object_del_by_md5(const char *md5)
 24+/* deletes an object by its md5 */
 25 {
 26     int status = 404;
 27-    xs *fn     = _object_fn(id);
 28+    xs *fn     = _object_fn_by_md5(md5);
 29 
 30     if (fn != NULL && unlink(fn) != -1) {
 31         status = 200;
 32 
 33         /* also delete associated indexes */
 34-        xs *spec = _object_fn(id);
 35-        spec = xs_replace_i(spec, ".json", "*.idx");
 36+        xs *spec  = xs_dup(fn);
 37+        spec      = xs_replace_i(spec, ".json", "*.idx");
 38         xs *files = xs_glob(spec, 0, 0);
 39         char *p, *v;
 40 
 41@@ -495,12 +493,20 @@ int object_del(const char *id)
 42         }
 43     }
 44 
 45-    srv_debug(0, xs_fmt("object_del %s %d", id, status));
 46+    srv_debug(0, xs_fmt("object_del %s %d", fn, status));
 47 
 48     return status;
 49 }
 50 
 51 
 52+int object_del(const char *id)
 53+/* deletes an object */
 54+{
 55+    xs *md5 = xs_md5_hex(id, strlen(id));
 56+    return object_del_by_md5(md5);
 57+}
 58+
 59+
 60 d_char *object_children(const char *id)
 61 /* returns the list of an object's children */
 62 {
 63@@ -1521,13 +1527,12 @@ d_char *dequeue(snac *snac, char *fn)
 64 }
 65 
 66 
 67-static void _purge_file(const char *fn, int days, int n_link)
 68-/* purge fn if it's older than days and has less than n_link hard links */
 69+static void _purge_file(const char *fn, int days)
 70+/* purge fn if it's older than days */
 71 {
 72     time_t mt = time(NULL) - days * 24 * 3600;
 73-    int nl;
 74 
 75-    if (mtime_nl(fn, &nl) < mt && nl < n_link) {
 76+    if (mtime(fn) < mt) {
 77         /* older than the minimum time: delete it */
 78         unlink(fn);
 79         srv_debug(1, xs_fmt("purged %s", fn));
 80@@ -1545,7 +1550,7 @@ static void _purge_subdir(snac *snac, const char *subdir, int days)
 81 
 82         p = list;
 83         while (xs_list_iter(&p, &v))
 84-            _purge_file(v, days, XS_ALL);
 85+            _purge_file(v, days);
 86     }
 87 }
 88 
 89@@ -1558,15 +1563,26 @@ void purge_server(void)
 90     xs *dirs = xs_glob(spec, 0, 0);
 91     char *p, *v;
 92 
 93+    time_t mt = time(NULL) - tpd * 24 * 3600;
 94+
 95     p = dirs;
 96     while (xs_list_iter(&p, &v)) {
 97-        xs *spec2 = xs_fmt("%s/" "*", v);
 98+        xs *spec2 = xs_fmt("%s/" "*.json", v);
 99         xs *files = xs_glob(spec2, 0, 0);
100         char *p2, *v2;
101 
102         p2 = files;
103         while (xs_list_iter(&p2, &v2)) {
104-            _purge_file(v2, tpd, 2);
105+            int n_link;
106+
107+            /* old and with no hard links? */
108+            if (mtime_nl(v2, &n_link) < mt && n_link < 2) {
109+                xs *s1    = xs_replace(v2, ".json", "");
110+                xs *l     = xs_split(s1, "/");
111+                char *md5 = xs_list_get(l, -1);
112+
113+                object_del_by_md5(md5);
114+            }
115         }
116     }
117 }
+1, -1
1@@ -222,7 +222,7 @@ static void *queue_thread(void *arg)
2     time_t purge_time;
3 
4     /* first purge time */
5-    purge_time = time(NULL) + 15 * 60;
6+    purge_time = time(NULL) + 10 * 60;
7 
8     srv_log(xs_fmt("queue thread start"));
9