Skip to content

Commit bc23ee0

Browse files
committed
Fixed regression: LinkTable caching now works again.
1 parent 1493190 commit bc23ee0

3 files changed

Lines changed: 43 additions & 18 deletions

File tree

src/cache.c

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ typedef enum {
4040
int CACHE_SYSTEM_INIT = 0;
4141
int DATA_BLK_SZ = 0;
4242
int MAX_SEGBC = DEFAULT_MAX_SEGBC;
43+
char *META_DIR;
4344

4445
/* ----------------- Static variables ----------------------- */
4546

@@ -49,12 +50,6 @@ int MAX_SEGBC = DEFAULT_MAX_SEGBC;
4950
*/
5051
static pthread_mutex_t cf_lock;
5152

52-
53-
/**
54-
* \brief The metadata directory
55-
*/
56-
static char *META_DIR;
57-
5853
/**
5954
* \brief The data directory
6055
*/

src/cache.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,11 @@ extern int DATA_BLK_SZ;
8080
*/
8181
extern int MAX_SEGBC;
8282

83+
/**
84+
* \brief The metadata directory
85+
*/
86+
extern char *META_DIR;
87+
8388
/**
8489
* \brief initialise the cache system directories
8590
* \details This function basically sets up the following variables:

src/link.c

Lines changed: 37 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -266,16 +266,19 @@ static void LinkTable_fill(LinkTable *linktbl)
266266
}
267267

268268
/**
269-
* \brief fill in the gaps in a link table
269+
* \brief Reset invalid links in the link table
270270
*/
271271
static void LinkTable_invalid_reset(LinkTable *linktbl)
272272
{
273+
int j = 0;
273274
for (int i = 0; i < linktbl->num; i++) {
274275
Link *this_link = linktbl->links[i];
275276
if (this_link->type == LINK_INVALID) {
276277
this_link->type = LINK_UNINITIALISED_FILE;
278+
j++;
277279
}
278280
}
281+
fprintf(stderr, "LinkTable_invalid_reset(): %d invalid links\n", j);
279282
}
280283

281284
static void LinkTable_free(LinkTable *linktbl)
@@ -348,12 +351,14 @@ LinkTable *LinkTable_new(const char *url)
348351
transfer_blocking(curl);
349352
curl_easy_getinfo(curl, CURLINFO_RESPONSE_CODE, &http_resp);
350353
if (HTTP_temp_failure(http_resp)) {
351-
fprintf(stderr, "LinkTable_new(): URL: %s, HTTP %ld, \
352-
retrying later.\n", url, http_resp);
354+
fprintf(stderr,
355+
"LinkTable_new(): URL: %s, HTTP %ld, retrying later.\n",
356+
url, http_resp);
353357
sleep(HTTP_WAIT_SEC);
354358
} else if (http_resp != HTTP_OK) {
355-
fprintf(stderr, "LinkTable_new(): cannot retrieve URL: %s, \
356-
HTTP %ld\n", url, http_resp);
359+
fprintf(stderr,
360+
"LinkTable_new(): cannot retrieve URL: %s, HTTP %ld\n",
361+
url, http_resp);
357362
LinkTable_free(linktbl);
358363
curl_easy_cleanup(curl);
359364
return NULL;
@@ -380,6 +385,9 @@ HTTP %ld\n", url, http_resp);
380385
disk_linktbl = LinkTable_disk_open(unescaped_path);
381386
if (disk_linktbl) {
382387
/* Check if we need to update the link table */
388+
fprintf(stderr,
389+
"LinkTable_new(): disk_linktbl->num: %d, linktbl->num: %d\n",
390+
disk_linktbl->num, linktbl->num);
383391
if (disk_linktbl->num == linktbl->num) {
384392
LinkTable_free(linktbl);
385393
linktbl = disk_linktbl;
@@ -401,7 +409,9 @@ HTTP %ld\n", url, http_resp);
401409

402410
/* Save the link table */
403411
if (CACHE_SYSTEM_INIT) {
404-
LinkTable_disk_save(linktbl, unescaped_path);
412+
if (LinkTable_disk_save(linktbl, unescaped_path)) {
413+
exit_failure();
414+
}
405415
}
406416

407417
curl_free(unescaped_path);
@@ -419,8 +429,13 @@ HTTP %ld\n", url, http_resp);
419429

420430
static void LinkTable_disk_delete(const char *dirn)
421431
{
422-
char *metadirn = path_append("cache/meta/", dirn);
423-
char *path = path_append(metadirn, ".LinkTable");
432+
char *metadirn = path_append(META_DIR, dirn);
433+
char *path;
434+
if (metadirn[strnlen(metadirn, MAX_PATH_LEN)] == '/') {
435+
path = path_append(metadirn, ".LinkTable");
436+
} else {
437+
path = path_append(metadirn, "/.LinkTable");
438+
}
424439
if(unlink(path)) {
425440
fprintf(stderr, "LinkTable_disk_delete(): unlink(%s): %s\n", path,
426441
strerror(errno));
@@ -431,8 +446,13 @@ static void LinkTable_disk_delete(const char *dirn)
431446

432447
int LinkTable_disk_save(LinkTable *linktbl, const char *dirn)
433448
{
434-
char *metadirn = path_append("cache/meta/", dirn);
435-
char *path = path_append(metadirn, ".LinkTable");
449+
char *metadirn = path_append(META_DIR, dirn);
450+
char *path;
451+
if (metadirn[strnlen(metadirn, MAX_PATH_LEN)] == '/') {
452+
path = path_append(metadirn, ".LinkTable");
453+
} else {
454+
path = path_append(metadirn, "/.LinkTable");
455+
}
436456
FILE *fp = fopen(path, "w");
437457
free(metadirn);
438458

@@ -472,8 +492,13 @@ int LinkTable_disk_save(LinkTable *linktbl, const char *dirn)
472492

473493
LinkTable *LinkTable_disk_open(const char *dirn)
474494
{
475-
char *metadirn = path_append("cache/meta/", dirn);
476-
char *path = path_append(metadirn, ".LinkTable");
495+
char *metadirn = path_append(META_DIR, dirn);
496+
char *path;
497+
if (metadirn[strnlen(metadirn, MAX_PATH_LEN)] == '/') {
498+
path = path_append(metadirn, ".LinkTable");
499+
} else {
500+
path = path_append(metadirn, "/.LinkTable");
501+
}
477502
FILE *fp = fopen(path, "r");
478503
free(metadirn);
479504

0 commit comments

Comments
 (0)