[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