summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar default2022-11-23 13:32:23 +0100
committerGravatar default2022-11-23 13:32:23 +0100
commit3e3e091cdb403a54013dde1cc8a103fae6b0147a (patch)
treea426c5cbc9e6ff056ff0a0caf4180fa8229aea59
parentUpdated TODO. (diff)
downloadsnac2-3e3e091cdb403a54013dde1cc8a103fae6b0147a.tar.gz
snac2-3e3e091cdb403a54013dde1cc8a103fae6b0147a.tar.xz
snac2-3e3e091cdb403a54013dde1cc8a103fae6b0147a.zip
New function db_upgrade().
-rw-r--r--data.c64
-rw-r--r--snac.h1
-rw-r--r--utils.c8
3 files changed, 65 insertions, 8 deletions
diff --git a/data.c b/data.c
index 21cf41e..bb87885 100644
--- a/data.c
+++ b/data.c
@@ -13,6 +13,10 @@
13#include <glob.h> 13#include <glob.h>
14#include <sys/stat.h> 14#include <sys/stat.h>
15 15
16double db_layout = 2.0;
17
18
19int db_upgrade(d_char **error);
16 20
17int srv_open(char *basedir) 21int srv_open(char *basedir)
18/* opens a server */ 22/* opens a server */
@@ -47,13 +51,10 @@ int srv_open(char *basedir)
47 char *host; 51 char *host;
48 char *prefix; 52 char *prefix;
49 char *dbglvl; 53 char *dbglvl;
50 char *layout;
51 double f = 0.0;
52 54
53 host = xs_dict_get(srv_config, "host"); 55 host = xs_dict_get(srv_config, "host");
54 prefix = xs_dict_get(srv_config, "prefix"); 56 prefix = xs_dict_get(srv_config, "prefix");
55 dbglvl = xs_dict_get(srv_config, "dbglevel"); 57 dbglvl = xs_dict_get(srv_config, "dbglevel");
56 layout = xs_dict_get(srv_config, "layout");
57 58
58 if (host == NULL || prefix == NULL) 59 if (host == NULL || prefix == NULL)
59 error = xs_str_new("ERROR: cannot get server data"); 60 error = xs_str_new("ERROR: cannot get server data");
@@ -67,10 +68,7 @@ int srv_open(char *basedir)
67 error = xs_fmt("DEBUG level set to %d from environment", dbglevel); 68 error = xs_fmt("DEBUG level set to %d from environment", dbglevel);
68 } 69 }
69 70
70 if (!layout || (f = xs_number_get(layout)) != 2.0) 71 ret = db_upgrade(&error);
71 error = xs_fmt("ERROR: unsupported old disk layout %f\n", f);
72 else
73 ret = 1;
74 } 72 }
75 73
76 } 74 }
@@ -1238,3 +1236,55 @@ void purge_all(void)
1238 } 1236 }
1239 } 1237 }
1240} 1238}
1239
1240
1241int db_upgrade(d_char **error)
1242{
1243 int ret = 1;
1244 int changed = 0;
1245 double f = 0.0;
1246
1247 do {
1248 char *layout = xs_dict_get(srv_config, "layout");
1249
1250 f = xs_number_get(layout);
1251
1252 if (f < 2.0) {
1253 *error = xs_fmt("ERROR: unsupported old disk layout %lf\n", f);
1254 ret = 0;
1255 break;
1256 }
1257/* else
1258 if (f < 2.1) {
1259 srv_log(xs_dup("upgrading db layout to version 2.1"));
1260
1261 xs *dir = xs_fmt("%s/object", srv_basedir);
1262 mkdir(dir, 0755);
1263
1264 xs *nv = xs_number_new(2.1);
1265 srv_config = xs_dict_set(srv_config, "layout", nv);
1266 changed++;
1267 }*/
1268 } while (f < db_layout);
1269
1270 if (f > db_layout) {
1271 *error = xs_fmt("ERROR: unknown future version %lf\n", f);
1272 ret = 0;
1273 }
1274
1275 if (changed) {
1276 /* upgrade the configuration file */
1277 xs *fn = xs_fmt("%s/server.json", srv_basedir);
1278 FILE *f;
1279
1280 if ((f = fopen(fn, "w")) != NULL) {
1281 xs *j = xs_json_dumps_pp(srv_config, 4);
1282 fwrite(j, strlen(j), 1, f);
1283 fclose(f);
1284 }
1285 else
1286 ret = 0;
1287 }
1288
1289 return ret;
1290}
diff --git a/snac.h b/snac.h
index 390d4c6..4221de5 100644
--- a/snac.h
+++ b/snac.h
@@ -5,6 +5,7 @@
5 5
6#define USER_AGENT "snac/" VERSION 6#define USER_AGENT "snac/" VERSION
7 7
8extern double db_layout;
8extern d_char *srv_basedir; 9extern d_char *srv_basedir;
9extern d_char *srv_config; 10extern d_char *srv_config;
10extern d_char *srv_baseurl; 11extern d_char *srv_baseurl;
diff --git a/utils.c b/utils.c
index 582a2f6..58c2246 100644
--- a/utils.c
+++ b/utils.c
@@ -18,7 +18,7 @@ const char *default_srv_config = "{"
18 "\"prefix\": \"\"," 18 "\"prefix\": \"\","
19 "\"address\": \"127.0.0.1\"," 19 "\"address\": \"127.0.0.1\","
20 "\"port\": 8001," 20 "\"port\": 8001,"
21 "\"layout\": 2," 21 "\"layout\": 0.0,"
22 "\"dbglevel\": 0," 22 "\"dbglevel\": 0,"
23 "\"queue_retry_minutes\": 2," 23 "\"queue_retry_minutes\": 2,"
24 "\"queue_retry_max\": 10," 24 "\"queue_retry_max\": 10,"
@@ -103,6 +103,9 @@ int initdb(const char *basedir)
103 103
104 srv_config = xs_json_loads(default_srv_config); 104 srv_config = xs_json_loads(default_srv_config);
105 105
106 xs *layout = xs_number_new(db_layout);
107 srv_config = xs_dict_set(srv_config, "layout", layout);
108
106 printf("Network address [%s]:\n", xs_dict_get(srv_config, "address")); 109 printf("Network address [%s]:\n", xs_dict_get(srv_config, "address"));
107 { 110 {
108 xs *i = xs_strip(xs_readline(stdin)); 111 xs *i = xs_strip(xs_readline(stdin));
@@ -148,6 +151,9 @@ int initdb(const char *basedir)
148 xs *udir = xs_fmt("%s/user", srv_basedir); 151 xs *udir = xs_fmt("%s/user", srv_basedir);
149 mkdir(udir, 0755); 152 mkdir(udir, 0755);
150 153
154 xs *odir = xs_fmt("%s/object", srv_basedir);
155 mkdir(odir, 0755);
156
151 xs *gfn = xs_fmt("%s/greeting.html", srv_basedir); 157 xs *gfn = xs_fmt("%s/greeting.html", srv_basedir);
152 if ((f = fopen(gfn, "w")) == NULL) { 158 if ((f = fopen(gfn, "w")) == NULL) {
153 printf("ERROR: cannot create '%s'\n", gfn); 159 printf("ERROR: cannot create '%s'\n", gfn);