[Pvfs2-developers] Fwd: [Pvfs2-cvs] commit
by walt in pvfs2-1/src/common/misc:
module.mk.in msgpairarray.sm state-machine.h
Walt Ligon
walt at CLEMSON.EDU
Wed Jul 19 16:23:44 EDT 2006
Actually, that logic would stay pretty much the same - all it really
does is change the op code and reset the current_state for the proper
state machine based on the request - which is exactly what is needed.
I'm not entirely sure what changes I want to make yet, but yeah, that's
one idea. Right now I'm trying to consolidate and clean up the SM as
much as I can, with eye towards making opaque to the rest of the code
and ass much as I can do within the server and client with as little
interface, the better. I want those codes to have a little to do with
actually making the SM run as possible, so the more I can make things
work with fewer exceptions, the better.
It looks to me like I can make what we have there work just fine with
considerably less gunk. I have yet to dig into the client to see if I
can pull it into line too.
Thanks!
Walt
Phil Carns wrote:
> I _think_ that would work- you would just need to take out the special
> logic after the job_testcontext() call in pvfs2-server.c that currently
> prevents unexpected jobs from getting to the point that they trigger
> state transitions. Chances are there are some other little details, but
> I wouldn't expect any show stoppers. The unexpected messages behave
> like any other job at that level.
>
> Are you thinking of doing something where you start some generic state
> machines that branch off later according to the request type that was
> received?
>
> -Phil
>
> Walt Ligon wrote:
>>
>> Phil, in the server, what would you think about creating a SM with one
>> state that just calls job_bmi_unexpected and mapping an unexpected
>> recv to that SM?
>>
>> Any reason that would mess things up?
>>
>> Walt
>>
>> Walt Ligon wrote:
>>
>>> Uh, I'm confused ... "name of the state or eror code" ... do you mean
>>> in the jump table, record the name of the state you are jumping to
>>> and the state action return code that indicated it?
>>>
>>> Yeah, I don't see why not. Ading something to the union is a
>>> no-brainer. Ading stuf to the state structure is more complicated.
>>> I think once its converted to a set of structures it should be easy
>>> enough, but right now it makes things uglier. Maybe we need a -g
>>> option on the statecomp (;->) so we can compile it in or out???
>>>
>>> OK, I'l file this under todo after the concurent stuf, but don't let
>>> mee forget.
>>>
>>> Walt
>>>
>>> Sam Lang wrote:
>>>
>>>>
>>>> Hi Walt,
>>>>
>>>> I like the state machine debug mode that shows the status and error
>>>> code. That makes debugging errors quite a bit easier. This might
>>>> be feature creep, but I guess the next step is to print the name of
>>>> the state or error code instead of the number. Is that easy to
>>>> change in the statecomp code? I know all the status codes are
>>>> defined in the .sm, but I'm not sure if the parser keeps track of
>>>> them. It would be one more thing to add to the union as well :-).
>>>>
>>>> -sam
>>>>
>>>> Begin forwarded message:
>>>>
>>>>> From: CVS commit program <cvs at parl.clemson.edu>
>>>>> Date: July 16, 2006 4:42:58 PM CDT
>>>>> To: pvfs2-cvs at beowulf-underground.org
>>>>> Subject: [Pvfs2-cvs] commit by walt in pvfs2-1/src/common/misc:
>>>>> module.mk.in msgpairarray.sm state-machine.h
>>>>> Reply-To: pvfs2-internal at beowulf-underground.org
>>>>>
>>>>> Update of /projects/cvsroot/pvfs2-1/src/common/misc
>>>>> In directory parlweb1:/tmp/cvs-serv4099/src/common/misc
>>>>>
>>>>> Modified Files:
>>>>> Tag: WALT3
>>>>> module.mk.in msgpairarray.sm state-machine.h
>>>>> Log Message:
>>>>> Everything compiles. Crap! Now I have to see if it runs!!!
>>>>>
>>>>>
>>>>> Index: module.mk.in
>>>>> ===================================================================
>>>>> RCS file: /projects/cvsroot/pvfs2-1/src/common/misc/module.mk.in,v
>>>>> diff -p -u -r1.26.10.1 -r1.26.10.2
>>>>> --- module.mk.in 12 Jul 2006 20:17:48 -0000 1.26.10.1
>>>>> +++ module.mk.in 16 Jul 2006 21:42:57 -0000 1.26.10.2
>>>>> @@ -11,8 +11,8 @@ LIBSRC += $(DIR)/server-config.c \
>>>>> $(DIR)/pint-perf-counter.c \
>>>>> $(DIR)/pint-event.c \
>>>>> $(DIR)/pint-cached-config.c \
>>>>> - $(DIR)/msgpairarray.c \
>>>>> $(DIR)/pint-util.c \
>>>>> + $(DIR)/msgpairarray.c \
>>>>> $(DIR)/realpath.c \
>>>>> $(DIR)/tcache.c \
>>>>> $(DIR)/state-machine-fns.c
>>>>> @@ -26,7 +26,6 @@ SERVERSRC += $(DIR)/server-config.c \
>>>>> $(DIR)/pint-perf-counter.c \
>>>>> $(DIR)/pint-event.c \
>>>>> $(DIR)/pint-cached-config.c \
>>>>> - $(DIR)/msgpairarray.c \
>>>>> $(DIR)/pint-util.c \
>>>>> $(DIR)/tcache.c \
>>>>> $(DIR)/state-machine-fns.c
>>>>>
>>>>> Index: msgpairarray.sm
>>>>> ===================================================================
>>>>> RCS file: /projects/cvsroot/pvfs2-1/src/common/misc/msgpairarray.sm,v
>>>>> diff -p -u -r1.35 -r1.35.4.1
>>>>> --- msgpairarray.sm 30 May 2006 22:34:06 -0000 1.35
>>>>> +++ msgpairarray.sm 16 Jul 2006 21:42:57 -0000 1.35.4.1
>>>>> @@ -51,16 +51,16 @@ enum
>>>>> MSGPAIRS_RETRY = 191
>>>>> };
>>>>>
>>>>> -static int msgpairarray_init(
>>>>> - PARENT_SM *sm_p, job_status_s *js_p);
>>>>> -static int msgpairarray_post(
>>>>> - PARENT_SM *sm_p, job_status_s *js_p);
>>>>> -static int msgpairarray_post_retry(
>>>>> - PARENT_SM *sm_p, job_status_s *js_p);
>>>>> -static int msgpairarray_complete(
>>>>> - PARENT_SM *sm_p, job_status_s *js_p);
>>>>> -static int msgpairarray_completion_fn(
>>>>> - PARENT_SM *sm_p, job_status_s *js_p);
>>>>> +static PINT_sm_action msgpairarray_init(
>>>>> + struct PINT_smcb *smcp, job_status_s *js_p);
>>>>> +static PINT_sm_action msgpairarray_post(
>>>>> + struct PINT_smcb *smcp, job_status_s *js_p);
>>>>> +static PINT_sm_action msgpairarray_post_retry(
>>>>> + struct PINT_smcb *smcp, job_status_s *js_p);
>>>>> +static PINT_sm_action msgpairarray_complete(
>>>>> + struct PINT_smcb *smcp, job_status_s *js_p);
>>>>> +static PINT_sm_action msgpairarray_completion_fn(
>>>>> + struct PINT_smcb *smcp, job_status_s *js_p);
>>>>>
>>>>> %%
>>>>>
>>>>> @@ -107,14 +107,15 @@ nested machine pvfs2_msgpairarray_sm(
>>>>>
>>>>> %%
>>>>>
>>>>> -static int msgpairarray_init(PARENT_SM *sm_p,
>>>>> - job_status_s *js_p)
>>>>> +static PINT_sm_action msgpairarray_init(
>>>>> + struct PINT_smcb *smcb, job_status_s *js_p)
>>>>> {
>>>>> + struct PINT_client_sm *sm_p = PINT_sm_frame(smcb,
>>>>> PINT_FRAME_CURRENT);
>>>>> int i = 0;
>>>>> PINT_sm_msgpair_state *msg_p = NULL;
>>>>>
>>>>> gossip_debug(GOSSIP_MSGPAIR_DEBUG, "(%p) msgpairarray state:
>>>>> init "
>>>>> - "(%d msgpair(s))\n", sm_p, sm_p->msgarray_count);
>>>>> + "(%d msgpair(s))\n", smcb, sm_p->msgarray_count);
>>>>>
>>>>> assert(sm_p->msgarray_count > 0);
>>>>>
>>>>> @@ -135,7 +136,7 @@ static int msgpairarray_init(PARENT_SM *
>>>>> msg_p->retry_count = 0;
>>>>> msg_p->complete = 0;
>>>>> }
>>>>> - return 1;
>>>>> + return SM_ACTION_COMPLETE;
>>>>> }
>>>>>
>>>>> /* msgpairarray_post()
>>>>> @@ -156,9 +157,10 @@ static int msgpairarray_init(PARENT_SM *
>>>>> * (7) stores job ids for later matching
>>>>> *
>>>>> */
>>>>> -static int msgpairarray_post(PARENT_SM *sm_p,
>>>>> - job_status_s *js_p)
>>>>> +static PINT_sm_action msgpairarray_post(
>>>>> + 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, tmp = 0;
>>>>> struct server_configuration_s *server_config = NULL;
>>>>> PVFS_msg_tag_t session_tag;
>>>>> @@ -170,7 +172,7 @@ static int msgpairarray_post(PARENT_SM *
>>>>>
>>>>> gossip_debug(
>>>>> GOSSIP_MSGPAIR_DEBUG, "%s: sm %p "
>>>>> - "%d total message(s) with %d incomplete\n", __func__, sm_p,
>>>>> + "%d total message(s) with %d incomplete\n", __func__, smcb,
>>>>> sm_p->msgarray_count * 2, num_incomplete_msgpairs * 2);
>>>>>
>>>>> js_p->error_code = 0;
>>>>> @@ -244,7 +246,7 @@ static int msgpairarray_post(PARENT_SM *
>>>>> }
>>>>> gossip_lerr("msgpairarray_post: PINT_encode
>>>>> failed\n");
>>>>> js_p->error_code = ret;
>>>>> - return 1;
>>>>> + return SM_ACTION_COMPLETE;
>>>>> }
>>>>>
>>>>> /* calculate max response msg size and allocate space */
>>>>> @@ -257,7 +259,7 @@ static int msgpairarray_post(PARENT_SM *
>>>>> if (msg_p->encoded_resp_p == NULL)
>>>>> {
>>>>> js_p->error_code = -PVFS_ENOMEM;
>>>>> - return 1;
>>>>> + return SM_ACTION_COMPLETE;
>>>>> }
>>>>> local_enc_and_alloc = 1;
>>>>> }
>>>>> @@ -265,7 +267,7 @@ static int msgpairarray_post(PARENT_SM *
>>>>> session_tag = PINT_util_get_next_tag();
>>>>>
>>>>> gossip_debug(GOSSIP_MSGPAIR_DEBUG, "%s: sm %p msgpair %d: "
>>>>> - "posting recv\n", __func__, sm_p, i);
>>>>> + "posting recv\n", __func__, smcb, i);
>>>>>
>>>>> /* post receive of response; job_id stored in recv_id */
>>>>> ret = job_bmi_recv(msg_p->svr_addr,
>>>>> @@ -273,7 +275,7 @@ static int msgpairarray_post(PARENT_SM *
>>>>> msg_p->max_resp_sz,
>>>>> session_tag,
>>>>> BMI_PRE_ALLOC,
>>>>> - sm_p,
>>>>> + smcb,
>>>>> i,
>>>>> &msg_p->recv_status,
>>>>> &msg_p->recv_id,
>>>>> @@ -334,7 +336,7 @@ static int msgpairarray_post(PARENT_SM *
>>>>> assert(ret == 0);
>>>>>
>>>>> gossip_debug(GOSSIP_MSGPAIR_DEBUG, "%s: sm %p msgpair %d: "
>>>>> - "posting send\n", __func__, sm_p, i);
>>>>> + "posting send\n", __func__, smcb, i);
>>>>>
>>>>> /* post send of request; job_id stored in send_id */
>>>>> ret = job_bmi_send_list(msg_p->encoded_req.dest,
>>>>> @@ -345,7 +347,7 @@ static int msgpairarray_post(PARENT_SM *
>>>>> session_tag,
>>>>> msg_p->encoded_req.buffer_type,
>>>>> 1,
>>>>> - sm_p,
>>>>> + smcb,
>>>>> sm_p->msgarray_count+i,
>>>>> &msg_p->send_status,
>>>>> &msg_p->send_id,
>>>>> @@ -392,35 +394,37 @@ static int msgpairarray_post(PARENT_SM *
>>>>> * cases); jump straight to final completion function.
>>>>> */
>>>>> js_p->error_code = MSGPAIRS_COMPLETE;
>>>>> - return 1;
>>>>> + return SM_ACTION_COMPLETE;
>>>>> }
>>>>>
>>>>> /* we are still waiting on operations to complete, next state
>>>>> * transition will handle them
>>>>> */
>>>>> - return 0;
>>>>> + return SM_ACTION_DEFERED;
>>>>> }
>>>>>
>>>>> -static int msgpairarray_post_retry(PARENT_SM *sm_p,
>>>>> - job_status_s *js_p)
>>>>> +static PINT_sm_action msgpairarray_post_retry(
>>>>> + struct PINT_smcb *smcb, job_status_s *js_p)
>>>>> {
>>>>> + struct PINT_client_sm *sm_p = PINT_sm_frame(smcb,
>>>>> PINT_FRAME_CURRENT);
>>>>> job_id_t tmp_id;
>>>>>
>>>>> gossip_debug(GOSSIP_MSGPAIR_DEBUG, "%s: sm %p, wait %d ms\n",
>>>>> - __func__, sm_p, sm_p->msgarray_params.retry_delay);
>>>>> + __func__, smcb, sm_p->msgarray_params.retry_delay);
>>>>>
>>>>> return job_req_sched_post_timer(
>>>>> sm_p->msgarray_params.retry_delay,
>>>>> - sm_p, 0, js_p, &tmp_id,
>>>>> + smcb, 0, js_p, &tmp_id,
>>>>> sm_p->msgarray_params.job_context);
>>>>> }
>>>>>
>>>>> -static int msgpairarray_complete(PARENT_SM *sm_p,
>>>>> - job_status_s *js_p)
>>>>> +static PINT_sm_action msgpairarray_complete(
>>>>> + 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_MSGPAIR_DEBUG,
>>>>> "%s: sm %p status_user_tag %d msgarray_count %d\n",
>>>>> - __func__, sm_p, (int) js_p->status_user_tag,
>>>>> sm_p->msgarray_count);
>>>>> + __func__, smcb, (int) js_p->status_user_tag,
>>>>> sm_p->msgarray_count);
>>>>>
>>>>>
>>>>> /* match operation with something in the msgpair array */
>>>>> @@ -471,7 +475,7 @@ static int msgpairarray_complete(PARENT_
>>>>> /* decrement comp_ct until all operations have completed */
>>>>> if (--sm_p->msgarray_params.comp_ct > 0)
>>>>> {
>>>>> - return 0;
>>>>> + return SM_ACTION_DEFERED;
>>>>> }
>>>>>
>>>>> assert(sm_p->msgarray_params.comp_ct == 0);
>>>>> @@ -479,12 +483,13 @@ static int msgpairarray_complete(PARENT_
>>>>> " msgpairarray: all operations complete\n");
>>>>>
>>>>> js_p->error_code = MSGPAIRS_COMPLETE;
>>>>> - return 1;
>>>>> + return SM_ACTION_COMPLETE;
>>>>> }
>>>>>
>>>>> -static int msgpairarray_completion_fn(PARENT_SM *sm_p,
>>>>> - job_status_s *js_p)
>>>>> +static PINT_sm_action msgpairarray_completion_fn(
>>>>> + 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;
>>>>> int need_retry = 0;
>>>>> struct PINT_decoded_msg decoded_resp;
>>>>> @@ -498,7 +503,7 @@ static int msgpairarray_completion_fn(PA
>>>>> js_p->error_code = 0;
>>>>>
>>>>> gossip_debug(GOSSIP_MSGPAIR_DEBUG, "(%p) msgpairarray state: "
>>>>> - "completion_fn\n", sm_p);
>>>>> + "completion_fn\n", smcb);
>>>>>
>>>>> for (i = 0; i < sm_p->msgarray_count; i++)
>>>>> {
>>>>> @@ -551,7 +556,7 @@ static int msgpairarray_completion_fn(PA
>>>>> * a per message pair basis. Also store some non-zero
>>>>> * (failure) value in js_p->error_code if we see one.
>>>>> */
>>>>> - msg_p->op_status = msg_p->comp_fn(sm_p, resp_p, i);
>>>>> + msg_p->op_status = msg_p->comp_fn(smcb, resp_p, i);
>>>>> if (msg_p->op_status != 0)
>>>>> {
>>>>> js_p->error_code = msg_p->op_status;
>>>>> @@ -588,7 +593,7 @@ static int msgpairarray_completion_fn(PA
>>>>> {
>>>>> PVFS_perror_gossip("Failed to free msgpair resources",
>>>>> ret);
>>>>> js_p->error_code = ret;
>>>>> - return 1;
>>>>> + return SM_ACTION_COMPLETE;
>>>>> }
>>>>>
>>>>> msg_p->encoded_resp_p = NULL;
>>>>> @@ -601,7 +606,7 @@ static int msgpairarray_completion_fn(PA
>>>>> msg_p->complete = 1;
>>>>>
>>>>> gossip_debug(GOSSIP_MSGPAIR_DEBUG, "%s: sm %p msgpair %d "
>>>>> - "marked complete\n", __func__, sm_p, i);
>>>>> + "marked complete\n", __func__, smcb, i);
>>>>> }
>>>>>
>>>>> if (need_retry) {
>>>>> @@ -665,7 +670,7 @@ static int msgpairarray_completion_fn(PA
>>>>>
>>>>> }
>>>>> }
>>>>> - return 1;
>>>>> + return SM_ACTION_COMPLETE;
>>>>> }
>>>>>
>>>>> /*********************************************************************
>>>>>
>>>>>
>>>>> Index: state-machine.h
>>>>> ===================================================================
>>>>> RCS file: /projects/cvsroot/pvfs2-1/src/common/misc/state-machine.h,v
>>>>> diff -p -u -r1.12.4.6 -r1.12.4.7
>>>>> --- state-machine.h 15 Jul 2006 17:06:07 -0000 1.12.4.6
>>>>> +++ state-machine.h 16 Jul 2006 21:42:57 -0000 1.12.4.7
>>>>> @@ -9,6 +9,7 @@
>>>>>
>>>>> #include <state-machine-values.h>
>>>>> #include "job.h"
>>>>> +#include "msgpairarray.h"
>>>>>
>>>>> /* STATE-MACHINE.H
>>>>> *
>>>>>
>>>>> _______________________________________________
>>>>> Pvfs2-cvs mailing list
>>>>> Pvfs2-cvs at beowulf-underground.org
>>>>> http://www.beowulf-underground.org/mailman/listinfo/pvfs2-cvs
>>>>>
>>>>
>>>> _______________________________________________
>>>> Pvfs2-developers mailing list
>>>> Pvfs2-developers at beowulf-underground.org
>>>> http://www.beowulf-underground.org/mailman/listinfo/pvfs2-developers
>>>
>>> _______________________________________________
>>> Pvfs2-developers mailing list
>>> Pvfs2-developers at beowulf-underground.org
>>> http://www.beowulf-underground.org/mailman/listinfo/pvfs2-developers
>
> _______________________________________________
> Pvfs2-developers mailing list
> Pvfs2-developers at beowulf-underground.org
> http://www.beowulf-underground.org/mailman/listinfo/pvfs2-developers
More information about the Pvfs2-developers
mailing list