diff --git a/src/client/sysint/client-state-machine.c b/src/client/sysint/client-state-machine.c index 163c0dd..4469f9b 100644 --- a/src/client/sysint/client-state-machine.c +++ b/src/client/sysint/client-state-machine.c @@ -440,9 +440,10 @@ PVFS_error PINT_client_state_machine_post( start state machine and continue advancing while we're getting immediate completions */ + sm_ret = PINT_state_machine_start(smcb, &js); assert(SM_ACTION_ISVALID(sm_ret)); - + if(sm_ret < 0) { /* state machine code failed */ diff --git a/src/client/sysint/sys-create.sm b/src/client/sysint/sys-create.sm index c1a3df7..6317dc6 100644 --- a/src/client/sysint/sys-create.sm +++ b/src/client/sysint/sys-create.sm @@ -56,7 +56,7 @@ enum { OSD_MSGPAIR = 2001, OSD_CREATE_MSGPAIR = 2002, OSD_MDFILE_MSGPAIR = 2003, - OSD_NOT_EXIST = 2004 + OSD_POST_CREATE = 2004 }; %% @@ -79,6 +79,7 @@ machine pvfs2_client_create_sm state parent_getattr_inspect { run create_parent_getattr_inspect; + OSD_POST_CREATE => cleanup; success => create_setup_msgpair; default => cleanup; } @@ -125,7 +126,6 @@ machine pvfs2_client_create_sm { run create_datafiles_setup_msgpair_array; OSD_MSGPAIR => datafiles_xfer_osd_msgpair_array; - OSD_NOT_EXIST => create_setattr_setup_msgpair; default => cleanup; } @@ -140,7 +140,6 @@ machine pvfs2_client_create_sm { run create_setattr_setup_msgpair; OSD_MSGPAIR => create_setattr_xfer_osd_msgpair; - OSD_NOT_EXIST => crdirent_setup_msgpair; success => create_setattr_xfer_msgpair; default => cleanup; } @@ -398,7 +397,7 @@ static PINT_sm_action create_init( { struct PINT_client_sm *sm_p = PINT_sm_frame(smcb, PINT_FRAME_CURRENT); job_id_t tmp_id; - + assert((js_p->error_code == 0) || (js_p->error_code == CREATE_RETRY)); @@ -426,8 +425,7 @@ static PINT_sm_action create_init( pint_client_sm_context); } - - return SM_ACTION_COMPLETE; + return SM_ACTION_COMPLETE; } static int create_comp_fn(void *v_p, @@ -555,15 +553,16 @@ static int create_datafiles_comp_fn(void *v_p, PVFS_handle first = ea->extent_array[0].first; PVFS_handle last = ea->extent_array[0].last; - ret = osd_command_attr_resolve(&sm_p->msgarray_op.msgarray[index].osd_command); +/* ret = osd_command_attr_resolve(&sm_p->msgarray_op.msgarray[index].osd_command);*/ - if (ret) - osd_error_xerrno(ret, "%s: attr_resolve failed", __func__); - oid = get_ntohll(sm_p->msgarray_op.msgarray[index].osd_command.attr[0].val); +/* if (ret)*/ +/* osd_error_xerrno(ret, "%s: attr_resolve failed", __func__);*/ +/* oid = get_ntohll(sm_p->msgarray_op.msgarray[index].osd_command.attr[0].val);*/ + oid = sm_p->u.create.datafile_handles[index]; if (oid < first || oid > last) gossip_err("%s: OSD-assigned oid %llu out of range %llu-%llu\n", __func__, llu(oid), llu(first), llu(last)); - sm_p->u.create.datafile_handles[index] = oid; +/* sm_p->u.create.datafile_handles[index] = oid;*/ /* The first datafile also happens to be the metafile */ if (is_osd_md && index == 0) { @@ -571,7 +570,7 @@ static int create_datafiles_comp_fn(void *v_p, sm_p->u.create.create_resp->ref.handle = oid; sm_p->u.create.create_resp->ref.fs_id = sm_p->object_ref.fs_id; } - osd_command_attr_free(&sm_p->msgarray_op.msgarray[index].osd_command); +/* osd_command_attr_free(&sm_p->msgarray_op.msgarray[index].osd_command);*/ } gossip_debug(GOSSIP_CLIENT_DEBUG, "Datafile handle %d is %llu\n", @@ -628,6 +627,11 @@ static PINT_sm_action create_create_setup_msgpair( PVFS_handle_extent_array meta_handle_extent_array; PINT_sm_msgpair_state *msg_p = NULL; int server_type; + struct server_configuration_s *server_config; + + server_config = PINT_get_server_config_struct( + sm_p->object_ref.fs_id); + PINT_put_server_config_struct(server_config); /* * Check whether we're storing file metadata on a dedicated OSD MDS @@ -721,7 +725,7 @@ static PINT_sm_action create_create_setup_msgpair( sm_p->u.create.layout, sm_p->hints); js_p->error_code = 0; - if (is_osd) + if (is_osd && !server_config->post_create) js_p->error_code = OSD_CREATE_MSGPAIR; } @@ -742,6 +746,7 @@ static PINT_sm_action create_create_setup_msgpair( static PINT_sm_action create_datafiles_setup_msgpair_array( struct PINT_smcb *smcb, job_status_s *js_p) { + gossip_err("create_datafiles_setup_msgpair_array\n"); struct PINT_client_sm *sm_p = PINT_sm_frame(smcb, PINT_FRAME_CURRENT); int ret = -PVFS_EINVAL; struct server_configuration_s *server_config; @@ -806,58 +811,57 @@ static PINT_sm_action create_datafiles_setup_msgpair_array( return SM_ACTION_COMPLETE; } - if(!server_config->post_create) { - PINT_msgpair_init(&sm_p->msgarray_op); - msg_p = &sm_p->msgarray_op.msgpair; + PINT_msgpair_init(&sm_p->msgarray_op); + msg_p = &sm_p->msgarray_op.msgpair; #define CURRENT_COMMAND_PAGE 0xfffffffeUL #define CURRENT_COMMAND_PAGE_OID 4 - if (is_osd) { - struct osd_command *command = &sm_p->msgarray_op.msgarray[0].osd_command; - uint64_t attrval; - struct attribute_list attrs[] = {{ ATTR_GET, CUR_CMD_ATTR_PG, - CCAP_OID, NULL, CCAP_OID_LEN }, - { ATTR_SET, USER_COLL_PG, 1, &attrval, 8}}; + if (is_osd) { + struct osd_command *command = &sm_p->msgarray_op.msgarray[0].osd_command; + uint64_t attrval; +/* struct attribute_list attrs[] = {{ ATTR_GET, CUR_CMD_ATTR_PG,*/ +/* CCAP_OID, NULL, CCAP_OID_LEN },*/ +/* { ATTR_SET, USER_COLL_PG, 1, &attrval, 8}};*/ - if(!sm_p->getattr.attr.cid) { - sm_p->getattr.attr.cid = COLLECTION_OID_LB; /* root directory */ - } - set_htonll(&attrval, sm_p->getattr.attr.cid); - - /* - * A hack in PVFS_util_init_defaults has set up an object an the - * low bound of the extent array. So as we create handles, we get - * them in increasing order that satisfies our extent bounds. - */ - ret = osd_command_set_create(command, PVFS_OSD_DATA_PID, sm_p->u.create.datafile_handles[0], 1); - if (ret) { - osd_error_xerrno(ret, "%s: osd_command_set_create failed", + struct attribute_list attr = {ATTR_SET, USER_COLL_PG, 1, &attrval, 8}; + + if(!sm_p->getattr.attr.cid) { + sm_p->getattr.attr.cid = COLLECTION_OID_LB; /* root directory */ + } + set_htonll(&attrval, sm_p->getattr.attr.cid); + + /* + * A hack in PVFS_util_init_defaults has set up an object an the + * low bound of the extent array. So as we create handles, we get + * them in increasing order that satisfies our extent bounds. + */ + ret = osd_command_set_create(command, PVFS_OSD_DATA_PID, sm_p->u.create.datafile_handles[0], 1); + if (ret) { + osd_error_xerrno(ret, "%s: osd_command_set_create failed", __func__); - js_p->error_code = ret; - return 1; - } + js_p->error_code = ret; + return 1; + } - ret = osd_command_attr_build(command, attrs, 2); - if (ret) { - osd_error_xerrno(ret, "%s: osd_command_attr_build failed", +/* ret = osd_command_attr_build(command, attrs, 2);*/ + ret = osd_command_attr_build(command, &attr, 1); + if (ret) { + osd_error_xerrno(ret, "%s: osd_command_attr_build failed", __func__); - js_p->error_code = ret; - return 1; - } + js_p->error_code = ret; + return 1; } + } - msg_p->fs_id = sm_p->object_ref.fs_id; - msg_p->handle = sm_p->u.create.io_handle_extent_array[0]. - extent_array[0].first; - msg_p->retry_flag = PVFS_MSGPAIR_NO_RETRY; - msg_p->comp_fn = create_datafiles_comp_fn; - msg_p->svr_addr = sm_p->u.create.data_server_addrs[0]; + msg_p->fs_id = sm_p->object_ref.fs_id; + msg_p->handle = sm_p->u.create.io_handle_extent_array[0]. + extent_array[0].first; + msg_p->retry_flag = PVFS_MSGPAIR_NO_RETRY; + msg_p->comp_fn = create_datafiles_comp_fn; + msg_p->svr_addr = sm_p->u.create.data_server_addrs[0]; - PINT_sm_push_frame(smcb, 0, &sm_p->msgarray_op); - } else { - js_p->error_code = OSD_NOT_EXIST; - } + PINT_sm_push_frame(smcb, 0, &sm_p->msgarray_op); return SM_ACTION_COMPLETE; } @@ -992,32 +996,21 @@ static PINT_sm_action create_setattr_setup_msgpair( PINT_DIST_PACK_SIZE(sm_p->u.create.dist); } - if(!server_config->post_create) { - 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_setattr_comp_fn; + 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_setattr_comp_fn; - ret = PINT_cached_config_map_to_server( - &msg_p->svr_addr, msg_p->handle, msg_p->fs_id); + ret = PINT_cached_config_map_to_server( + &msg_p->svr_addr, msg_p->handle, msg_p->fs_id); - if (ret) - { - gossip_err("Failed to map meta server address\n"); - js_p->error_code = ret; - } - js_p->error_code = (is_osd_meta || is_osd_md) ? OSD_MSGPAIR : 0; - PINT_sm_push_frame(smcb, 0, &sm_p->msgarray_op); - } else { - js_p->error_code = OSD_NOT_EXIST; - ret = PINT_copy_object_attr(&sm_p->u.create.cache_attr, - &sm_p->msgarray_op.msgpair.req.u.setattr.attr); - - if(ret != 0) - { - js_p->error_code = ret; - } + if (ret) + { + gossip_err("Failed to map meta server address\n"); + js_p->error_code = ret; } + js_p->error_code = (is_osd_meta || is_osd_md) ? OSD_MSGPAIR : 0; + PINT_sm_push_frame(smcb, 0, &sm_p->msgarray_op); return SM_ACTION_COMPLETE; } @@ -1095,15 +1088,20 @@ static PINT_sm_action create_cleanup( PVFS_object_ref metafile_ref; PVFS_size tmp_size = 0; int ret; - + gossip_debug(GOSSIP_CLIENT_DEBUG, "create state: cleanup\n"); - + + PINT_free_object_attr(&sm_p->u.create.attr); + + if(js_p->error_code == OSD_POST_CREATE) + js_p->error_code = 0; + PINT_SM_GETATTR_STATE_CLEAR(sm_p->getattr); sm_p->error_code = (sm_p->u.create.stored_error_code ? sm_p->u.create.stored_error_code : js_p->error_code); - + memset(&metafile_ref, 0, sizeof(metafile_ref)); if (sm_p->error_code == 0) @@ -1124,7 +1122,7 @@ static PINT_sm_action create_cleanup( sm_p->u.create.datafile_handles; sm_p->u.create.attr.u.meta.dfile_count = sm_p->u.create.datafile_count; - + if(sm_p->u.create.stuffed) { gossip_debug(GOSSIP_CLIENT_DEBUG, "created stuffed file\n"); @@ -1154,7 +1152,7 @@ static PINT_sm_action create_cleanup( sm_p->u.create.attr.mask &= (~(PVFS_ATTR_COMMON_CTIME)); sm_p->u.create.attr.mask &= (~(PVFS_ATTR_COMMON_ATIME)); ret = PINT_acache_update(metafile_ref, - &sm_p->u.create.cache_attr, + &sm_p->u.create.attr, &tmp_size); if(ret < 0) { @@ -1174,8 +1172,6 @@ static PINT_sm_action create_cleanup( return SM_ACTION_COMPLETE; } - PINT_free_object_attr(&sm_p->u.create.cache_attr); - if(sm_p->u.create.layout.algorithm == PVFS_SYS_LAYOUT_LIST) { free(sm_p->u.create.layout.server_list.servers); @@ -1193,7 +1189,7 @@ static PINT_sm_action create_cleanup( free(sm_p->u.create.datafile_handles); sm_p->u.create.datafile_handles = NULL; } - + PINT_msgpairarray_destroy(&sm_p->msgarray_op); PINT_SET_OP_COMPLETE; @@ -1207,11 +1203,12 @@ static PINT_sm_action create_parent_getattr_inspect( struct PINT_smcb *smcb, job_status_s *js_p) { struct PINT_client_sm *sm_p = PINT_sm_frame(smcb, PINT_FRAME_CURRENT); + PVFS_object_attr *attr = NULL; PINT_dist *current_dist; int ret = 0; int num_dfiles_requested = 0; - + gossip_debug(GOSSIP_CLIENT_DEBUG, "create state: parent_getattr_inspect\n"); attr = &sm_p->getattr.attr; diff --git a/src/client/sysint/sys-getattr.sm b/src/client/sysint/sys-getattr.sm index e3a611b..0605e7f 100644 --- a/src/client/sysint/sys-getattr.sm +++ b/src/client/sysint/sys-getattr.sm @@ -111,7 +111,7 @@ nested machine pvfs2_client_getattr_sm run getattr_acache_lookup; GETATTR_ACACHE_MISS => object_getattr_setup_msgpair; GETATTR_NEED_DATAFILE_SIZES => datafile_get_sizes; - IO_DO_OSD => acache_insert; + IO_DO_OSD => cleanup; default => cleanup; } @@ -336,16 +336,17 @@ static PINT_sm_action getattr_acache_lookup( js_p->error_code = 0; object_ref = sm_p->getattr.object_ref; - + + server_config = PINT_get_server_config_struct( + sm_p->object_ref.fs_id); + PINT_put_server_config_struct(server_config); + assert(object_ref.handle != PVFS_HANDLE_NULL); assert(object_ref.fs_id != PVFS_FS_ID_NULL); gossip_debug(GOSSIP_ACACHE_DEBUG, "%s: handle %llu fsid %d\n", __func__, llu(object_ref.handle), object_ref.fs_id); - server_config = PINT_get_server_config_struct( - sm_p->object_ref.fs_id); - PINT_put_server_config_struct(server_config); /* The sys attr mask request is converted to object * attr mask values for comparison with the cached @@ -370,12 +371,6 @@ static PINT_sm_action getattr_acache_lookup( &sm_p->getattr.size, &size_status); - if(sm_p->u.io.io_type == PVFS_IO_WRITE && server_config->post_create) { - /* the object that we are trying to write to has not been created */ - js_p->error_code = IO_DO_OSD; - return SM_ACTION_COMPLETE; - } - if(ret < 0 || attr_status < 0) { gossip_debug(GOSSIP_ACACHE_DEBUG, "acache: clean acache miss: " @@ -1386,7 +1381,7 @@ static PINT_sm_action getattr_acache_insert( { struct PINT_client_sm *sm_p = PINT_sm_frame(smcb, PINT_FRAME_CURRENT); PVFS_size* tmp_size = NULL; - + if( sm_p->getattr.attr.objtype == PVFS_TYPE_METAFILE || sm_p->getattr.attr.objtype == PVFS_TYPE_DIRECTORY || sm_p->getattr.attr.objtype == PVFS_TYPE_SYMLINK ) diff --git a/src/client/sysint/sys-io.sm b/src/client/sysint/sys-io.sm index a8891c5..02cc916 100644 --- a/src/client/sysint/sys-io.sm +++ b/src/client/sysint/sys-io.sm @@ -316,12 +316,18 @@ PVFS_error PVFS_isys_io( gossip_debug(GOSSIP_CLIENT_DEBUG, "PVFS_isys_io entered [%llu]\n", llu(ref.handle)); + + server_config = PINT_get_server_config_struct(ref.fs_id); + cur_fs = PINT_config_find_fs_id(server_config, ref.fs_id); + PINT_put_server_config_struct(server_config); if ((ref.handle == PVFS_HANDLE_NULL) || (ref.fs_id == PVFS_FS_ID_NULL) || (resp_p == NULL)) { - gossip_err("invalid (NULL) required argument\n"); - return ret; + if(!server_config->post_create) { + gossip_err("invalid (NULL) required argument\n"); + return ret; + } } if ((io_type != PVFS_IO_READ) && (io_type != PVFS_IO_WRITE)) @@ -330,10 +336,6 @@ PVFS_error PVFS_isys_io( return ret; } - server_config = PINT_get_server_config_struct(ref.fs_id); - cur_fs = PINT_config_find_fs_id(server_config, ref.fs_id); - PINT_put_server_config_struct(server_config); - if (!cur_fs) { gossip_err("invalid (unknown) fs id specified\n"); @@ -435,14 +437,15 @@ PVFS_error PVFS_sys_io( static PINT_sm_action io_init( struct PINT_smcb *smcb, job_status_s *js_p) { + gossip_err("io_init\n"); struct PINT_client_sm *sm_p = PINT_sm_frame(smcb, PINT_FRAME_CURRENT); job_id_t tmp_id; - + gossip_debug(GOSSIP_CLIENT_DEBUG, "(%p) io state: io_init\n", sm_p); assert((js_p->error_code == 0) || (js_p->error_code == IO_RETRY)); - + PINT_SM_GETATTR_STATE_FILL( sm_p->getattr, sm_p->object_ref, @@ -480,6 +483,7 @@ static PINT_sm_action io_init( static PINT_sm_action io_inspect_attr( struct PINT_smcb *smcb, job_status_s *js_p) { + gossip_err("io_inspect_attr\n"); struct PINT_client_sm *sm_p = PINT_sm_frame(smcb, PINT_FRAME_CURRENT); int is_osd_meta = fsid_is_osd_meta(sm_p->getattr.object_ref.fs_id); int is_osd_md = fsid_is_osd_md(sm_p->getattr.object_ref.fs_id); diff --git a/src/client/sysint/sys-mkdir.sm b/src/client/sysint/sys-mkdir.sm index a1e2825..57e1db5 100644 --- a/src/client/sysint/sys-mkdir.sm +++ b/src/client/sysint/sys-mkdir.sm @@ -464,8 +464,8 @@ static PINT_sm_action create_collection_setup_msgpair( struct osd_command *command = &sm_p->msgarray_op.msgpair.osd_command; - struct attribute_list attr = { ATTR_GET, CUR_CMD_ATTR_PG, - CCAP_OID, NULL, CCAP_OID_LEN }; +/* struct attribute_list attr = { ATTR_GET, CUR_CMD_ATTR_PG,*/ +/* CCAP_OID, NULL, CCAP_OID_LEN };*/ ret = osd_command_set_create_collection(command, PVFS_OSD_DATA_PID, sm_p->u.mkdir.cid); @@ -476,13 +476,13 @@ static PINT_sm_action create_collection_setup_msgpair( return 1; } - ret = osd_command_attr_build(command, &attr, 1); - if (ret) { - osd_error_xerrno(ret, "%s: osd_command_attr_build failed", - __func__); - js_p->error_code = ret; - return SM_ACTION_COMPLETE; - } +/* ret = osd_command_attr_build(command, &attr, 1);*/ +/* if (ret) {*/ +/* osd_error_xerrno(ret, "%s: osd_command_attr_build failed",*/ +/* __func__);*/ +/* js_p->error_code = ret;*/ +/* return SM_ACTION_COMPLETE;*/ +/* }*/ PINT_sm_push_frame(smcb, 0, &sm_p->msgarray_op); return SM_ACTION_COMPLETE; @@ -513,14 +513,16 @@ static int create_collection_comp_fn(void *v_p, return status; } - ret = osd_command_attr_resolve(&sm_p->msgarray_op.msgpair.osd_command); - if (ret) { - osd_error_xerrno(ret, "%s: attr_resolve failed", __func__); - } +/* ret = osd_command_attr_resolve(&sm_p->msgarray_op.msgpair.osd_command);*/ +/* if (ret) {*/ +/* osd_error_xerrno(ret, "%s: attr_resolve failed", __func__);*/ +/* }*/ - sm_p->object_ref.cid = get_ntohll(sm_p->msgarray_op.msgpair.osd_command.attr[0].val); +/* sm_p->object_ref.cid = get_ntohll(sm_p->msgarray_op.msgpair.osd_command.attr[0].val);*/ - osd_command_attr_free(&sm_p->msgarray_op.msgpair.osd_command); + sm_p->object_ref.cid = sm_p->u.mkdir.cid; + +/* osd_command_attr_free(&sm_p->msgarray_op.msgpair.osd_command);*/ return 0; } diff --git a/src/client/sysint/sys-osd-io.sm b/src/client/sysint/sys-osd-io.sm index 44b6218..81cd64c 100755 --- a/src/client/sysint/sys-osd-io.sm +++ b/src/client/sysint/sys-osd-io.sm @@ -57,7 +57,6 @@ nested machine pvfs2_client_osd_io_sm { run osd_io_init; success => setup_msgpairs; - OSD_CREATE_WRITE => create_and_write; default => return; } @@ -106,8 +105,6 @@ nested machine pvfs2_client_osd_io_sm { run osd_io_maybe_xfer_more; LOOP_NEXT_CHUNK => setup_msgpairs; - CREATE_AND_WRITE_DONE => setattr_setup_msgpair; - CREATE_AND_WRITE_NOT_DONE => create_and_write; default => analyze_results; } @@ -128,14 +125,16 @@ nested machine pvfs2_client_osd_io_sm static int osd_io_init(struct PINT_smcb *smcb, job_status_s *js_p) { + gossip_err("osd_io_init\n"); struct PINT_client_sm *sm_p = PINT_sm_frame(smcb, PINT_FRAME_CURRENT); struct PINT_client_io_sm *io = &sm_p->u.io; PVFS_object_attr *attr = &sm_p->getattr.attr; int i, ret; - + ret = PINT_msgpairarray_init(&sm_p->msgarray_op, io->datafile_count); if (ret) goto out; + sm_p->msgarray_op.count = io->datafile_count; /* @@ -146,6 +145,7 @@ static int osd_io_init(struct PINT_smcb *smcb, job_status_s *js_p) io->datafile_count); if (!io->file_req_state) goto out; + io->mem_req_state = PINT_new_request_states(io->mem_req, io->datafile_count); if (!io->mem_req_state) @@ -165,21 +165,16 @@ static int osd_io_init(struct PINT_smcb *smcb, job_status_s *js_p) io->file_data = malloc(io->datafile_count * sizeof(*io->file_data)); if (!io->file_data) goto out; - + io->file_data[0].fsize = 0; io->file_data[0].server_ct = attr->u.meta.dfile_count; io->file_data[0].dist = attr->u.meta.dist; io->file_data[0].extend_flag = 1; /* always disable fsize checking */ - if(io->buffer && !io->datafile_count) { - /* object has not been created */ - ret = OSD_CREATE_WRITE; - goto out; - } - for (i=0; idatafile_count; i++) { PVFS_handle datafile_handle = attr->u.meta.dfile_array[ io->datafile_index_array[i]]; + gossip_err("datafile_handle %d\n", datafile_handle); gossip_debug(GOSSIP_IO_DEBUG, "%s: server %d/%d handle %llu\n", __func__, i, io->datafile_count, llu(datafile_handle)); @@ -187,20 +182,26 @@ static int osd_io_init(struct PINT_smcb *smcb, job_status_s *js_p) ret = PINT_cached_config_map_to_server( &sm_p->msgarray_op.msgarray[i].svr_addr, datafile_handle, sm_p->object_ref.fs_id); + gossip_err("svr_addr: %d\n", sm_p->msgarray_op.msgarray[i].svr_addr); + gossip_err("sm_p->object_ref.fs_id: %d\n", sm_p->object_ref.fs_id); if (ret) goto out; io->file_req_state[i].target_offset = io->file_req_offset; io->file_req_state[i].final_offset = io->file_req_offset + io->mem_req->aggregate_size; + gossip_err("io->file_req_offset: %d\n", io->file_req_offset); + gossip_err("io->mem_req->aggregate_size: %d\n", io->mem_req->aggregate_size); if (i > 0) memcpy(&io->file_data[i], &io->file_data[0], sizeof(io->file_data[0])); io->file_data[i].server_nr = io->datafile_index_array[i]; + gossip_err("io->file_data[i].server_nr: %d\n", io->file_data[i].server_nr); /* invariants */ sm_p->msgarray_op.msgarray[i].fs_id = sm_p->object_ref.fs_id; sm_p->msgarray_op.msgarray[i].handle = sm_p->object_ref.handle; + gossip_err("sm_p->object_ref.handle: %d\n", sm_p->object_ref.handle); sm_p->msgarray_op.msgarray[i].retry_flag = PVFS_MSGPAIR_RETRY; sm_p->msgarray_op.msgarray[i].comp_fn = osd_io_completion_fn; } @@ -215,6 +216,7 @@ out: static int osd_io_setup_msgpairs(struct PINT_smcb *smcb, job_status_s *js_p) { + gossip_err("osd_io_setup_msgpairs\n"); struct PINT_client_sm *sm_p = PINT_sm_frame(smcb, PINT_FRAME_CURRENT); struct PINT_client_io_sm *io = &sm_p->u.io; PVFS_object_attr *attr = &sm_p->getattr.attr; @@ -222,6 +224,11 @@ static int osd_io_setup_msgpairs(struct PINT_smcb *smcb, job_status_s *js_p) struct osd_command *command; struct bsg_iovec *iov; int dfile_count = sm_p->u.io.datafile_count; + struct server_configuration_s *server_config; + + server_config = PINT_get_server_config_struct( + sm_p->object_ref.fs_id); + PINT_put_server_config_struct(server_config); //~ printf("MAX IOVEC is %d\n", OSD_INIT_MAX_IOVEC); /* clients offset and length pairs */ @@ -415,8 +422,15 @@ static int osd_io_setup_msgpairs(struct PINT_smcb *smcb, job_status_s *js_p) //~ printf("Contig READ %d\n", len); } else if (io->io_type == PVFS_IO_WRITE) { - osd_command_set_write(command, PVFS_OSD_DATA_PID, datafile_handle, + if (server_config->post_create && !target_offset[0]) + { + gossip_err("first\n"); + osd_command_set_create_and_write(command, PVFS_OSD_DATA_PID, datafile_handle, len, target_offset[0]); + } else { + gossip_err("second\n"); + osd_command_set_write(command, PVFS_OSD_DATA_PID, datafile_handle, len, target_offset[0]); + } command->outdata = p; command->outlen = len; command->iov_outlen = csegs_count; @@ -906,6 +920,7 @@ static int osd_io_completion_fn( struct PVFS_server_resp *resp_p __attribute__((unused)), int index) { + gossip_err("osd_io_completion_fn\n"); struct PINT_smcb *smcb = user_args; struct PINT_client_sm *sm_p = PINT_sm_frame(smcb, PINT_MSGPAIR_PARENT_SM); struct PINT_client_io_sm *io = &sm_p->u.io; @@ -999,32 +1014,19 @@ static int osd_io_completion_fn( static int osd_io_maybe_xfer_more(struct PINT_smcb *smcb, job_status_s *js_p) { + gossip_err("osd_io_maybe_xfer_more\n"); struct PINT_client_sm *sm_p = PINT_sm_frame(smcb, PINT_FRAME_CURRENT); struct PINT_client_io_sm *io = &sm_p->u.io; int i, more = 1; - struct server_configuration_s *server_config; - - server_config = PINT_get_server_config_struct( - sm_p->object_ref.fs_id); - PINT_put_server_config_struct(server_config); gossip_debug(GOSSIP_IO_DEBUG, "%s: total %lld want %lld.\n", __func__, lld(io->total_size), lld(io->mem_req->aggregate_size)); + gossip_err("io->total_size: %d\n", io->total_size); + gossip_err("io->mem_req->aggregate_size: %d\n", io->mem_req->aggregate_size); if (io->total_size == io->mem_req->aggregate_size) more = 0; - if(server_config->post_create) { - /* we are doing most create */ - if(more) { - /* not done with write */ - js_p->error_code = CREATE_AND_WRITE_NOT_DONE; - } else { - js_p->error_code = CREATE_AND_WRITE_DONE; - } - return 1; - } - /* * If all short read, done. * diff --git a/src/common/misc/server-config.c b/src/common/misc/server-config.c index 43cfd6a..e8632dd 100644 --- a/src/common/misc/server-config.c +++ b/src/common/misc/server-config.c @@ -4286,7 +4286,7 @@ char *assign_io_servers( PINT_llist *cur = NULL; struct host_handle_mapping_s *cur_h_mapping = NULL; int num_io_servers = 0; - gossip_err("%d\n", config_s->econumnodes); + gossip_err("%d\n", fs->exp_anon_gid); if (config_s && config_s->host_id && fs) { diff --git a/src/common/misc/state-machine-fns.c b/src/common/misc/state-machine-fns.c index b316f61..021e55d 100644 --- a/src/common/misc/state-machine-fns.c +++ b/src/common/misc/state-machine-fns.c @@ -213,7 +213,7 @@ PINT_sm_action PINT_state_machine_start(struct PINT_smcb *smcb, job_status_s *r) /* keep running until state machine deferrs or terminates */ ret = PINT_state_machine_continue(smcb, r); } - + if(ret == SM_ACTION_DEFERRED) { /* this state machine isn't completing immediately */ @@ -337,13 +337,14 @@ PINT_sm_action PINT_state_machine_continue(struct PINT_smcb *smcb, job_status_s PINT_sm_action ret; ret = PINT_state_machine_next(smcb, r); - + + if(ret == SM_ACTION_TERMINATE) { /* process terminating SM */ PINT_state_machine_terminate(smcb, r); } - + return ret; }