[PVFS2-CVS] commit by neill in pvfs2/src/io/trove/trove-dbpf:
dbpf-dspace-db-cache.c dbpf-dspace.c dbpf-keyval-db-cache.c
dbpf-mgmt.c
CVS commit program
cvs at parl.clemson.edu
Mon May 3 14:32:20 EDT 2004
Update of /projects/cvsroot/pvfs2/src/io/trove/trove-dbpf
In directory parlweb:/tmp/cvs-serv27452/src/io/trove/trove-dbpf
Modified Files:
dbpf-dspace-db-cache.c dbpf-dspace.c dbpf-keyval-db-cache.c
dbpf-mgmt.c
Log Message:
- more error handling
- more cleanups
- fixed the dbcache try_remove method after the last set of changes to it
(must remove even if it's not in the cache)
Index: dbpf-dspace-db-cache.c
===================================================================
RCS file: /projects/cvsroot/pvfs2/src/io/trove/trove-dbpf/dbpf-dspace-db-cache.c,v
diff -p -u -r1.16 -r1.17
--- dbpf-dspace-db-cache.c 18 Feb 2004 23:22:53 -0000 1.16
+++ dbpf-dspace-db-cache.c 3 May 2004 17:32:19 -0000 1.17
@@ -21,12 +21,13 @@
#include "dbpf-dspace.h"
#include "gossip.h"
-
-enum {
+enum
+{
DBCACHE_ENTRIES = 2
};
-struct dspace_dbcache_entry {
+struct dspace_dbcache_entry
+{
int ref_ct; /* -1 == not a valid cache entry */
gen_mutex_t mutex;
TROVE_coll_id coll_id;
@@ -35,8 +36,6 @@ struct dspace_dbcache_entry {
static struct dspace_dbcache_entry dspace_db_cache[DBCACHE_ENTRIES];
-/* dbpf_dspace_dbcache_initialize()
- */
void dbpf_dspace_dbcache_initialize(void)
{
int i;
@@ -47,8 +46,6 @@ void dbpf_dspace_dbcache_initialize(void
}
}
-/* dbpf_dspace_dbcache_finalize()
- */
void dbpf_dspace_dbcache_finalize(void)
{
int i, ret;
@@ -79,9 +76,9 @@ int dbpf_dspace_dbcache_try_get(TROVE_co
int create_flag,
DB **db_pp)
{
- int i, ret;
- char filename[PATH_MAX];
- DB *db_p;
+ int i = 0, ret = -TROVE_EINVAL;
+ char filename[PATH_MAX] = {0};
+ DB *db_p = NULL;
for (i=0; i < DBCACHE_ENTRIES; i++) {
if (!(ret = gen_mutex_trylock(&dspace_db_cache[i].mutex)) &&
@@ -129,7 +126,8 @@ int dbpf_dspace_dbcache_try_get(TROVE_co
if (i == DBCACHE_ENTRIES) assert(0);
}
- DBPF_GET_DS_ATTRIB_DBNAME(filename, PATH_MAX, my_storage_p->name, coll_id);
+ DBPF_GET_DS_ATTRIB_DBNAME(filename, PATH_MAX,
+ my_storage_p->name, coll_id);
ret = db_create(&(dspace_db_cache[i].db_p), NULL, 0);
if (ret != 0) {
@@ -156,7 +154,7 @@ int dbpf_dspace_dbcache_try_get(TROVE_co
TROVE_DB_OPEN_FLAGS,
0);
- if (ret == ENOENT && create_flag != 0)
+ if ((ret == ENOENT) && (create_flag != 0))
{
/* if no such DB and create_flag is set, try to create the DB */
ret = dspace_db_cache[i].db_p->open(
@@ -184,8 +182,6 @@ int dbpf_dspace_dbcache_try_get(TROVE_co
return DBPF_DSPACE_DBCACHE_SUCCESS;
}
-/* dbpf_dspace_dbcache_put()
- */
void dbpf_dspace_dbcache_put(TROVE_coll_id coll_id)
{
int i;
Index: dbpf-dspace.c
===================================================================
RCS file: /projects/cvsroot/pvfs2/src/io/trove/trove-dbpf/dbpf-dspace.c,v
diff -p -u -r1.94 -r1.95
--- dbpf-dspace.c 22 Apr 2004 18:14:59 -0000 1.94
+++ dbpf-dspace.c 3 May 2004 17:32:19 -0000 1.95
@@ -326,7 +326,7 @@ static int dbpf_dspace_remove(TROVE_coll
static int dbpf_dspace_remove_op_svc(struct dbpf_op *op_p)
{
- int error = -TROVE_EINVAL, ret, got_db = 0;
+ int error = -TROVE_EINVAL, ret = -TROVE_EINVAL, got_db = 0;
DBT key;
DB *db_p = NULL;
TROVE_object_ref ref = {op_p->handle, op_p->coll_p->coll_id};
@@ -341,6 +341,9 @@ static int dbpf_dspace_remove_op_svc(str
case DBPF_DSPACE_DBCACHE_SUCCESS:
got_db = 1;
break;
+ default:
+ PVFS_perror_gossip("dbpf_dspace_dbcache_try_get failed", ret);
+ break;
}
memset(&key, 0, sizeof(key));
@@ -367,14 +370,15 @@ static int dbpf_dspace_remove_op_svc(str
/* if this attr is in the dbpf attr cache, remove it */
dbpf_attr_cache_remove(ref);
- DBPF_DB_SYNC_IF_NECESSARY(op_p, db_p);
-
/* remove keyval db if it exists
*
- * NOTE: this is not a fatal error; this might have never been created.
+ * NOTE: this is not a fatal error; this might have never been
+ * created.
*/
ret = dbpf_keyval_dbcache_try_remove(
op_p->coll_p->coll_id, op_p->handle);
+
+ DBPF_DB_SYNC_IF_NECESSARY(op_p, db_p);
/* remove bstream file if it exists
*
Index: dbpf-keyval-db-cache.c
===================================================================
RCS file: /projects/cvsroot/pvfs2/src/io/trove/trove-dbpf/dbpf-keyval-db-cache.c,v
diff -p -u -r1.36 -r1.37
--- dbpf-keyval-db-cache.c 30 Apr 2004 21:21:31 -0000 1.36
+++ dbpf-keyval-db-cache.c 3 May 2004 17:32:20 -0000 1.37
@@ -67,7 +67,6 @@ void dbpf_keyval_dbcache_finalize(void)
}
if (keyval_db_cache[i].ref_ct >= 0)
{
- /* close DB */
ret = keyval_db_cache[i].db_p->close(
keyval_db_cache[i].db_p, 0);
assert(ret == 0);
@@ -80,7 +79,6 @@ void dbpf_keyval_dbcache_finalize(void)
* Returns 0 on success, or one of -TROVE_EBUSY, -TROVE_ENOENT, or
* -TROVE_EPERM (for now).
*
- * TODO: DO A BETTER JOB OF MAPPING ERRORS.
*/
int dbpf_keyval_dbcache_try_remove(TROVE_coll_id coll_id,
TROVE_handle handle)
@@ -117,39 +115,40 @@ int dbpf_keyval_dbcache_try_remove(TROVE
{
gossip_debug(GOSSIP_TROVE_DEBUG, "db: close error\n");
}
+ }
- DBPF_GET_KEYVAL_DBNAME(filename, PATH_MAX,
- my_storage_p->name, coll_id);
-
- __DBPF_GET_KEYVAL_DBNAME(db_name, PATH_MAX, my_storage_p->name,
- coll_id, Lu(handle));
+ DBPF_GET_KEYVAL_DBNAME(filename, PATH_MAX,
+ my_storage_p->name, coll_id);
- ret = db_create(&(keyval_db_cache[i].db_p), NULL, 0);
- assert(ret == 0);
+ __DBPF_GET_KEYVAL_DBNAME(db_name, PATH_MAX, my_storage_p->name,
+ coll_id, Lu(handle));
- ret = keyval_db_cache[i].db_p->remove(
- keyval_db_cache[i].db_p, filename, db_name, 0);
- switch (ret)
- {
- case 0:
- break;
- case EINVAL:
- gossip_err("warning: invalid db file!\n");
- ret = -TROVE_EINVAL;
- break;
- case ENOENT:
- ret = -TROVE_ENOENT;
- break;
- default:
- gossip_err("warning: unreliable error value %d\n", ret);
- ret = -TROVE_EPERM;
- break;
- }
+ ret = db_create(&(keyval_db_cache[i].db_p), NULL, 0);
+ assert(ret == 0);
- keyval_db_cache[i].ref_ct = -1;
- keyval_db_cache[i].db_p = NULL;
- gen_mutex_unlock(&keyval_db_cache[i].mutex);
+ ret = keyval_db_cache[i].db_p->remove(
+ keyval_db_cache[i].db_p, filename, db_name, 0);
+ switch (ret)
+ {
+ case 0:
+ break;
+ case EINVAL:
+ gossip_err("warning: invalid db file!\n");
+ ret = -TROVE_EINVAL;
+ break;
+ case ENOENT:
+ ret = -TROVE_ENOENT;
+ break;
+ default:
+ gossip_err("warning: unreliable error value %d\n", ret);
+ ret = -TROVE_EPERM;
+ break;
}
+
+ keyval_db_cache[i].ref_ct = -1;
+ keyval_db_cache[i].db_p = NULL;
+ gen_mutex_unlock(&keyval_db_cache[i].mutex);
+
return ret;
}
@@ -159,7 +158,7 @@ int dbpf_keyval_dbcache_try_remove(TROVE
* references to the same db, so this will never return BUSY. That
* might change at some later time.
*
- * Returns 0 on success, or one of -TROVE_ENOENT, -TROVE_EBUSY, -TROVE_PERM.
+ * Returns 0 on success, -TROVE_errno on failure.
*
* TODO: DO A BETTER JOB OF MAPPING ERROR VALUES!
*
@@ -170,7 +169,7 @@ int dbpf_keyval_dbcache_try_get(TROVE_co
int create_flag,
DB **db_pp)
{
- int i, ret, error;
+ int i = 0, ret = -TROVE_EINVAL, error = 0;
char filename[PATH_MAX] = {0}, db_name[PATH_MAX] = {0};
DB *db_p = NULL;
int got_db = 0;
@@ -248,18 +247,19 @@ int dbpf_keyval_dbcache_try_get(TROVE_co
ret = db_create(&(keyval_db_cache[i].db_p), NULL, 0);
if (ret != 0)
{
- gossip_lerr("dbpf_keyval_dbcache_get: %s\n", db_strerror(ret));
- error = -dbpf_db_error_to_trove_error(ret);
- goto return_error;
+ gossip_lerr("dbpf_keyval_dbcache_get: %s\n", db_strerror(ret));
+ error = -dbpf_db_error_to_trove_error(ret);
+ goto return_error;
}
else
{
- got_db =1;
+ got_db = 1;
}
db_p = keyval_db_cache[i].db_p;
db_p->set_errpfx(db_p, "pvfs2");
db_p->set_errcall(db_p, dbpf_error_report);
+
/* DB_RECNUM makes it easier to iterate through every key in chunks */
if ((ret = db_p->set_flags(db_p, DB_RECNUM)))
{
@@ -306,8 +306,8 @@ int dbpf_keyval_dbcache_try_get(TROVE_co
}
else if (ret != 0)
{
- error = -dbpf_db_error_to_trove_error(ret);
- goto return_error;
+ error = -dbpf_db_error_to_trove_error(ret);
+ goto return_error;
}
keyval_db_cache[i].ref_ct = 1;
@@ -322,7 +322,6 @@ failed_open_error:
* can only be freed with db->close */
if (got_db && (keyval_db_cache[i].db_p != NULL))
{
- /* ignore errors, since we are trying to clean up anyway */
keyval_db_cache[i].db_p->close(keyval_db_cache[i].db_p, 0);
keyval_db_cache[i].ref_ct = -1;
keyval_db_cache[i].db_p = NULL;
Index: dbpf-mgmt.c
===================================================================
RCS file: /projects/cvsroot/pvfs2/src/io/trove/trove-dbpf/dbpf-mgmt.c,v
diff -p -u -r1.42 -r1.43
--- dbpf-mgmt.c 30 Apr 2004 18:49:45 -0000 1.42
+++ dbpf-mgmt.c 3 May 2004 17:32:20 -0000 1.43
@@ -644,14 +644,14 @@ static int dbpf_collection_remove(char *
sto_p->name, db_data.coll_id);
if (unlink(path_name) != 0)
{
- gossip_err("failure removing dataspace attrib db");
+ gossip_err("failure removing dataspace attrib db\n");
}
DBPF_GET_COLL_ATTRIB_DBNAME(path_name, PATH_MAX,
sto_p->name, db_data.coll_id);
if (unlink(path_name) != 0)
{
- gossip_err("failure removing collection attrib db");
+ gossip_err("failure removing collection attrib db\n");
goto collection_remove_failure;
}
@@ -677,7 +677,7 @@ static int dbpf_collection_remove(char *
assert(current_dirent->d_type == DT_REG);
if (unlink(tmp_path) != 0)
{
- gossip_err("failure removing bstream entry");
+ gossip_err("failure removing bstream entry\n");
closedir(current_dir);
goto collection_remove_failure;
}
@@ -692,7 +692,7 @@ static int dbpf_collection_remove(char *
sto_p->name, db_data.coll_id);
if (unlink(path_name) != 0)
{
- gossip_err("failure removing dbname file %s", path_name);
+ gossip_err("failure removing dbname file %s\n", path_name);
goto collection_remove_failure;
}
@@ -700,7 +700,7 @@ static int dbpf_collection_remove(char *
sto_p->name, db_data.coll_id);
if (rmdir(path_name) != 0)
{
- gossip_err("failure removing dirname directory %s", path_name);
+ gossip_err("failure removing dirname directory %s\n", path_name);
goto collection_remove_failure;
}
@@ -708,7 +708,7 @@ static int dbpf_collection_remove(char *
sto_p->name, db_data.coll_id);
if (rmdir(path_name) != 0)
{
- gossip_err("failure removing collection directory");
+ gossip_err("failure removing collection directory\n");
goto collection_remove_failure;
}
@@ -938,13 +938,14 @@ static int dbpf_collection_lookup(char *
{
/* really an error of some kind */
sto_p->coll_db->err(sto_p->coll_db, ret, "DB->get");
- gossip_debug(GOSSIP_TROVE_DEBUG, "lookup got error\n");
- return -1;
+ gossip_debug(GOSSIP_TROVE_DEBUG, "lookup got error (%d)\n",ret);
+
+ return -dbpf_db_error_to_trove_error(ret);
}
/*
- look to see if we have already registered
- this collection; if so, return
+ look to see if we have already registered this collection; if
+ so, return
*/
coll_p = dbpf_collection_find_registered(db_data.coll_id);
if (coll_p != NULL)
@@ -954,14 +955,14 @@ static int dbpf_collection_lookup(char *
}
/*
- this collection hasn't been registered
- already (ie. looked up before)
+ this collection hasn't been registered already (ie. looked up
+ before)
*/
- coll_p = (struct dbpf_collection *)
- malloc(sizeof(struct dbpf_collection));
+ coll_p = (struct dbpf_collection *)malloc(
+ sizeof(struct dbpf_collection));
if (coll_p == NULL)
{
- return -1;
+ return -TROVE_ENOMEM;
}
coll_p->refct = 0;
@@ -971,7 +972,7 @@ static int dbpf_collection_lookup(char *
coll_p->name = strdup(collname);
if (!coll_p->name)
{
- return -1;
+ return -TROVE_ENOMEM;
}
DBPF_GET_DS_ATTRIB_DBNAME(path_name, PATH_MAX,
@@ -979,7 +980,7 @@ static int dbpf_collection_lookup(char *
coll_p->ds_db = dbpf_db_open(path_name, &error);
if (coll_p->ds_db == NULL)
{
- return -error;
+ return -dbpf_db_error_to_trove_error(error);
}
DBPF_GET_COLL_ATTRIB_DBNAME(path_name, PATH_MAX,
@@ -987,7 +988,7 @@ static int dbpf_collection_lookup(char *
coll_p->coll_attr_db = dbpf_db_open(path_name, &error);
if (coll_p->coll_attr_db == NULL)
{
- return -error;
+ return -dbpf_db_error_to_trove_error(error);
}
/* make sure the version matches the version we understand */
@@ -1005,7 +1006,7 @@ static int dbpf_collection_lookup(char *
{
gossip_err("Failed to retrieve collection version: %s\n",
db_strerror(ret));
- return -1;
+ return dbpf_db_error_to_trove_error(ret);
}
gossip_debug(GOSSIP_TROVE_DEBUG, "collection lookup: version is %s\n",
@@ -1017,7 +1018,7 @@ static int dbpf_collection_lookup(char *
gossip_err("This collection has version %s\n", trove_dbpf_version);
gossip_err("This code understands version %s\n",
TROVE_DBPF_VERSION_VALUE);
- return -1;
+ return -TROVE_EINVAL;
}
dbpf_collection_register(coll_p);
More information about the PVFS2-CVS
mailing list