Skip to content

Commit

Permalink
implementation of regular dir object is done
Browse files Browse the repository at this point in the history
* readdir, readdirplus works
* no collection is created
  • Loading branch information
cek10006 committed Oct 11, 2012
1 parent 061124e commit ce518ea
Show file tree
Hide file tree
Showing 7 changed files with 312 additions and 107 deletions.
2 changes: 1 addition & 1 deletion config.save
Original file line number Diff line number Diff line change
Expand Up @@ -525,7 +525,7 @@ s,@ECHO_C@,,;t t
s,@ECHO_N@,-n,;t t
s,@ECHO_T@,,;t t
s,@LIBS@, -lcrypto -lssl -ldl,;t t
s,@PVFS2_VERSION@,2.8.6-orangefs-2012-10-11-023730,;t t
s,@PVFS2_VERSION@,2.8.6-orangefs-2012-10-11-115608,;t t
s,@PVFS2_VERSION_MAJOR@,2,;t t
s,@PVFS2_VERSION_MINOR@,8,;t t
s,@PVFS2_VERSION_SUB@,6,;t t
Expand Down
15 changes: 9 additions & 6 deletions src/client/sysint/remove.sm
Original file line number Diff line number Diff line change
Expand Up @@ -287,16 +287,19 @@ static PINT_sm_action remove_object_remove_setup_msgpair(
struct PINT_client_sm *sm_p = PINT_sm_frame(smcb, PINT_FRAME_CURRENT);
int ret = -PVFS_EINVAL;
PINT_sm_msgpair_state *msg_p = NULL;
struct server_configuration_s *server_config;

int is_osd_md = fsid_is_osd_md(sm_p->object_ref.fs_id);
server_config = PINT_get_server_config_struct(
sm_p->object_ref.fs_id);
PINT_put_server_config_struct(server_config);

gossip_debug(GOSSIP_CLIENT_DEBUG,
"remove state: object_remove_setup_msgpair\n");

if (is_osd_md) {
/* no mdfile to remove */
js_p->error_code = OSD_MDFILE_MSGPAIR;
return SM_ACTION_COMPLETE;
if (server_config->coll_object || sm_p->getattr.attr.objtype != PVFS_TYPE_DIRECTORY)
{
js_p->error_code = OSD_MDFILE_MSGPAIR;
return SM_ACTION_COMPLETE;
}

PINT_msgpair_init(&sm_p->msgarray_op);
Expand Down Expand Up @@ -367,7 +370,7 @@ static PINT_sm_action remove_collection(
sm_p->object_ref.fs_id);
PINT_put_server_config_struct(server_config);

if ((!is_osd_md && (!(server_config->member_attr) || sm_p->getattr.attr.objtype != PVFS_TYPE_DIRECTORY)) || (sm_p->getattr.attr.objtype != PVFS_TYPE_DIRECTORY && is_osd_md)) {
if ((!is_osd_md && (!(server_config->member_attr) || sm_p->getattr.attr.objtype != PVFS_TYPE_DIRECTORY)) || (sm_p->getattr.attr.objtype != PVFS_TYPE_DIRECTORY && is_osd_md) || (!server_config->coll_object)) {
js_p->error_code = SKIP_COLLECTION_REMOVAL;
return SM_ACTION_COMPLETE;
}
Expand Down
3 changes: 0 additions & 3 deletions src/client/sysint/sys-create.sm
Original file line number Diff line number Diff line change
Expand Up @@ -394,7 +394,6 @@ PVFS_error PVFS_sys_create(
static PINT_sm_action create_init(
struct PINT_smcb *smcb, job_status_s *js_p)
{
gossip_err("create_init\n");
struct PINT_client_sm *sm_p = PINT_sm_frame(smcb, PINT_FRAME_CURRENT);
job_id_t tmp_id;

Expand Down Expand Up @@ -576,8 +575,6 @@ static int create_datafiles_comp_fn(void *v_p,
sm_p->u.create.datafile_handles[index] = oid;
}

gossip_err("create_oid: %d\n", oid);

/*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));*/
Expand Down
121 changes: 108 additions & 13 deletions src/client/sysint/sys-mkdir.sm
Original file line number Diff line number Diff line change
Expand Up @@ -34,9 +34,10 @@ enum
{
MKDIR_RETRY = 180,
MKDIR_SKIP_EATTR = 181,
OSD_MKDIR_MSGPAIR = 2001,
OSD_MKDIR_COLL_MSGPAIR = 2001,
CREATE_COLLECTION = 2002,
SKIP_COLLECTION_CREATE = 2003
SKIP_COLLECTION_CREATE = 2003,
OSD_MKDIR_MSGPAIR = 2004
};

static int mkdir_msg_comp_fn(
Expand Down Expand Up @@ -75,7 +76,8 @@ machine pvfs2_client_mkdir_sm
state mkdir_msg_setup_msgpair
{
run mkdir_msg_setup_msgpair;
OSD_MKDIR_MSGPAIR => create_collection;
OSD_MKDIR_MSGPAIR => mkdir_msg_xfer_osd_msgpair;
OSD_MKDIR_COLL_MSGPAIR => create_collection;
success => mkdir_msg_xfer_msgpair;
default => mkdir_msg_failure;
}
Expand All @@ -86,6 +88,13 @@ machine pvfs2_client_mkdir_sm
success => create_collection;
default => mkdir_msg_failure;
}

state mkdir_msg_xfer_osd_msgpair
{
jump pvfs2_osd_msgpairarray_sm;
success => create_collection;
default => mkdir_msg_failure;
}

state mkdir_msg_failure
{
Expand Down Expand Up @@ -133,7 +142,7 @@ machine pvfs2_client_mkdir_sm
{
run mkdir_crdirent_setup_msgpair;
success => mkdir_crdirent_xfer_msgpair;
OSD_MKDIR_MSGPAIR => mkdir_crdirent_osd_msgpair;
OSD_MKDIR_COLL_MSGPAIR => mkdir_crdirent_osd_msgpair;
default => mkdir_crdirent_failure;
}

Expand Down Expand Up @@ -331,6 +340,20 @@ static int mkdir_msg_comp_fn(void *v_p,

if (server_is_osd(msg_p->svr_addr)) {
struct osd_command *command = &sm_p->msgarray_op.msgpair.osd_command;

if (command->status == 0) {
/* Stash the newly created meta handle */
ret = osd_command_attr_resolve(command);
if (ret) {
osd_error_xerrno(ret, "%s: attr_resolve failed", __func__);
return ret;
}

sm_p->u.mkdir.metafile_handle = get_ntohll(command->attr[5].val);
sm_p->u.mkdir.cid = get_ntohll(command->attr[5].val);
}

osd_command_attr_free(command);
return osd_errno_from_status(command->status);

} else {
Expand Down Expand Up @@ -384,6 +407,11 @@ static PINT_sm_action mkdir_msg_setup_msgpair(
int ret = -PVFS_EINVAL;
PVFS_handle_extent_array meta_handle_extent_array;
PINT_sm_msgpair_state *msg_p = NULL;
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_CLIENT_DEBUG,
"mkdir state: mkdir_msg_setup_msgpair\n");
Expand All @@ -405,8 +433,76 @@ static PINT_sm_action mkdir_msg_setup_msgpair(
}

if (server_is_osd(msg_p->svr_addr)) {
js_p->error_code = OSD_MKDIR_MSGPAIR;
return SM_ACTION_COMPLETE;
if (server_config->coll_object)
{
js_p->error_code = OSD_MKDIR_COLL_MSGPAIR;
return SM_ACTION_COMPLETE;
} else {
int i, numattrs = 6;
struct attribute_list attr[numattrs];
struct osd_command *command = &sm_p->msgarray_op.msgpair.osd_command;

/* Set attr type, page and number */
for (i = 0; i < numattrs - 1; i++) {
attr[i].type = ATTR_SET;
attr[i].page = ANY_PG + PVFS_USEROBJECT_ATTR_PG;
attr[i].number = i;
}

/* uid */
attr[0].val = &sm_p->u.mkdir.sys_attr.owner;
attr[0].len = sizeof(PVFS_uid);

/* gid */
attr[1].val = &sm_p->u.mkdir.sys_attr.group;
attr[1].len = sizeof(PVFS_gid);

/* XXX Default to PVFS_PERM_VALID till we can figure out the umask */
sm_p->u.mkdir.sys_attr.perms = 0777;
attr[2].val = &sm_p->u.mkdir.sys_attr.perms;
attr[2].len = sizeof(PVFS_permissions);

/* mask */
sm_p->u.mkdir.sys_attr.mask = PVFS_ATTR_COMMON_UID |
PVFS_ATTR_COMMON_GID |
PVFS_ATTR_COMMON_PERM |
PVFS_ATTR_COMMON_ATIME |
PVFS_ATTR_COMMON_CTIME |
PVFS_ATTR_COMMON_MTIME |
PVFS_ATTR_COMMON_TYPE;
attr[3].val = &sm_p->u.mkdir.sys_attr.mask;
attr[3].len = sizeof(uint32_t);

/* object type */
sm_p->u.mkdir.sys_attr.objtype = PVFS_TYPE_DIRECTORY;
attr[4].val = &sm_p->u.mkdir.sys_attr.objtype;
attr[4].len = sizeof(PVFS_ds_type);

/* retrieve cid, if we have osd md */
attr[5].type = ATTR_GET;
attr[5].page = CUR_CMD_ATTR_PG;
attr[5].number = CCAP_OID;
attr[5].val = NULL;
attr[5].len = CCAP_OID_LEN;

ret = osd_command_set_create(command, PVFS_OSD_META_PID, 0, 1);
if (ret) {
osd_error_xerrno(ret, "%s: osd_command_set_create failed",
__func__);
js_p->error_code = ret;
return SM_ACTION_COMPLETE;
}

/* Set/Retrieve the dir. attributes */
ret = osd_command_attr_build(command, attr, numattrs);
if (ret) {
osd_error_xerrno(ret, "%s: osd_command_attr_build failed",
__func__);
js_p->error_code = ret;
return SM_ACTION_COMPLETE;
}
js_p->error_code = OSD_MKDIR_MSGPAIR;
}
} else {
PINT_SERVREQ_MKDIR_FILL(
msg_p->req,
Expand Down Expand Up @@ -457,14 +553,14 @@ static PINT_sm_action create_collection_setup_msgpair(

js_p->error_code = 0;

if (!is_osd) {
js_p->error_code = SKIP_COLLECTION_CREATE;
return SM_ACTION_COMPLETE;
}

server_config = PINT_get_server_config_struct(
sm_p->object_ref.fs_id);
PINT_put_server_config_struct(server_config);

if (!is_osd || !server_config->coll_object) {
js_p->error_code = SKIP_COLLECTION_CREATE;
return SM_ACTION_COMPLETE;
}

cur = server_config->host_aliases;
while(cur)
Expand Down Expand Up @@ -606,7 +702,6 @@ static int create_collection_comp_fn(void *v_p,
sm_p->u.mkdir.cid = get_ntohll(sm_p->msgarray_op.msgpair.osd_command.attr[6].val);
}

gossip_err("cid_mkdir: %d\n", sm_p->u.mkdir.cid);
sm_p->object_ref.cid = sm_p->u.mkdir.cid;
sm_p->u.mkdir.metafile_handle = sm_p->object_ref.cid;

Expand Down Expand Up @@ -649,7 +744,7 @@ static PINT_sm_action mkdir_crdirent_setup_msgpair(
* here because we'll handle the individual directory operations in a
* different state machine.
*/
js_p->error_code = OSD_MKDIR_MSGPAIR;
js_p->error_code = OSD_MKDIR_COLL_MSGPAIR;
return SM_ACTION_COMPLETE;
} else {

Expand Down
3 changes: 1 addition & 2 deletions src/client/sysint/sys-readdir.sm
Original file line number Diff line number Diff line change
Expand Up @@ -292,7 +292,7 @@ static PINT_sm_action readdir_msg_setup_msgpair(
/* Retrieve all the directory entries */
oid = sm_p->object_ref.handle;

/* Retrieve the attributes of the collection object */
/* Retrieve the attributes of the collection or the regular dir object */
/* Retrieved attribute numbers are the hashed name of each directory entry */
/*ret = osd_command_set_list_collection(command, PVFS_OSD_META_PID, oid, 0, 1024, 0, 0);*/

Expand Down Expand Up @@ -334,7 +334,6 @@ static int readdir_msg_comp_fn(void *v_p,
struct PVFS_server_resp *resp_p,
int index)
{
osd_debug("readdir_msg_comp_fn\n");
int ret = 0;
PINT_smcb *smcb = v_p;
PINT_client_sm *sm_p = PINT_sm_frame(smcb, PINT_MSGPAIR_PARENT_SM);
Expand Down
Loading

0 comments on commit ce518ea

Please sign in to comment.