[Gluster-devel] rpc problems when using syncops in callbacks

Krishnan Parthasarathi kparthas at redhat.com
Mon Apr 29 09:00:50 UTC 2013


Fog,

On 04/29/2013 01:57 PM, fog - wrote:
> Hello Avati,
>
> I am wrapping the syncop call in a synctask_new (otherwise glusterFS 
> will run into a null pointer @ synctask_get in the SYNCOP macro & 
> crash). Below is some code to show how I do it currently to test the 
> syncops.
>
> typedef struct{
>     xlator_t *this;    loc_t *loc;    dict_t *dic;
> }syncstore_args;
>
> int32_t __xattr_store_sync(void* data)
> {
>     syncstore_args *args = (syncstore_args*)data;
>     return syncop_setxattr(FIRST_CHILD(args->this), args->loc, 
> args->dic, 0);
> }
>
> int32_t xattr_store_sync(xlator_t *this, call_frame_t *frame, loc_t 
> *loc, dict_t *dic)
> {
>     syncstore_args args = {this, loc, dic};
>     return synctask_new(this->ctx->env, __xattr_store_sync, NULL, 
> NULL, &args);
If you don't provide a synctask_cbk_t to synctask_new, you are using 
synctask in a 'blocking' mode.
That is, the thread calling synctask_new would block until the 
synctask_fn_t function (ie, __xattr_store_sync) returns.
An alternative way to do this would be,

int32_t xattr_store_sync(xlator_t *this, call_frame_t *frame, loc_t 
*loc, dict_t *dic)
{
     syncstore_args args = {this, loc, dic};
     return synctask_new(this->ctx->env, __xattr_store_sync, 
__xattr_store_sync_cbk, NULL, &args);
}

int32_t __xattr_store_sync_cbk (int ret, /*and the other args*/)
{
     // Your code goes here
     return ret;
}

Now, all file operations performed using syncop_* inside 
__xattr_store_sync would have the synchronous flavour, while leaving the 
calling thread (thread calling xattr_store_sync fn) 'free'. This should 
avoid the hang issue.

HTH,
krish


> }
>
> ------------------------------------------------------------------------
> Date: Mon, 29 Apr 2013 00:19:11 -0700
> Subject: Re: [Gluster-devel] rpc problems when using syncops in callbacks
> From: anand.avati at gmail.com
> To: fog_is_my_name at hotmail.com
> CC: gluster-devel at nongnu.org
>
> Note that you need to place your syncop code in a synctask function 
> strictly within a syncenv (by calling synctask_new(). You're probably 
> calling syncop_XXX() directly in your xlator code?
>
> Avati
>
>
> On Fri, Apr 26, 2013 at 2:40 AM, fog - <fog_is_my_name at hotmail.com 
> <mailto:fog_is_my_name at hotmail.com>> wrote:
>
>     Hello everyone,
>
>     I am trying to use syncops in a custom translator to keep my code
>     at least borderline readable, but I am having limited success.
>
>     Problem Symptoms:
>     Using a syncop in a regular fop is fine. However, in a callback it
>     causes a 'freeze' (synctask_yield called by the SYNCOP macro
>     doesn't return).
>
>     What seems to be the Problem:
>     Looking at the traces, there is no corresponding trace from
>     rpc_clnt_reply_init on the client to the trace from
>     rpcsvc_submit_generic on the server. In other words, the rpc reply
>     gets sent but isn't correctly received. Obviously this is not
>     really a networking problem but something else... I'd guess it's a
>     deadlock somewhere on the client?
>     From the point of the syncop call onwards the client doesn't 'get'
>     any rpc replies any more (the next GlusterFS Handshake sent by the
>     client, which is received by the server and replied to, leads to a
>     disconnection accordingly).
>
>     Again: This problem is only occurring when calling a syncop from a
>     callback function inside my translator, if I call the same syncop
>     in a fop call it completes fine.
>
>     I hope you can make sense out of the above problem description.
>     Thanks for your time ~
>
>
>     _______________________________________________
>     Gluster-devel mailing list
>     Gluster-devel at nongnu.org <mailto:Gluster-devel at nongnu.org>
>     https://lists.nongnu.org/mailman/listinfo/gluster-devel
>
>
>
>
> _______________________________________________
> Gluster-devel mailing list
> Gluster-devel at nongnu.org
> https://lists.nongnu.org/mailman/listinfo/gluster-devel

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://supercolony.gluster.org/pipermail/gluster-devel/attachments/20130429/75db7772/attachment-0001.html>


More information about the Gluster-devel mailing list