[Pvfs2-cvs] commit by pcarns in pvfs2-1/src/client/sysint: sys-create.sm

CVS commit program cvs at parl.clemson.edu
Wed Apr 30 15:01:48 EDT 2008


Update of /projects/cvsroot/pvfs2-1/src/client/sysint
In directory parlweb1:/tmp/cvs-serv27388/src/client/sysint

Modified Files:
      Tag: small-file-branch
	sys-create.sm 
Log Message:
reverted handle cleanup procedure to old approach using a separate remove
for each handle rather than trying to organize them into a batch remove for
each server


Index: sys-create.sm
===================================================================
RCS file: /projects/cvsroot/pvfs2-1/src/client/sysint/sys-create.sm,v
diff -p -u -r1.114.2.10 -r1.114.2.11
--- sys-create.sm	18 Apr 2008 13:58:12 -0000	1.114.2.10
+++ sys-create.sm	30 Apr 2008 19:01:48 -0000	1.114.2.11
@@ -39,7 +39,7 @@ static int create_comp_fn(
     void *v_p, struct PVFS_server_resp *resp_p, int index);
 static int create_crdirent_comp_fn(
     void *v_p, struct PVFS_server_resp *resp_p, int index);
-static int batch_remove_handles_comp_fn(
+static int create_delete_handles_comp_fn(
     void *v_p, struct PVFS_server_resp *resp_p, int index);
 
 /* misc helper functions */
@@ -100,17 +100,17 @@ machine pvfs2_client_create_sm
     state crdirent_failure
     {
         run create_crdirent_failure;
-        default => batch_remove_setup_msgpair_array;
+        default => delete_handles_setup_msgpair_array;
     }
 
-    state batch_remove_setup_msgpair_array
+    state delete_handles_setup_msgpair_array
     {
-        run batch_remove_setup_msgpair_array;
-        success => batch_remove_xfer_msgpair_array;
+        run create_delete_handles_setup_msgpair_array;
+        success => delete_handles_xfer_msgpair_array;
         default => cleanup;
     }
 
-    state batch_remove_xfer_msgpair_array
+    state delete_handles_xfer_msgpair_array
     {
         jump pvfs2_msgpairarray_sm;
         default => cleanup;
@@ -412,31 +412,6 @@ static int create_crdirent_comp_fn(void 
     return resp_p->status;
 }
 
-static int batch_remove_handles_comp_fn(void *v_p,
-                                        struct PVFS_server_resp *resp_p,
-                                        int index)
-{
-    PINT_smcb *smcb = v_p;
-    PINT_client_sm *sm_p = PINT_sm_frame(smcb, PINT_FRAME_CURRENT);
-    const char* server_name = NULL;
-    int server_type;
-    PINT_sm_msgpair_state *msg_p = NULL;
-
-    gossip_debug(GOSSIP_CLIENT_DEBUG, "batch_remove_handles_comp_fn\n");
-
-    assert(resp_p->op == PVFS_SERV_BATCH_REMOVE);
-
-    if (resp_p->status != 0)
-    {
-        msg_p = &sm_p->msgarray[index];
-        server_name = PINT_cached_config_map_addr(msg_p->fs_id, 
-            msg_p->svr_addr, 
-            &server_type);
-        gossip_err("Warning: cleanup failed to remove at least one handle from %s; continuing.\n", server_name);
-    }
-    return resp_p->status;
-}
-
 static PINT_sm_action create_create_setup_msgpair(
         struct PINT_smcb *smcb, job_status_s *js_p)
 {
@@ -547,61 +522,6 @@ static PINT_sm_action create_crdirent_fa
     return SM_ACTION_COMPLETE;
 }
 
-/* delete the newly created meta and data handles */
-static PINT_sm_action batch_remove_setup_msgpair_array(
-        struct PINT_smcb *smcb, job_status_s *js_p)
-{
-    struct PINT_client_sm *sm_p = PINT_sm_frame(smcb, PINT_FRAME_CURRENT);
-    int ret = -PVFS_EINVAL;
-    PVFS_BMI_addr_t metafile_server_addr;
-    PINT_sm_msgpair_state *msg_p = NULL;
-
-    gossip_debug(GOSSIP_CLIENT_DEBUG, "create state: "
-                 "delete_handles_setup_msgpair_array\n");
-
-    js_p->error_code = 0;
-
-    memset(&sm_p->msgpair, 0, sizeof(PINT_sm_msgpair_state));
-
-    ret = PINT_cached_config_map_to_server(
-        &metafile_server_addr, sm_p->u.create.metafile_handle,
-        sm_p->object_ref.fs_id);
-
-    if (ret)
-    {
-        gossip_err("Failed to map meta server address\n");
-        js_p->error_code = ret;
-        return SM_ACTION_COMPLETE;
-    }
-
-    /* TODO: what if more than one datafile handle was filled in, or if some
-     * of the datafiles are not stored on the meta server? 
-     */
-    /* TODO: convert this to the old cleanup technique that just did an
-     * independent remove operation for each handle involved
-     */
-
-    sm_p->u.create.handles[0] = sm_p->u.create.metafile_handle;
-    sm_p->u.create.handles[1] = sm_p->u.create.datafile_handles[0];
-    
-    PINT_init_msgpair(sm_p, msg_p);
-
-    PINT_SERVREQ_BATCH_REMOVE_FILL(
-        msg_p->req,
-        *sm_p->cred_p,
-        sm_p->object_ref.fs_id,
-        2,
-        sm_p->u.create.handles);
-
-    msg_p->fs_id = sm_p->object_ref.fs_id;
-    msg_p->handle = sm_p->u.create.metafile_handle;
-    msg_p->retry_flag = PVFS_MSGPAIR_NO_RETRY;
-    msg_p->comp_fn = batch_remove_handles_comp_fn;
-    msg_p->svr_addr = metafile_server_addr;
-
-    return SM_ACTION_COMPLETE;
-}
-
 static PINT_sm_action create_cleanup(
         struct PINT_smcb *smcb, job_status_s *js_p)
 {
@@ -926,6 +846,119 @@ static PINT_dist* get_default_distributi
     PINT_put_server_config_struct(server_config);
 
     return dist;
+}
+
+static int create_delete_handles_comp_fn(void *v_p,
+                                         struct PVFS_server_resp *resp_p,
+                                         int index)
+{
+    gossip_debug(GOSSIP_CLIENT_DEBUG, "create_delete_handles_comp_fn\n");
+
+    assert(resp_p->op == PVFS_SERV_REMOVE);
+
+    if (resp_p->status != 0)
+    {
+        gossip_debug(GOSSIP_CLIENT_DEBUG,
+                     "Failed to remove handle number %d\n", index);
+    }
+    return resp_p->status;
+}
+
+/* delete the newly created meta and data handles */
+static PINT_sm_action create_delete_handles_setup_msgpair_array(
+        struct PINT_smcb *smcb, job_status_s *js_p)
+{
+    struct PINT_client_sm *sm_p = PINT_sm_frame(smcb, PINT_FRAME_CURRENT);
+    int ret = -PVFS_EINVAL, i = 0;
+    PVFS_BMI_addr_t metafile_server_addr;
+
+    gossip_debug(GOSSIP_CLIENT_DEBUG, "create state: "
+                 "delete_handles_setup_msgpair_array\n");
+
+    js_p->error_code = 0;
+
+    memset(&sm_p->msgpair, 0, sizeof(PINT_sm_msgpair_state));
+
+    ret = PINT_cached_config_map_to_server(
+        &metafile_server_addr, sm_p->u.create.metafile_handle,
+        sm_p->object_ref.fs_id);
+    if (ret)
+    {
+        gossip_err("Failed to map meta server address\n");
+        js_p->error_code = ret;
+        return SM_ACTION_COMPLETE;
+    }
+
+    if (sm_p->msgarray && (sm_p->msgarray != &(sm_p->msgpair)))
+    {
+        free(sm_p->msgarray);
+    }
+    sm_p->msgarray = (PINT_sm_msgpair_state *)malloc(
+        ((sm_p->u.create.datafile_count+1) * sizeof(PINT_sm_msgpair_state)));
+
+    if (sm_p->msgarray == NULL)
+    {
+        gossip_err("create: failed to allocate msgarray\n"); 
+        js_p->error_code = -PVFS_ENOMEM;
+        return SM_ACTION_COMPLETE;
+    }
+    sm_p->msgarray_count = (sm_p->u.create.datafile_count+1);
+
+    /*
+      for the metafile and each datafile, prepare to post a remove
+      send/recv pair
+    */
+    for(i = 0; i < sm_p->msgarray_count; i++)
+    {
+        PINT_sm_msgpair_state *msg_p = &sm_p->msgarray[i];
+
+        gossip_debug(GOSSIP_CLIENT_DEBUG,
+                     "create: posting data file remove req %d\n",i);
+
+        /* arbitrarily handle deletion of the metafile last */
+        if (i == (sm_p->msgarray_count - 1))
+        {
+            PINT_SERVREQ_REMOVE_FILL(
+                msg_p->req,
+                *sm_p->cred_p,
+                sm_p->object_ref.fs_id,
+                sm_p->u.create.metafile_handle);
+
+            msg_p->fs_id = sm_p->object_ref.fs_id;
+            msg_p->handle = sm_p->u.create.metafile_handle;
+            msg_p->retry_flag = PVFS_MSGPAIR_NO_RETRY;
+            msg_p->comp_fn = create_delete_handles_comp_fn;
+            msg_p->svr_addr = metafile_server_addr;
+
+            gossip_debug(GOSSIP_CLIENT_DEBUG, " Preparing to remove "
+                         "metafile handle %llu\n", llu(msg_p->handle));
+        }
+        else
+        {
+            PINT_SERVREQ_REMOVE_FILL(
+                msg_p->req,
+                *sm_p->cred_p,
+                sm_p->object_ref.fs_id,
+                sm_p->u.create.datafile_handles[i]);
+
+            msg_p->fs_id = sm_p->object_ref.fs_id;
+            msg_p->handle = sm_p->u.create.datafile_handles[i];
+            msg_p->retry_flag = PVFS_MSGPAIR_NO_RETRY;
+            msg_p->comp_fn = create_delete_handles_comp_fn;
+            ret = PINT_cached_config_map_to_server(
+                &msg_p->svr_addr, sm_p->u.create.datafile_handles[i],
+                sm_p->object_ref.fs_id);
+            if (ret)
+            {
+                gossip_err("Failed to map data server address\n");
+                js_p->error_code = ret;
+                return SM_ACTION_COMPLETE;
+            }
+            gossip_debug(GOSSIP_CLIENT_DEBUG, " Preparing to remove "
+                         "datafile handle %llu\n", llu(msg_p->handle));
+        }
+    }
+    return SM_ACTION_COMPLETE;
 }
 
 /*



More information about the Pvfs2-cvs mailing list