[Pvfs2-cvs] commit by elaine in pvfs2/src/server: create-file.sm
CVS commit program
cvs at parl.clemson.edu
Mon Apr 14 14:14:48 EDT 2008
Update of /projects/cvsroot/pvfs2/src/server
In directory parlweb1:/tmp/cvs-serv22326/src/server
Modified Files:
Tag: cu-sandbox-branch
create-file.sm
Log Message:
Index: create-file.sm
===================================================================
RCS file: /projects/cvsroot/pvfs2/src/server/Attic/create-file.sm,v
diff -p -u -r1.1.2.5 -r1.1.2.6
--- create-file.sm 8 Apr 2008 19:18:14 -0000 1.1.2.5
+++ create-file.sm 14 Apr 2008 18:14:48 -0000 1.1.2.6
@@ -240,7 +240,6 @@ static PINT_sm_action create_file_setup(
}
/* zero out all members */
memset(sm_p, 0, sizeof(struct PINT_client_sm));
- PINT_sm_push_frame(smcb, 0, sm_p);
/* Copied this from #define PINT_init_msgarray_params in client-state-machine.h
* because PINT_get_server_config_struct(__fsid) was not available on the server
@@ -266,21 +265,23 @@ static PINT_sm_action create_file_setup(
}
sm_p->cred_p = &(s_op->req->credentials);
+gossip_debug(GOSSIP_SERVER_DEBUG, "create_file_setup: s_op->req->u.create_file.object_name = %s\n", s_op->req->u.create_file.object_name);
sm_p->u.create_file.object_name = s_op->req->u.create_file.object_name;
sm_p->u.create_file.attr = s_op->req->u.create_file.attr;
-#if 0
- PVFS_util_copy_sys_attr(&sm_p->u.create_file.sys_attr, &s_op->req->u.create_file.sys_attr);
-#endif
sm_p->parent_ref.handle = s_op->req->u.create_file.parent_handle;
sm_p->parent_ref.fs_id = s_op->req->u.create_file.fs_id;
sm_p->object_ref.fs_id = sm_p->parent_ref.fs_id;
- sm_p->u.create_file.dist = s_op->req->u.create_file.dist;
sm_p->u.create_file.num_data_files = s_op->req->u.create_file.num_data_files;
+ sm_p->u.create_file.meta_handle_extent_array.extent_count =
+ s_op->req->u.create_file.meta_handle_extent_array.extent_count;
+ sm_p->u.create_file.meta_handle_extent_array.extent_array =
+ s_op->req->u.create_file.meta_handle_extent_array.extent_array;
gossip_debug(GOSSIP_SERVER_DEBUG, "Creating file %s under %llu, %d\n",
sm_p->u.create_file.object_name, llu(sm_p->parent_ref.handle),
sm_p->parent_ref.fs_id);
+ PINT_sm_push_frame(smcb, 0, sm_p);
return(SM_ACTION_COMPLETE);
}
@@ -476,7 +477,7 @@ static PINT_sm_action create_dspace_crea
ret = job_trove_dspace_create(
sm_p->parent_ref.fs_id,
- sm_p->u.create_file.metafile_handle_extent_array,
+ &sm_p->u.create_file.meta_handle_extent_array,
sm_p->u.create_file.attr.objtype,
NULL,
TROVE_SYNC ,
@@ -511,6 +512,7 @@ static PINT_sm_action create_datafiles_s
struct PINT_client_sm *sm_p = PINT_sm_frame(smcb, PINT_FRAME_CURRENT);
int ret = -PVFS_EINVAL, i = 0;
struct server_configuration_s *server_config = NULL;
+ PVFS_handle_extent_array *io_handle_extent_array;
gossip_debug(GOSSIP_CLIENT_DEBUG, "create state: "
"datafiles_setup_msgpair_array\n");
@@ -518,13 +520,11 @@ static PINT_sm_action create_datafiles_s
js_p->error_code = 0;
/* allocate handle extent array objects */
- if (sm_p->u.create_file.io_handle_extent_array == NULL)
- {
- sm_p->u.create_file.io_handle_extent_array = (PVFS_handle_extent_array *)
- malloc(sm_p->u.create_file.num_data_files *
- sizeof(PVFS_handle_extent_array));
- }
- if (!sm_p->u.create_file.io_handle_extent_array)
+/* TODO: need to free io_handle_extent_array */
+ io_handle_extent_array = (PVFS_handle_extent_array *)
+ malloc(sm_p->u.create_file.num_data_files *
+ sizeof(PVFS_handle_extent_array));
+ if (!io_handle_extent_array)
{
gossip_err("create: failed to allocate handle_extent_array\n");
js_p->error_code = -PVFS_ENOMEM;
@@ -552,7 +552,7 @@ static PINT_sm_action create_datafiles_s
&sm_p->u.create_file.num_data_files,
&sm_p->u.create_file.layout,
sm_p->u.create_file.data_server_addrs,
- sm_p->u.create_file.io_handle_extent_array);
+ io_handle_extent_array);
if(ret < 0)
{
gossip_err("create: failed to map the layout to a set of IO servers\n");
@@ -594,17 +594,17 @@ static PINT_sm_action create_datafiles_s
*sm_p->cred_p,
sm_p->object_ref.fs_id,
PVFS_TYPE_DATAFILE, /* this creates a datafile */
- sm_p->u.create_file.io_handle_extent_array[i]);
+ io_handle_extent_array[i]);
gossip_debug(GOSSIP_CLIENT_DEBUG, "posting datafile[%d] create "
"with extents %llu-%llu\n", i,
- llu(sm_p->u.create_file.io_handle_extent_array[i].
+ llu(io_handle_extent_array[i].
extent_array[0].first),
- llu(sm_p->u.create_file.io_handle_extent_array[i].
+ llu(io_handle_extent_array[i].
extent_array[0].last));
msg_p->fs_id = sm_p->object_ref.fs_id;
- msg_p->handle = sm_p->u.create_file.io_handle_extent_array[i].
+ msg_p->handle = io_handle_extent_array[i].
extent_array[0].first;
msg_p->retry_flag = PVFS_MSGPAIR_NO_RETRY;
msg_p->comp_fn = create_datafiles_comp_fn;
@@ -939,12 +939,6 @@ static PINT_sm_action create_file_work_c
PINT_free_object_attr(&sm_p->u.create_file.cache_attr);
- if (sm_p->u.create_file.io_handle_extent_array)
- {
- free(sm_p->u.create_file.io_handle_extent_array);
- sm_p->u.create_file.io_handle_extent_array = NULL;
- }
-
if (sm_p->u.create_file.data_server_addrs)
{
free(sm_p->u.create_file.data_server_addrs);
@@ -963,10 +957,12 @@ static PINT_sm_action create_file_work_c
sm_p->u.create_file.dist = NULL;
}
+#if 0
if(sm_p->u.create_file.layout.algorithm == PVFS_SYS_LAYOUT_LIST)
{
free(sm_p->u.create_file.layout.server_list.servers);
}
+#endif
if (sm_p->msgarray != &(sm_p->msgpair))
{
@@ -992,12 +988,11 @@ static PINT_sm_action create_getattr_loc
js_p->error_code = 0;
- PINT_cached_config_get_server_name(server_name, 1024, sm_p->object_ref.handle,
- sm_p->object_ref.fs_id);
+ PINT_cached_config_get_server_name(server_name, 1024, sm_p->parent_ref.handle,
+ sm_p->parent_ref.fs_id);
if (strcmp(config->host_id, server_name)) {
- /* TODO: perform local lookup. */
- /* Can we just call the nested get_attr state machine? */
+ /* Call the nested get_attr state machine? */
struct PINT_server_op *s_op = malloc(sizeof(struct PINT_server_op));
if(!s_op)
@@ -1008,83 +1003,29 @@ static PINT_sm_action create_getattr_loc
memset(s_op, 0, sizeof(struct PINT_server_op));
PINT_sm_push_frame(smcb, 0, s_op);
- s_op->op = PVFS_SERV_SETATTR;
+ s_op->op = PVFS_SERV_GETATTR;
/* TODO: see what really needs to be done with credentials
* s_op->credentials.uid = sm_p->cred_p->uid;
* s_op->credentials.gid = sm_p->cred_p->gid;
*/
- s_op->u.setattr.handle = sm_p->object_ref.handle;
- s_op->u.setattr.fs_id = sm_p->object_ref.fs_id;
- s_op->u.setattr.attr = sm_p->u.create_file.attr;
- s_op->u.setattr.attr.u.meta.dfile_array =
- sm_p->u.create_file.datafile_handles;
- s_op->u.setattr.attr.u.meta.dfile_count =
- sm_p->u.create_file.num_data_files;
- s_op->u.setattr.attr.u.meta.dist =
- sm_p->u.create_file.dist;
- s_op->u.setattr.attr.u.meta.dist_size =
- PINT_DIST_PACK_SIZE(sm_p->u.create_file.dist);
-
- return(SM_ACTION_COMPLETE);
- }
- else
- {
- /* it's not on this server. Fall through to another */
- /* state to do the lookup on the correct server. */
- /* need to set up machine for remote lookup here */
- return(-PVFS_ENOENT);
- }
+ s_op->u.getattr.handle = sm_p->parent_ref.handle;
+ s_op->u.getattr.fs_id = sm_p->parent_ref.fs_id;
+/* ??? */
+ s_op->u.getattr.attrmask = PVFS_ATTR_COMMON_ALL|PVFS_ATTR_DIR_HINT;
#if 0
-PINT_cached_config_get_server(fsid, config->host_id, server_type, &extent_array);
-If you donot care about the server type, you can pass in:
- PINT_SERVER_TYPE_META|PINT_SERVER_TYPE_IO
-Then with the returned extent_array, you can do:
-is_my_handle = PINT_handle_in_extent_array(&extent_array, your_handle);
-
- PVFS_handle_extent_array extent_array;
-
- ret = PINT_cached_config_get_server_array(config, sm_p->object_ref.fs_id,
- PINT_SERVER_TYPE_META, &extent_array);
- if (PINT_handle_in_extent_array(&extent_array, sm_p->object_ref.handle))
- {
- /* TODO: perform local lookup. Can we just call the nested get_attr state machine? */
- return(SM_ACTION_COMPLETE);
- }
- else
- {
- /* it's not on this server. */
- return(-PVFS_ENOENT);
- }
+/* s_op->u.getattr.ref_type = PVFS_TYPE_DIRECTORY; */
#endif
-#if 0 /* Elaine's feeble attempt */
- ret = PINT_cached_config_map_to_server(&parent_addr,
- sm_p->u.create_file.parent_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;
- }
-
- current_addr_bmi_str = PINT_config_get_host_addr_ptr(server_config, server_config->host_id);
- if (current_addr_bmi_str)
- {
- ret = BMI_addr_lookup(¤t_addr, current_addr_bmi_str);
- }
-
- if (BMI_query_addr_range(parent_addr, current_addr_bmi_str, 32))
- {
- /* TODO: perform local lookup. Can we just call the nested get_attr state machine? */
return(SM_ACTION_COMPLETE);
}
else
{
+ /* it's not on this server. Fall through to another */
+ /* state to do the lookup on the correct server. */
+ /* need to set up machine for remote lookup here */
return(-PVFS_ENOENT);
}
-#endif
}
/** looks at the attributes of the parent directory and decides if it impacts
More information about the Pvfs2-cvs
mailing list