[Xastir-dev] Map Cache patch 2004-12-04
Dan Brown
brown at brauhausdc.org
Sat Dec 4 11:17:43 EST 2004
Here's a small patch for the map_cache code - mostly documentation and
debugging fixes. This patch does add a couple new returns for potential
db access failures.
The patch is also available at:
http://brauhaus.org/~brown/xastir/map_cache_diffs_20041204
----------------------------------------------------------------
--- xastir/src/map_cache.h 2004-11-30 06:57:00.000000000 +0000
+++ xastir_20041202/src/map_cache.h 2004-12-03 19:29:14.000000000 +0000
@@ -27,15 +27,28 @@
#ifndef XASTIR_MAP_CACHE_H
#define XASTIR_MAP_CACHE_H
+// External function declarations
+// Saves file and puts entries into cache db
extern int map_cache_put( char * map_cache_url, char * map_cache_file );
+
+// Retrieves entry from cache db - checks existance of file
extern int map_cache_get( char * map_cache_url, char * map_cache_file );
+
+// Deletes cached map file and the entry from cache
extern int map_cache_del( char * map_cache_url );
+
+// Checks to see if map is expired based on date embedded in filename
extern int map_cache_expired( char * mc_filename, time_t mc_max_age );
+
+// Generates filename based on current time
extern char * map_cache_fileid();
-// Cache expiration times
+// Static variable definitions
+// These should probably be runtime options
+
+// Cache expiration times
// about 6mo
#define MC_MAX_FILE_AGE 6*30*24*60*60
--- xastir/src/map_cache.c 2004-11-30 06:57:00.000000000 +0000
+++ xastir_20041202/src/map_cache.c 2004-12-04 15:35:50.000000000 +0000
@@ -24,6 +24,15 @@
*/
+/*
+ * The code in this file is used to cache maps downloaded
+ * from tiger.census.gov, and to manage that cache. It was written
+ * to use Berkeley DB version 4 or better.
+ *
+ * Dan Brown N8YSZ.
+ *
+ */
+
// Need this one before the #ifdef in order to get the definition of
// USE_MAP_CACHE, if defined.
@@ -43,13 +52,13 @@
#include "snprintf.h"
#include "xastir.h"
#include "xa_config.h"
+#include "main.h"
#include "maps.h"
#include "map_cache.h"
#include <db.h>
-
int map_cache_put( char * map_cache_url, char * map_cache_file ){
// Puts an entry into the url->filename database
@@ -77,7 +86,7 @@
return (mc_file_stat);
}
- debug_level && printf ("map_cache_put: file_status.st_size %d\n",
+ ( debug_level & 512) && printf ("map_cache_put: file_status.st_size %d\n",
(int) file_status.st_size);
// Create handle to db
@@ -126,7 +135,7 @@
// check "CACHE_SPACE_USED" record in db
if (((mc_ret = dbp->get(dbp, NULL, &mc_key, &mc_data, 0)) == 0) && ( mc_data.data != NULL ) ) {
- debug_level && printf("map_cache_put: %s: key retrieved: data was %s.\n",
+ ( debug_level & 512 ) && printf("map_cache_put: %s: key retrieved: data was %s.\n",
(char *)mc_key.data,
(char *)mc_data.data);
@@ -134,14 +143,14 @@
mc_space_used=atoi( (char *)mc_data.data);
- debug_level && fprintf (stderr, "map_cache_put: CACHE_SPACE_USED = %.2f mb\n",
+ ( debug_level & 512 ) && fprintf (stderr, "map_cache_put: CACHE_SPACE_USED = %.2f mb\n",
(mc_space_used/1024/1024.0));
} else {
if (mc_data.data == NULL) {
- debug_level && printf ("map_cache_put: CACHE_SPACE_USED get returned null \n");
+ ( debug_level & 512 ) && printf ("map_cache_put: CACHE_SPACE_USED get returned null \n");
} else {
- debug_level && printf ("map_cache_put: Unable to check CACHE_SPACE_USED: %s\n",
+ ( debug_level & 512 ) && printf ("map_cache_put: Unable to check CACHE_SPACE_USED: %s\n",
db_strerror(mc_ret));
}
@@ -153,17 +162,17 @@
// xastir_snprintf(map_cache_file, MAX_FILENAME, "%s",(char *)mc_data.data);
- debug_level && fprintf (stderr, "map_cache_put: mc_space_used before = %d bytes file_status.st_size %d\n",
+ ( debug_level & 512 ) && fprintf (stderr, "map_cache_put: mc_space_used before = %d bytes file_status.st_size %d\n",
mc_space_used,
(int) file_status.st_size);
mc_space_used += (int) file_status.st_size;
- debug_level && fprintf (stderr, "map_cache_put: mc_space_used after = %d bytes \n",
+ ( debug_level & 512 ) && fprintf (stderr, "map_cache_put: mc_space_used after = %d bytes \n",
mc_space_used);
if ( mc_space_used > MAP_CACHE_SPACE_LIMIT) {
- debug_level && fprintf (stderr, "map_cache_put: Warning cache space used: %.2f mb NOW OVER LIMIT: %.2f mb\n",
+ ( debug_level & 512 ) && fprintf (stderr, "map_cache_put: Warning cache space used: %.2f mb NOW OVER LIMIT: %.2f mb\n",
(mc_space_used/1024/1024.0),
(MAP_CACHE_SPACE_LIMIT/1024/1024.0));
@@ -187,7 +196,7 @@
xastir_snprintf(mc_buf, sizeof(mc_buf), "%d", mc_space_used);
- debug_level && fprintf (stderr, "map_cache_put: mc_buf: %s len %d\n",
+ ( debug_level & 512 ) && fprintf (stderr, "map_cache_put: mc_buf: %s len %d\n",
mc_buf,sizeof(mc_buf));
mc_data.data = mc_buf ;
@@ -196,12 +205,18 @@
// put
if ((mc_ret = dbp->put(dbp, NULL, &mc_key, &mc_data, 0)) == 0) {
- debug_level && fprintf(stderr, "map_cache_put: %s: key stored.\n", (char *)mc_key.data);
+
+ ( debug_level & 512 ) && fprintf(stderr, "map_cache_put: %s: key stored.\n", (char *)mc_key.data);
} else {
-
- dbp->err(dbp, mc_ret, "DB->put");
- db_strerror(mc_ret);
+
+ if ( debug_level & 512 ) {
+ dbp->err(dbp, mc_ret, "DB->put");
+ }
+// db_strerror(mc_ret);
+
+ return(mc_ret);
+
}
}
@@ -221,12 +236,13 @@
// do the actual put
if ((mc_ret = dbp->put(dbp, NULL, &mc_key, &mc_data, 0)) == 0) {
- debug_level && fprintf(stderr, "map_cache_put: %s: key stored.\n", (char *)mc_key.data);
+ ( debug_level & 512 ) && fprintf(stderr, "map_cache_put: %s: key stored.\n", (char *)mc_key.data);
} else {
- dbp->err(dbp, mc_ret, "DB->put");
- db_strerror(mc_ret);
+ ( debug_level & 512 ) ? dbp->err(dbp, mc_ret, "DB->put") : 0 ;
+ // db_strerror(mc_ret);
+ return(mc_ret);
}
-
+ statusline("Map now cached",1);
// close the db
if ((mc_t_ret = dbp->close(dbp, 0)) != 0 && mc_ret == 0) {
@@ -272,16 +288,16 @@
if ((mc_ret = dbp->open(dbp,
mc_database_filename, NULL, DB_CREATE, DB_BTREE, 0664)) != 0) {
- dbp->err(dbp, mc_ret, "%s", mc_database_filename);
- db_strerror(mc_ret);
+ ( debug_level & 512 ) && dbp->err(dbp, mc_ret, "%s", mc_database_filename);
+ // db_strerror(mc_ret);
}
#elif (DB_VERSION_MAJOR==4 && DB_VERSION_MINOR>=1 )
if ((mc_ret = dbp->open(dbp,
NULL,mc_database_filename, NULL, DB_CREATE, DB_BTREE, 0664)) != 0) {
- dbp->err(dbp, mc_ret, "%s", mc_database_filename);
- db_strerror(mc_ret);
+ ( debug_level & 512 ) ? dbp->err(dbp, mc_ret, "%s", mc_database_filename) : 0 ;
+ // db_strerror(mc_ret);
}
#endif /** DB_VERSION Check **/
@@ -291,70 +307,74 @@
mc_key.data=map_cache_url ;
mc_key.size=strlen(map_cache_url);
+
+ statusline("Checking Map Cache",1);
if ((mc_ret = dbp->get(dbp, NULL, &mc_key, &mc_data, 0)) == 0) {
- debug_level && fprintf(stderr, "map_cache_get: %s: key retrieved: data was %s.\n",
+ ( debug_level & 512 ) && fprintf(stderr, "map_cache_get: %s: key retrieved: data was %s.\n",
(char *)mc_key.data, (char *)mc_data.data);
xastir_snprintf(map_cache_file, MAX_FILENAME, "%s",(char *)mc_data.data);
// check age of file - based on name - delete if too old
if ( (mc_ret=map_cache_expired(map_cache_file, (MC_MAX_FILE_AGE)))){
- debug_level && fprintf(stderr, "map_cache_get: deleting expired key: %s.\n",
+ ( debug_level & 512 ) && fprintf(stderr, "map_cache_get: deleting expired key: %s.\n",
(char *)mc_key.data);
map_cache_del(map_cache_url);
return (mc_ret);
}
// check if the file exists
- debug_level && fprintf(stderr,"map_cache_get: checking for existance of map_cache_file: %s.\n",
+ ( debug_level & 512 ) && fprintf(stderr,"map_cache_get: checking for existance of map_cache_file: %s.\n",
map_cache_file);
mc_file_stat=stat(map_cache_file, &file_status);
- debug_level && fprintf(stderr,"map_cache_get: map_cache_file %s stat returned:%d.\n",
+ ( debug_level & 512 ) && fprintf(stderr,"map_cache_get: map_cache_file %s stat returned:%d.\n",
map_cache_file,
mc_file_stat);
if ( mc_file_stat == -1 ) {
//
- debug_level && fprintf(stderr,"map_cache_get: attempting delete map_cache_file %s \n",
+ ( debug_level & 512 ) && fprintf(stderr,"map_cache_get: attempting delete map_cache_file %s \n",
map_cache_file);
if ((mc_ret = dbp->del(dbp, NULL, &mc_key, 0)) == 0) {
- debug_level && fprintf(stderr, "map_cache_get: File stat failed %s: key was deleted.\n",
+ ( debug_level & 512 ) && fprintf(stderr, "map_cache_get: File stat failed %s: key was deleted.\n",
(char *)mc_key.data);
}
else {
- dbp->err(dbp, mc_ret, "DB->del");
- db_strerror(mc_ret);
+ ( debug_level & 512 ) ? dbp->err(dbp, mc_ret, "DB->del"):0;
+ // db_strerror(mc_ret);
}
if ((mc_t_ret = dbp->close(dbp, 0)) != 0 && mc_ret == 0){
mc_ret = mc_t_ret;
- db_strerror(mc_ret);
+ // db_strerror(mc_ret);
}
- db_strerror(mc_ret);
+ // db_strerror(mc_ret);
// Return the file stat if there was a file problem
return (mc_file_stat);
} else {
if ((mc_t_ret = dbp->close(dbp, 0)) != 0 && mc_ret == 0){
mc_ret = mc_t_ret;
- db_strerror(mc_ret);
+ // db_strerror(mc_ret);
}
// If we made it here all is good
+ statusline("Loading Cached Map",1);
return (0);
}
} else {
- debug_level && fprintf(stderr, "map_cache_get: Get failed. Key was: %s.\n",
+ ( debug_level & 512 ) && fprintf(stderr, "map_cache_get: Get failed. Key was: %s.\n",
(char *)mc_key.data);
- dbp->err(dbp, mc_ret, "DB->get");
- db_strerror(mc_ret);
+ ( debug_level & 512 ) ? dbp->err(dbp, mc_ret, "DB->get"):0;
+ // db_strerror(mc_ret);
// there was some problem getting things from the db
// return the return from the get
-
+
+ statusline("Map not found in cache...",1);
return (mc_ret);
}
/** end map_cache_get **/
@@ -397,15 +417,15 @@
if ((mc_ret = dbp->open(dbp,
mc_database_filename, NULL, DB_CREATE, DB_BTREE, 0664)) != 0) {
- dbp->err(dbp, mc_ret, "%s", mc_database_filename);
- db_strerror(mc_ret);
+ ( debug_level & 512 ) ? dbp->err(dbp, mc_ret, "%s", mc_database_filename):0;
+ // db_strerror(mc_ret);
}
#elif (DB_VERSION_MAJOR==4 && DB_VERSION_MINOR>=1 )
if ((mc_ret = dbp->open(dbp,
NULL,mc_database_filename, NULL, DB_CREATE, DB_BTREE, 0664)) != 0) {
- dbp->err(dbp, mc_ret, "%s", mc_database_filename);
- db_strerror(mc_ret);
+ ( debug_level & 512 ) ? dbp->err(dbp, mc_ret, "%s", mc_database_filename):0;
+ // db_strerror(mc_ret);
}
#endif /** DB_VERSION Check **/
@@ -419,7 +439,7 @@
// Try to get the key from the cache
if ((mc_ret = dbp->get(dbp, NULL, &mc_key, &mc_data, 0)) == 0) {
- debug_level && fprintf(stderr, "map_cache_del: %s: key retrieved: data was %s.\n",
+ ( debug_level & 512 ) && fprintf(stderr, "map_cache_del: %s: key retrieved: data was %s.\n",
(char *)mc_key.data,
(char *)mc_data.data);
@@ -432,7 +452,7 @@
mc_file_stat=stat(mc_delete_file, &file_status);
- debug_level && fprintf(stderr,"map_cache_del: file %s stat returned:%d.\n",
+ ( debug_level & 512 ) && fprintf(stderr,"map_cache_del: file %s stat returned:%d.\n",
(char *) mc_data.data,
mc_file_stat);
if (mc_file_stat == 0 ){
@@ -449,7 +469,7 @@
// check "CACHE_SPACE_USED" record in db
if (((mc_ret = dbp->get(dbp, NULL, &mc_size_key, &mc_size_data, 0)) == 0) && ( mc_size_data.data != NULL ) ) {
- debug_level && fprintf(stderr, "map_cache_del: %s: key retrieved: data was %s.\n",
+ ( debug_level & 512 ) && fprintf(stderr, "map_cache_del: %s: key retrieved: data was %s.\n",
(char *)mc_size_key.data,
(char *)mc_size_data.data);
@@ -457,25 +477,25 @@
mc_space_used=atoi( (char *)mc_size_data.data);
- debug_level && fprintf (stderr, "map_cache_del: CACHE_SPACE_USED = %.2f mb\n",
+ ( debug_level & 512 ) && fprintf (stderr, "map_cache_del: CACHE_SPACE_USED = %.2f mb\n",
(mc_space_used/1024/1024.0));
} else {
if (mc_size_data.data == NULL) {
- debug_level && fprintf (stderr, "map_cache_del: CACHE_SPACE_USED get returned null \n");
+ ( debug_level & 512 ) && fprintf (stderr, "map_cache_del: CACHE_SPACE_USED get returned null \n");
} else {
- debug_level && fprintf (stderr, "map_cache_del: Unable to check CACHE_SPACE_USED: %s\n",
+ ( debug_level & 512 ) && fprintf (stderr, "map_cache_del: Unable to check CACHE_SPACE_USED: %s\n",
db_strerror(mc_ret));
}
}
- debug_level && fprintf (stderr, "map_cache_del: mc_space_used before = %d bytes file_status.st_size %d\n",
+ ( debug_level & 512 ) && fprintf (stderr, "map_cache_del: mc_space_used before = %d bytes file_status.st_size %d\n",
mc_space_used,
(int) file_status.st_size);
mc_ret = unlink( mc_delete_file );
- debug_level && fprintf(stderr,"map_cache_del: file %s unlink returned:%d.\n",
+ ( debug_level & 512 ) && fprintf(stderr,"map_cache_del: file %s unlink returned:%d.\n",
mc_delete_file,
mc_ret);
@@ -491,7 +511,7 @@
mc_space_used = 0;
}
- debug_level && fprintf (stderr, "map_cache_del: unlink succeeded mc_space_used = %d bytes \n",
+ ( debug_level & 512 ) && fprintf (stderr, "map_cache_del: unlink succeeded mc_space_used = %d bytes \n",
mc_space_used);
memset(&mc_size_key, 0, sizeof(mc_size_key));
@@ -503,7 +523,7 @@
xastir_snprintf(mc_buf, sizeof(mc_buf), "%d", mc_space_used);
- debug_level && fprintf (stderr, "map_cache_del: mc_buf: %s len %d\n",
+ ( debug_level & 512 ) && fprintf (stderr, "map_cache_del: mc_buf: %s len %d\n",
mc_buf,sizeof(mc_buf));
mc_size_data.data = mc_buf ;
@@ -512,16 +532,16 @@
// put
if ((mc_ret = dbp->put(dbp, NULL, &mc_size_key, &mc_size_data, 0)) == 0) {
- debug_level && printf("map_cache_del: %s: key stored.\n",
+ ( debug_level & 512 ) && printf("map_cache_del: %s: key stored.\n",
(char *)mc_size_key.data);
} else {
- dbp->err(dbp, mc_ret, "DB->put");
- db_strerror(mc_ret);
+ ( debug_level & 512 ) ? dbp->err(dbp, mc_ret, "DB->put"):0;
+ // db_strerror(mc_ret);
}
} else {
- debug_level && printf ("map_cache_del: unlink failed mc_space_used = %d bytes \n",
+ ( debug_level & 512 ) && printf ("map_cache_del: unlink failed mc_space_used = %d bytes \n",
mc_space_used);
return(mc_ret) ;
}
@@ -536,26 +556,26 @@
// remove entry from cache url->filename database
if ((mc_ret = dbp->del(dbp, NULL, &mc_key, 0)) == 0){
- debug_level && fprintf(stderr, "map_cache_del: %s: key was deleted.\n",
+ ( debug_level & 512 ) && fprintf(stderr, "map_cache_del: %s: key was deleted.\n",
(char *)mc_key.data);
}
else {
- dbp->err(dbp, mc_ret, "DB->del");
- db_strerror(mc_ret);
+ ( debug_level & 512 ) ? dbp->err(dbp, mc_ret, "DB->del"):0;
+ // db_strerror(mc_ret);
}
// close the db.
if ((mc_t_ret = dbp->close(dbp, 0)) != 0 && mc_ret == 0){
mc_ret = mc_t_ret;
- db_strerror(mc_ret);
+ // db_strerror(mc_ret);
}
return (0);
} else {
- dbp->err(dbp, mc_ret, "DB->del");
- db_strerror(mc_ret);
+ ( debug_level & 512 ) ? dbp->err(dbp, mc_ret, "DB->del"):0;
+ // db_strerror(mc_ret);
return (mc_ret);
}
@@ -613,18 +633,18 @@
*(--mc_time_buf_tmp) ='\0';
-// debug_level && fprintf(stderr, "map_cache_expired: mc_filename is: %s mc_time_buf is: %s.\n", mc_filename, mc_time_buf);
+// ( debug_level & 512 ) && fprintf(stderr, "map_cache_expired: mc_filename is: %s mc_time_buf is: %s.\n", mc_filename, mc_time_buf);
mc_file_age=(time(&mc_t) - ((time_t) atoi(mc_time_buf)) );
if ( mc_file_age < mc_max_age ) {
- debug_level && fprintf(stderr, "map_cache_expired: mc_filename %s is NOT expired. mc_time_buf is: %s.\n",
+ ( debug_level & 512 ) && fprintf(stderr, "map_cache_expired: mc_filename %s is NOT expired. mc_time_buf is: %s.\n",
mc_filename,
mc_time_buf);
free(mc_time_buf);
return (0);
} else {
- debug_level && fprintf(stderr, "map_cache_expired: mc_filename %s IS expired. mc_time_buf is: %s.\n",
+ ( debug_level & 512 ) && fprintf(stderr, "map_cache_expired: mc_filename %s IS expired. mc_time_buf is: %s.\n",
mc_filename,
mc_time_buf);
free(mc_time_buf);
@@ -644,11 +664,13 @@
int mc_check_space_used () {
return(0);
+
}
int mc_update_space_used () {
return(0);
+
}
--
Dan Brown
brown at brauhausdc.org
More information about the Xastir-dev
mailing list