[Gluster-devel] how to distinguish whether the current xlator is used in the client or the server?
Mingfan Lu
mingfan.lu at gmail.com
Tue Dec 17 09:42:45 UTC 2013
1. use option is a good idea
2. we could also traverse the this->children to see whether there is a
xlator with type == protocol/client (depth first!)
and save cache value in conf->use_with_client
gf_boolean_t
could_use_xlator(xlator_t *this)
{
struct ios_conf *conf = NULL;
gf_boolean_t ret_value = _gf_false;
conf = this->private;
if(!conf) {
gf_log(this->name, GF_LOG_INFO, "configuration should not be
null when check whether on client xlator");
return ret_value;
}
LOCK(&conf->lock);
{
if (conf->check_use_client == _gf_true) {
gf_log(this->name, GF_LOG_INFO, "use the cached
value");
ret_value = conf->use_with_client;
} else {
conf->use_with_client = ret_value =
trav_children(this);
conf->check_use_client = _gf_true;
}
}
UNLOCK(&conf->lock);
return ret_value;
}
gf_boolean_t
trav_children(xlator_t *this)
{
xlator_list_t * children = this->children;
while(children)
{
gf_log(this->name, GF_LOG_INFO, "children - name %s type %s ",
children->xlator->name, children->xlator->type);
if (children->xlator->init_succeeded &&
strcmp(children->xlator->type, "protocol/client") == 0) {
return _gf_true;
}
if(trav_children(children -> xlator) == _gf_true) {
return _gf_true;
}
children = children->next;
}
return _gf_false;
}
and then,
On Tue, Dec 17, 2013 at 2:31 AM, Vijay Bellur <vbellur at redhat.com> wrote:
> On 12/16/2013 04:20 PM, Pranith Kumar Karampuri wrote:
>
>> hi Mingfan Lu,
>> xlators are not supposed to know which part of the stack they belong
>> to. If you think the functionality needs to be different when it is in
>> server vs client side. Would writing two different xlators one for
>> client side and the other for server side make sense?
>>
>
> You can also consider having optional behavior and enable the appropriate
> option in the client/server volume files for the xlator to behave
> differently. For e.g. the compression translator is loaded in both client
> and server stacks, but it performs compression/de-compression for the
> appropriate fops by looking at option 'mode'.
>
> -Vijay
>
>
>
>> Pranith.
>> ----- Original Message -----
>>
>>> From: "Mingfan Lu" <mingfan.lu at gmail.com>
>>> To: gluster-devel at nongnu.org
>>> Sent: Monday, December 16, 2013 2:55:24 PM
>>> Subject: [Gluster-devel] how to distinguish whether the current xlator
>>> is used in the client or the server?
>>>
>>> When I write a xlator for glusterfs, the xlator could be used for client
>>> and
>>> server. but when being used in server and client, the behavior of the
>>> xlator
>>> could be some-what differrent. How could I know whether the xlator is
>>> used
>>> in glusterfs or glusterfsd when I developing the xlator? then I could
>>> tune
>>> the code path for client and server.
>>>
>>> _______________________________________________
>>> Gluster-devel mailing list
>>> 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/20131217/b95cb429/attachment-0001.html>
More information about the Gluster-devel
mailing list