[Pvfs2-developers] Re: [Pvfs-developers] Pvfs client-server communication doubt

Phil Carns carns at mcs.anl.gov
Thu Oct 9 16:35:54 EDT 2008


Pai, Ankur G wrote:
> Hi Phil, Thanks a lot for replying. So here is the deal. I am working
> on an enhanced PVFS with an entirely new set of state machines added
> to create a new struct called ecreate. Its working fine (all state
> machines and everything). Unfortunately, the guy who made these
> changes is not around. I need to pass some extra parameters through
> sm_p(client) to s_op (server). So I enhanced the client side to
> include the new attribute, malloced it, initialized it and sent it
> (state machine post, BMI, blah blah). Now, on the server side, I want
> to assign it to s_op->req->u.ecreate.NEW ARG. I followed the path
> that does the assignment. It ends up in a really complicated macro.
> Also, I am using PVFS-2.6.3 which does not have pvfs2-proto.h. It
> starts with pvfs2-req-proto.c. And then I lose track of whats going
> on in an array of complicated macros. Any help would be greatly
> appreciated!

Ok great- so this is a unique request type, but the state machine work 
is already done.

The s_op->req data on the server side is populated automatically when 
the server receives a request and decodes it.  If I understand correctly 
you just need to tell PVFS how to encode and decode the new field.

If you look in src/proto/pvfs2-req-proto.h at the definition of ecreate 
(probably called PVFS_servreq_ecreate if it follows the normal naming 
convention), you should see it followed immediately by a macro called 
"endecode_fields....".  That second macro is responsible for telling 
PVFS how to encode the ecreate structure for transmission on the 
network.  If I understand correctly, you have already added your new 
field to the PVFS_servreq_ecreate structure, but the macro needs to be 
updated for it to be encoded and arrive on the server.

You can look around in that header for examples of how other structs are 
encoded, or you are welcome to cut and paste your struct definition and 
the macro following it for some help from the list.  The general 
nomenclature is that you use a macro called "endecode_fields_3_struct" 
to encode a structure with three fields in it.  For example if you added 
a field to a struct that had three originally you would need to switch 
to use "endecode_fields_4_struct" to pick up the new field.  There are 
variations with "a" and "aa" in the macro name to encode structures that 
include arrays.

> Now that I know there are people to help, let me chip in an
> additional quick question :). In some situations in my code, I do not
> want some clients to access some file (some ACL stuff). For now, I
> detect untrusted clients in final_response.c and set an
> js_p->error_code and return 1. This causes the client to just hang.
> Is there a way to prematurely return a clean error to the client?
> (This problem is low priority though)

That shouldn't cause the client to hang.  What exactly are you setting 
the error code to?

Most of the permission checking occurs in prelude.sm, which is the 
initial nested state machine that every PVFS request triggers on the 
server side.  You might want to look and see if that is a better place 
to add your test.  If the prelude.sm results in an error code, then a 
response is sent back immediately without processing the remainder of 
the main state machine.

-Phil


More information about the Pvfs2-developers mailing list