Fixed regression: LinkTable caching now works again.
This commit is contained in:
parent
1493190692
commit
bc23ee03a2
|
@ -40,6 +40,7 @@ typedef enum {
|
||||||
int CACHE_SYSTEM_INIT = 0;
|
int CACHE_SYSTEM_INIT = 0;
|
||||||
int DATA_BLK_SZ = 0;
|
int DATA_BLK_SZ = 0;
|
||||||
int MAX_SEGBC = DEFAULT_MAX_SEGBC;
|
int MAX_SEGBC = DEFAULT_MAX_SEGBC;
|
||||||
|
char *META_DIR;
|
||||||
|
|
||||||
/* ----------------- Static variables ----------------------- */
|
/* ----------------- Static variables ----------------------- */
|
||||||
|
|
||||||
|
@ -49,12 +50,6 @@ int MAX_SEGBC = DEFAULT_MAX_SEGBC;
|
||||||
*/
|
*/
|
||||||
static pthread_mutex_t cf_lock;
|
static pthread_mutex_t cf_lock;
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* \brief The metadata directory
|
|
||||||
*/
|
|
||||||
static char *META_DIR;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \brief The data directory
|
* \brief The data directory
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -80,6 +80,11 @@ extern int DATA_BLK_SZ;
|
||||||
*/
|
*/
|
||||||
extern int MAX_SEGBC;
|
extern int MAX_SEGBC;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \brief The metadata directory
|
||||||
|
*/
|
||||||
|
extern char *META_DIR;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \brief initialise the cache system directories
|
* \brief initialise the cache system directories
|
||||||
* \details This function basically sets up the following variables:
|
* \details This function basically sets up the following variables:
|
||||||
|
|
49
src/link.c
49
src/link.c
|
@ -266,16 +266,19 @@ static void LinkTable_fill(LinkTable *linktbl)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \brief fill in the gaps in a link table
|
* \brief Reset invalid links in the link table
|
||||||
*/
|
*/
|
||||||
static void LinkTable_invalid_reset(LinkTable *linktbl)
|
static void LinkTable_invalid_reset(LinkTable *linktbl)
|
||||||
{
|
{
|
||||||
|
int j = 0;
|
||||||
for (int i = 0; i < linktbl->num; i++) {
|
for (int i = 0; i < linktbl->num; i++) {
|
||||||
Link *this_link = linktbl->links[i];
|
Link *this_link = linktbl->links[i];
|
||||||
if (this_link->type == LINK_INVALID) {
|
if (this_link->type == LINK_INVALID) {
|
||||||
this_link->type = LINK_UNINITIALISED_FILE;
|
this_link->type = LINK_UNINITIALISED_FILE;
|
||||||
|
j++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
fprintf(stderr, "LinkTable_invalid_reset(): %d invalid links\n", j);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void LinkTable_free(LinkTable *linktbl)
|
static void LinkTable_free(LinkTable *linktbl)
|
||||||
|
@ -348,12 +351,14 @@ LinkTable *LinkTable_new(const char *url)
|
||||||
transfer_blocking(curl);
|
transfer_blocking(curl);
|
||||||
curl_easy_getinfo(curl, CURLINFO_RESPONSE_CODE, &http_resp);
|
curl_easy_getinfo(curl, CURLINFO_RESPONSE_CODE, &http_resp);
|
||||||
if (HTTP_temp_failure(http_resp)) {
|
if (HTTP_temp_failure(http_resp)) {
|
||||||
fprintf(stderr, "LinkTable_new(): URL: %s, HTTP %ld, \
|
fprintf(stderr,
|
||||||
retrying later.\n", url, http_resp);
|
"LinkTable_new(): URL: %s, HTTP %ld, retrying later.\n",
|
||||||
|
url, http_resp);
|
||||||
sleep(HTTP_WAIT_SEC);
|
sleep(HTTP_WAIT_SEC);
|
||||||
} else if (http_resp != HTTP_OK) {
|
} else if (http_resp != HTTP_OK) {
|
||||||
fprintf(stderr, "LinkTable_new(): cannot retrieve URL: %s, \
|
fprintf(stderr,
|
||||||
HTTP %ld\n", url, http_resp);
|
"LinkTable_new(): cannot retrieve URL: %s, HTTP %ld\n",
|
||||||
|
url, http_resp);
|
||||||
LinkTable_free(linktbl);
|
LinkTable_free(linktbl);
|
||||||
curl_easy_cleanup(curl);
|
curl_easy_cleanup(curl);
|
||||||
return NULL;
|
return NULL;
|
||||||
|
@ -380,6 +385,9 @@ HTTP %ld\n", url, http_resp);
|
||||||
disk_linktbl = LinkTable_disk_open(unescaped_path);
|
disk_linktbl = LinkTable_disk_open(unescaped_path);
|
||||||
if (disk_linktbl) {
|
if (disk_linktbl) {
|
||||||
/* Check if we need to update the link table */
|
/* Check if we need to update the link table */
|
||||||
|
fprintf(stderr,
|
||||||
|
"LinkTable_new(): disk_linktbl->num: %d, linktbl->num: %d\n",
|
||||||
|
disk_linktbl->num, linktbl->num);
|
||||||
if (disk_linktbl->num == linktbl->num) {
|
if (disk_linktbl->num == linktbl->num) {
|
||||||
LinkTable_free(linktbl);
|
LinkTable_free(linktbl);
|
||||||
linktbl = disk_linktbl;
|
linktbl = disk_linktbl;
|
||||||
|
@ -401,7 +409,9 @@ HTTP %ld\n", url, http_resp);
|
||||||
|
|
||||||
/* Save the link table */
|
/* Save the link table */
|
||||||
if (CACHE_SYSTEM_INIT) {
|
if (CACHE_SYSTEM_INIT) {
|
||||||
LinkTable_disk_save(linktbl, unescaped_path);
|
if (LinkTable_disk_save(linktbl, unescaped_path)) {
|
||||||
|
exit_failure();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
curl_free(unescaped_path);
|
curl_free(unescaped_path);
|
||||||
|
@ -419,8 +429,13 @@ HTTP %ld\n", url, http_resp);
|
||||||
|
|
||||||
static void LinkTable_disk_delete(const char *dirn)
|
static void LinkTable_disk_delete(const char *dirn)
|
||||||
{
|
{
|
||||||
char *metadirn = path_append("cache/meta/", dirn);
|
char *metadirn = path_append(META_DIR, dirn);
|
||||||
char *path = path_append(metadirn, ".LinkTable");
|
char *path;
|
||||||
|
if (metadirn[strnlen(metadirn, MAX_PATH_LEN)] == '/') {
|
||||||
|
path = path_append(metadirn, ".LinkTable");
|
||||||
|
} else {
|
||||||
|
path = path_append(metadirn, "/.LinkTable");
|
||||||
|
}
|
||||||
if(unlink(path)) {
|
if(unlink(path)) {
|
||||||
fprintf(stderr, "LinkTable_disk_delete(): unlink(%s): %s\n", path,
|
fprintf(stderr, "LinkTable_disk_delete(): unlink(%s): %s\n", path,
|
||||||
strerror(errno));
|
strerror(errno));
|
||||||
|
@ -431,8 +446,13 @@ static void LinkTable_disk_delete(const char *dirn)
|
||||||
|
|
||||||
int LinkTable_disk_save(LinkTable *linktbl, const char *dirn)
|
int LinkTable_disk_save(LinkTable *linktbl, const char *dirn)
|
||||||
{
|
{
|
||||||
char *metadirn = path_append("cache/meta/", dirn);
|
char *metadirn = path_append(META_DIR, dirn);
|
||||||
char *path = path_append(metadirn, ".LinkTable");
|
char *path;
|
||||||
|
if (metadirn[strnlen(metadirn, MAX_PATH_LEN)] == '/') {
|
||||||
|
path = path_append(metadirn, ".LinkTable");
|
||||||
|
} else {
|
||||||
|
path = path_append(metadirn, "/.LinkTable");
|
||||||
|
}
|
||||||
FILE *fp = fopen(path, "w");
|
FILE *fp = fopen(path, "w");
|
||||||
free(metadirn);
|
free(metadirn);
|
||||||
|
|
||||||
|
@ -472,8 +492,13 @@ int LinkTable_disk_save(LinkTable *linktbl, const char *dirn)
|
||||||
|
|
||||||
LinkTable *LinkTable_disk_open(const char *dirn)
|
LinkTable *LinkTable_disk_open(const char *dirn)
|
||||||
{
|
{
|
||||||
char *metadirn = path_append("cache/meta/", dirn);
|
char *metadirn = path_append(META_DIR, dirn);
|
||||||
char *path = path_append(metadirn, ".LinkTable");
|
char *path;
|
||||||
|
if (metadirn[strnlen(metadirn, MAX_PATH_LEN)] == '/') {
|
||||||
|
path = path_append(metadirn, ".LinkTable");
|
||||||
|
} else {
|
||||||
|
path = path_append(metadirn, "/.LinkTable");
|
||||||
|
}
|
||||||
FILE *fp = fopen(path, "r");
|
FILE *fp = fopen(path, "r");
|
||||||
free(metadirn);
|
free(metadirn);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue