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

fog - fog_is_my_name at hotmail.com
Mon Apr 29 08:27:30 UTC 2013


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);
}

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> 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

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/078c42ed/attachment-0001.html>


More information about the Gluster-devel mailing list