commit afb970a
default
·
2022-11-26 04:05:57 +0000 UTC
parent 9867f32
purge_server() deletes using object_del().
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 }
M
httpd.c
+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