[Pvfs2-cvs] commit by aching in pvfs2-1/src/client/sysint:
sys-version.sm
CVS commit program
cvs at parl.clemson.edu
Mon Oct 1 17:12:35 EDT 2007
Update of /projects/cvsroot/pvfs2-1/src/client/sysint
In directory parlweb1:/tmp/cvs-serv20752
Modified Files:
Tag: version-lock-actual-branch
sys-version.sm
Log Message:
Added a sys_version interface that uses the nested state machine.
Index: sys-version.sm
===================================================================
RCS file: /projects/cvsroot/pvfs2-1/src/client/sysint/Attic/sys-version.sm,v
diff -p -u -r1.1.2.1 -r1.1.2.2
--- sys-version.sm 21 Sep 2007 21:50:26 -0000 1.1.2.1
+++ sys-version.sm 1 Oct 2007 21:12:35 -0000 1.1.2.2
@@ -19,16 +19,23 @@
#include "str-utils.h"
#include "pint-cached-config.h"
#include "PINT-reqproto-encode.h"
+#include "pint-util.h"
extern job_context_id pint_client_sm_context;
-/* state function prototypes */
+/* state function prototypes for version nested machine */
static PINT_sm_action version_init(
struct PINT_smcb *smcb, job_status_s *js_p);
static PINT_sm_action version_setup_msgpair(
struct PINT_smcb *smcb, job_status_s *js_p);
static PINT_sm_action version_cleanup(
struct PINT_smcb *smcb, job_status_s *js_p);
+
+/* state function prototypes for system interface version state machine */
+static PINT_sm_action version_set_sys_response(
+ struct PINT_smcb *smcb, job_status_s *js_p);
+
+/* completion function prototypes */
static int version_comp_fn(
void *v_p, struct PVFS_server_resp *resp_p, int i);
@@ -36,24 +43,11 @@ static int version_comp_fn(
nested machine pvfs2_client_version_sm
{
- state init
- {
- run version_init;
- default => getattr;
- }
-
- state getattr
- {
- jump pvfs2_client_getattr_sm;
- success => setup_msgpair;
- default => cleanup;
- }
-
state setup_msgpair
{
run version_setup_msgpair;
- success => xfer_msgpair;
- default => cleanup;
+ success => xfer_msgpair;
+ default => cleanup;
}
state xfer_msgpair
@@ -65,10 +59,38 @@ nested machine pvfs2_client_version_sm
state cleanup
{
run version_cleanup;
+ default => return;
+ }
+}
+
+machine pvfs2_client_sysint_version_sm
+{
+ state init
+ {
+ run version_init;
+ default => get_attr;
+ }
+
+ state get_attr
+ {
+ jump pvfs2_client_getattr_sm;
+ success => version;
+ }
+
+ state version
+ {
+ jump pvfs2_client_version_sm;
+ default => set_sys_response;
+ }
+
+ state set_sys_response
+ {
+ run version_set_sys_response;
default => terminate;
}
}
+
%%
PVFS_error PVFS_isys_version(
@@ -85,7 +107,7 @@ PVFS_error PVFS_isys_version(
PINT_smcb *smcb = NULL;
PINT_client_sm *sm_p = NULL;
- gossip_debug(GOSSIP_CLIENT_DEBUG,
+ gossip_debug(GOSSIP_VERSION_DEBUG,
"PINT_isys_version entered\n");
if ((ref.handle == PVFS_HANDLE_NULL) ||
@@ -111,13 +133,13 @@ PVFS_error PVFS_isys_version(
/* AC - forget what this is for. I believe it is necessary to copy to
* state machine so that you have a copy */
- sm_p->u.version.op_type = op_type;
+ sm_p->version.op_type = op_type;
sm_p->version.server_bit_array = server_bit_arr;
+ sm_p->version.op_var = op_var;
sm_p->u.version.resp_p = resp_p;
- sm_p->u.version.op_var = op_var;
sm_p->object_ref = ref;
- return PINT_client_state_machine_post(smcb, op_id, user_ptr);
+ return PINT_client_state_machine_post(smcb, op_id, user_ptr);
}
PVFS_error PVFS_sys_version(
@@ -131,8 +153,9 @@ PVFS_error PVFS_sys_version(
PVFS_error ret = -PVFS_EINVAL, error = 0;
PVFS_sys_op_id op_id;
- gossip_debug(GOSSIP_CLIENT_DEBUG, "PVFS_sys_version entered\n");
-
+ gossip_debug(GOSSIP_VERSION_DEBUG, "PVFS_sys_version entered\n");
+ memset(resp_p, 0, sizeof(PVFS_sysresp_version));
+
ret = PVFS_isys_version(ref, credentials, op_type, resp_p,
server_bit_arr, op_var,
&op_id, NULL);
@@ -161,7 +184,7 @@ static PINT_sm_action version_init(struc
{
struct PINT_client_sm *sm_p = PINT_sm_frame(smcb, PINT_FRAME_CURRENT);
- gossip_debug(GOSSIP_CLIENT_DEBUG, "(%p) version state: "
+ gossip_debug(GOSSIP_VERSION_DEBUG, "(%p) version state: "
"version_init\n", sm_p);
assert(js_p->error_code == 0);
@@ -183,22 +206,29 @@ static PINT_sm_action version_setup_msgp
struct PINT_client_sm *sm_p = PINT_sm_frame(smcb, PINT_FRAME_CURRENT);
int ret = -PVFS_EINVAL;
PVFS_object_attr *attr = NULL;
+ struct server_configuration_s *server_config;
+ PVFS_handle version_meta_handle;
attr = &sm_p->getattr.attr;
assert(attr);
sm_p->version.server_count = attr->u.meta.dfile_count;
- gossip_debug(GOSSIP_CLIENT_DEBUG,
+ gossip_debug(GOSSIP_VERSION_DEBUG,
"version state: version_setup_msgpair\n");
+ server_config = PINT_get_server_config_struct(sm_p->object_ref.fs_id);
+ version_meta_handle = PINT_cached_config_version_meta_remap(
+ server_config, sm_p->object_ref.fs_id, sm_p->object_ref.handle);
+ PINT_put_server_config_struct(server_config);
+
PINT_SERVREQ_VERSION_FILL(
sm_p->msgpair.req,
(*sm_p->cred_p),
sm_p->object_ref.fs_id,
- sm_p->object_ref.handle,
- sm_p->u.version.op_type,
- (uint32_t) sm_p->u.version.op_var,
- sm_p->u.version.op_var,
+ version_meta_handle,
+ sm_p->version.op_type,
+ (uint32_t) sm_p->version.op_var,
+ sm_p->version.op_var,
sm_p->version.server_count,
sm_p->version.server_bit_array->numBits,
sm_p->version.server_bit_array->array);
@@ -206,13 +236,13 @@ static PINT_sm_action version_setup_msgp
sm_p->msgarray = &(sm_p->msgpair);
sm_p->msgarray_count = 1;
sm_p->msgpair.fs_id = sm_p->object_ref.fs_id;
- sm_p->msgpair.handle = sm_p->object_ref.handle;
+ sm_p->msgpair.handle = PVFS_HANDLE_NULL;
sm_p->msgpair.retry_flag = PVFS_MSGPAIR_RETRY;
sm_p->msgpair.comp_fn = version_comp_fn;
ret = PINT_cached_config_map_to_server(
&sm_p->msgpair.svr_addr,
- sm_p->msgpair.handle,
+ sm_p->object_ref.handle,
sm_p->msgpair.fs_id);
if (ret)
@@ -220,6 +250,9 @@ static PINT_sm_action version_setup_msgp
gossip_err("Failed to map meta server address\n");
js_p->error_code = 0;
}
+ gossip_debug(GOSSIP_VERSION_DEBUG,
+ "version state: version_setup_msgpair done!\n");
+
return SM_ACTION_COMPLETE;
}
@@ -227,14 +260,85 @@ static PINT_sm_action version_cleanup(
struct PINT_smcb *smcb, job_status_s *js_p)
{
struct PINT_client_sm *sm_p = PINT_sm_frame(smcb, PINT_FRAME_CURRENT);
- gossip_debug(GOSSIP_CLIENT_DEBUG,
+ gossip_debug(GOSSIP_VERSION_DEBUG,
"version state: version_cleanup\n");
+
sm_p->error_code = js_p->error_code;
if(sm_p->error_code != 0)
{
PINT_acache_invalidate(sm_p->object_ref);
}
+
+ return SM_ACTION_COMPLETE;
+}
+
+static PINT_sm_action version_set_sys_response(
+ struct PINT_smcb *smcb, job_status_s *js_p)
+{
+ PINT_client_sm *sm_p = PINT_sm_frame(smcb, PINT_FRAME_CURRENT);
+
+ /* Copy out PINT_client_sm to the resp */
+ switch (sm_p->version.op_type)
+ {
+ case PVFS_GET_UNIQUE_ID:
+ memcpy(&sm_p->u.version.resp_p->u.unique_id_range,
+ &sm_p->version.u.unique_id_range,
+ sizeof(PVFS_unique_id_range));
+ break;
+ case PVFS_GET_SNAPSHOT:
+ sm_p->u.version.resp_p->u.snapshot.snapshot_id =
+ sm_p->version.u.snapshot.snapshot_id;
+ sm_p->u.version.resp_p->u.snapshot.min_snapshot_id =
+ sm_p->version.u.snapshot.min_snapshot_id;
+ sm_p->u.version.resp_p->u.snapshot.commit_tuple_count =
+ sm_p->version.u.snapshot.commit_tuple_count;
+
+
+ assert(sm_p->u.version.resp_p->u.snapshot.tmp_id_arr == NULL);
+ assert(sm_p->u.version.resp_p->u.snapshot.commit_id_arr == NULL);
+ if (sm_p->u.version.resp_p->u.snapshot.commit_tuple_count)
+ {
+ if ((sm_p->u.version.resp_p->u.snapshot.tmp_id_arr = malloc(
+ sm_p->u.version.resp_p->u.snapshot.commit_tuple_count
+ * sizeof(PVFS_id_gen_t))) == NULL)
+ {
+ gossip_err("version_comp_fn: malloc tmp_id_arr failed\n");
+ return -1;
+ }
+
+ if ((sm_p->u.version.resp_p->u.snapshot.commit_id_arr = malloc(
+ sm_p->u.version.resp_p->u.snapshot.commit_tuple_count
+ * sizeof(PVFS_id_gen_t))) == NULL)
+ {
+ gossip_err(
+ "version_comp_fn: malloc commit_id_arr failed\n");
+ return -1;
+ }
+
+ memcpy(sm_p->u.version.resp_p->u.snapshot.tmp_id_arr,
+ sm_p->version.u.snapshot.tmp_id_arr,
+ sm_p->u.version.resp_p->u.snapshot.commit_tuple_count *
+ sizeof(PVFS_id_gen_t));
+ memcpy(sm_p->u.version.resp_p->u.snapshot.commit_id_arr,
+ sm_p->version.u.snapshot.commit_id_arr,
+ sm_p->u.version.resp_p->u.snapshot.commit_tuple_count *
+ sizeof(PVFS_id_gen_t));
+ }
+ break;
+ case PVFS_REMOVE_SNAPSHOT:
+ break;
+ case PVFS_COMMIT:
+ sm_p->u.version.resp_p->u.commit_id =
+ sm_p->version.u.commit_id;
+ break;
+ default:
+ break;
+ }
+
+ PINT_SM_GETATTR_STATE_CLEAR(sm_p->getattr);
+ PINT_SM_VERSION_STATE_CLEAR(sm_p->version);
+
PINT_SET_OP_COMPLETE;
return SM_ACTION_TERMINATE;
}
@@ -246,8 +350,10 @@ static int version_comp_fn(
{
PINT_smcb *smcb = v_p;
PINT_client_sm *sm_p = PINT_sm_frame(smcb, PINT_FRAME_CURRENT);
+
+
- gossip_debug(GOSSIP_CLIENT_DEBUG,
+ gossip_debug(GOSSIP_VERSION_DEBUG,
"version completion fn: version_comp_fn\n");
/* only posted one msgpair */
@@ -258,47 +364,135 @@ static int version_comp_fn(
return resp_p->status;
/* Copy the req to the PINT_client_sm */
- switch (sm_p->u.version.op_type)
+ switch (sm_p->version.op_type)
{
case PVFS_GET_UNIQUE_ID:
- sm_p->u.version.resp_p->u.unique_id_range.start =
+ sm_p->version.u.unique_id_range.start =
resp_p->u.version.unique_id_start;
- sm_p->u.version.resp_p->u.unique_id_range.count =
+ sm_p->version.u.unique_id_range.count =
resp_p->u.version.unique_id_count;
break;
case PVFS_GET_SNAPSHOT:
- sm_p->version.snapshot.snapshot_id =
+ sm_p->version.u.snapshot.snapshot_id =
resp_p->u.version.snapshot_id;
- sm_p->version.snapshot.min_snapshot_id =
+ sm_p->version.u.snapshot.min_snapshot_id =
resp_p->u.version.min_snapshot_id;
- sm_p->version.snapshot.commit_tuple_count =
+ sm_p->version.u.snapshot.commit_tuple_count =
resp_p->u.version.commit_tuple_count;
- assert(sm_p->version.snapshot.tmp_id_arr != NULL);
- assert(sm_p->version.snapshot.commit_id_arr != NULL);
- if ((sm_p->version.snapshot.tmp_id_arr = malloc(
- sm_p->version.snapshot.commit_tuple_count *
- sizeof(PVFS_id_gen_t))) == NULL)
+ assert(sm_p->version.u.snapshot.tmp_id_arr == NULL);
+ assert(sm_p->version.u.snapshot.commit_id_arr == NULL);
+ if (sm_p->version.u.snapshot.commit_tuple_count)
{
- gossip_err("version_comp_fn: malloc tmp_id_arr failed\n");
- return -1;
+ if ((sm_p->version.u.snapshot.tmp_id_arr = malloc(
+ sm_p->version.u.snapshot.commit_tuple_count
+ * sizeof(PVFS_id_gen_t))) == NULL)
+ {
+ gossip_err("version_comp_fn: malloc tmp_id_arr failed\n");
+ return -1;
+ }
+
+ if ((sm_p->version.u.snapshot.commit_id_arr = malloc(
+ sm_p->version.u.snapshot.commit_tuple_count
+ * sizeof(PVFS_id_gen_t))) == NULL)
+ {
+ gossip_err(
+ "version_comp_fn: malloc commit_id_arr failed\n");
+ return -1;
+ }
+
+ memcpy(sm_p->version.u.snapshot.tmp_id_arr,
+ resp_p->u.version.tmp_id_arr,
+ sm_p->version.u.snapshot.commit_tuple_count *
+ sizeof(PVFS_id_gen_t));
+ memcpy(sm_p->version.u.snapshot.commit_id_arr,
+ resp_p->u.version.commit_id_arr,
+ sm_p->version.u.snapshot.commit_tuple_count *
+ sizeof(PVFS_id_gen_t));
}
- if ((sm_p->version.snapshot.commit_id_arr = malloc(
- sm_p->version.snapshot.commit_tuple_count *
- sizeof(PVFS_id_gen_t))) == NULL)
+ break;
+ case PVFS_REMOVE_SNAPSHOT:
+ break;
+ case PVFS_COMMIT:
+ sm_p->version.u.commit_id = resp_p->u.version.commit_id;
+ break;
+ default:
+ break;
+ }
+
+ return 0;
+}
+
+
+#if 0
+static int version_comp_fn(
+ void *v_p,
+ struct PVFS_server_resp *resp_p,
+ int i)
+{
+ PINT_smcb *smcb = v_p;
+ PINT_client_sm *sm_p = PINT_sm_frame(smcb, PINT_FRAME_CURRENT);
+
+ PINT_SM_GETATTR_STATE_CLEAR(sm_p->getattr);
+
+ gossip_debug(GOSSIP_VERSION_DEBUG,
+ "version completion fn: version_comp_fn\n");
+
+ /* only posted one msgpair */
+ assert(i==0);
+ assert(resp_p->op == PVFS_SERV_VERSION);
+
+ if(resp_p->status != 0)
+ return resp_p->status;
+
+ /* Copy the req to the PINT_client_sm */
+ switch (sm_p->version.op_type)
+ {
+ case PVFS_GET_UNIQUE_ID:
+ sm_p->u.version.resp_p->u.unique_id_range.start =
+ resp_p->u.version.unique_id_start;
+ sm_p->u.version.resp_p->u.unique_id_range.count =
+ resp_p->u.version.unique_id_count;
+ break;
+ case PVFS_GET_SNAPSHOT:
+ sm_p->u.version.resp_p->u.snapshot.snapshot_id =
+ resp_p->u.version.snapshot_id;
+ sm_p->u.version.resp_p->u.snapshot.min_snapshot_id =
+ resp_p->u.version.min_snapshot_id;
+ sm_p->u.version.resp_p->u.snapshot.commit_tuple_count =
+ resp_p->u.version.commit_tuple_count;
+ assert(sm_p->u.version.resp_p->u.snapshot.tmp_id_arr == NULL);
+ assert(sm_p->u.version.resp_p->u.snapshot.commit_id_arr == NULL);
+ if (sm_p->u.version.resp_p->u.snapshot.commit_tuple_count)
{
- gossip_err("version_comp_fn: malloc commit_id_arr failed\n");
- return -1;
+ if ((sm_p->u.version.resp_p->u.snapshot.tmp_id_arr = malloc(
+ sm_p->u.version.resp_p->u.snapshot.commit_tuple_count
+ * sizeof(PVFS_id_gen_t))) == NULL)
+ {
+ gossip_err("version_comp_fn: malloc tmp_id_arr failed\n");
+ return -1;
+ }
+
+ if ((sm_p->u.version.resp_p->u.snapshot.commit_id_arr = malloc(
+ sm_p->u.version.resp_p->u.snapshot.commit_tuple_count
+ * sizeof(PVFS_id_gen_t))) == NULL)
+ {
+ gossip_err(
+ "version_comp_fn: malloc commit_id_arr failed\n");
+ return -1;
+ }
+
+ memcpy(sm_p->u.version.resp_p->u.snapshot.tmp_id_arr,
+ resp_p->u.version.tmp_id_arr,
+ sm_p->u.version.resp_p->u.snapshot.commit_tuple_count *
+ sizeof(PVFS_id_gen_t));
+ memcpy(sm_p->u.version.resp_p->u.snapshot.commit_id_arr,
+ resp_p->u.version.commit_id_arr,
+ sm_p->u.version.resp_p->u.snapshot.commit_tuple_count *
+ sizeof(PVFS_id_gen_t));
}
- memcpy(sm_p->version.snapshot.tmp_id_arr,
- resp_p->u.version.tmp_id_arr,
- sm_p->version.snapshot.commit_tuple_count *
- sizeof(PVFS_id_gen_t));
- memcpy(sm_p->version.snapshot.commit_id_arr,
- resp_p->u.version.commit_id_arr,
- sm_p->version.snapshot.commit_tuple_count *
- sizeof(PVFS_id_gen_t));
break;
case PVFS_REMOVE_SNAPSHOT:
+ break;
case PVFS_COMMIT:
sm_p->u.version.resp_p->u.commit_id = resp_p->u.version.commit_id;
break;
@@ -308,6 +502,7 @@ static int version_comp_fn(
return 0;
}
+#endif
/*
* Local variables:
More information about the Pvfs2-cvs
mailing list