[Gluster-devel] volfile init/reconfigure have been working by accident?

Pranith Kumar Karampuri pkarampu at redhat.com
Thu Jul 14 02:58:10 UTC 2016


hi,
        I wanted to remove 'get_new_dict()', 'dict_destroy()' usage through
out the code base to prevent people from using it wrong. Regression for
that patch http://review.gluster.org/13183 kept failing and I found that
the 'xl->options' dictionary is created using get_new_dict() i.e. it
doesn't have any refs. And in xlator_members_free() we try to destroy it
using dict_unref() i.e. ref count becomes '-1' and the dictionary doesn't
get destroyed. so every reconfigure is leaking dictionaries. So all the
options which use string options actually point to the values in these
dictionaries. Initially I thought we can have latest reconfigured options
dictionary also stored in new member 'xl->reconfigured_options' but the
problem is reconfigure can partially succeed leading to dilemma about which
options succeeded/failed and which dictionary to keep around. Failing in
reconfigure doesn't stop the brick. At the moment the only way out I see is
to perform [de]allocation of the string, bool(we can prevent for bool)
options, may be there are more, I need to check. But this becomes one more
big patch('fini' should GF_FREE all these options), so wondering if anyone
has any other thoughts on fixing this properly without a lot of code
changes.

-- 
Pranith
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.gluster.org/pipermail/gluster-devel/attachments/20160714/f0a13cd6/attachment.html>


More information about the Gluster-devel mailing list