Re: [RFC] changing libquorum API

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 12/13/2011 11:16 AM, Fabio M. Di Nitto wrote:
> On 12/13/2011 5:55 PM, Steven Dake wrote:
>> On 12/13/2011 07:17 AM, Fabio M. Di Nitto wrote:
>>> Quoting:
>>>
>>> https://github.com/corosync/corosync/commit/ebbba5b05b05a0943dce50be16282657a31c2e05
>>>
>>> corosync internal theory of operation is that without a quorum provider
>>> the cluster is always quorate. This is fine for membership free clusters
>>> but it does pose a problem for applications that need membership and
>>> "real" quorum.
>>>
>>> this change add quorum_type to quorum_initialize call to return QUORUM_FREE
>>> or QUORUM_SET. Applications can then make their own decisions to error out
>>> or continue operating.
>>>
>>> The only other way to know if a quorum provider is enabled/configured is
>>> to poke at confdb/objdb, but adds an unnecessary burden to applications
>>> that really don't need to use an entire library for a boolean value.
>>>
>>> I am clearly at RFC stage since variable/const names are up for
>>> discussion/improvement.
>>>
>>> The other option to approach this issue is to use a 3 state is_quorate,
>>> but that can break applications (and corosync internal) in a more subtle
>>> way. By changing the API in such a simple way, old applications will
>>> fail to build (in one function only) and will get the info they need
>>> right away.
>>>
>>
>> Fabio,
>>
>> Type concept looks ok, but don't want to change quorum_initialize unless
>> absolutely necessary.
>>
>> Can you make a case for changing quorum_initialize directly rather then
>> adding a :
>>
>> "quorum_type_get() which could be called directly after?  I realize it
>> is two calls, but then ABI remains backward compat.
>>
> 
> Because not all downstreams will add that call because their piece of
> software will keep building just fine and they don´t know what they are
> getting basically.
> 
> The problem, as I see it, is that without a quorum provide (that being
> ykd or majority or cman) corosync is always quorate and quorum
> notifications are not dispatched as there is really never a change
> there. This also causes application to hang in some cases.
> 
> If an application needs quorum provider and membership, they need to
> know that. Either we change init call or each application needs to do
> some fancy calls into the objdb/cmap (that IMHO is overloaded).
> 
>> Another option would be to add a qourum_type notification callback
>> (since this wouldn't break the ABI backwards compatibility) but this
>> would probably have to be coupled with qourum_type_get to be useful for
>> users.
> 
> I am not sure I see the point in adding it to a call back because we
> can´t change quorum provider dynamically. It´s set in stone at startup
> and might as well know right away if it´s an ok type or not.
> 
> I am up to discuss other options.. but I think this is the safest one
> that will propagate the concept of quorum_type immediately.
> 
> I also investigated the possibility of using a numerated is_quorate around:
> 
> QUORUM_ALWAYS_QUORATE -1
> QUORUM_NOT_QUORATE     0
> QUORUM_IS_QUORATE      1
> 
> but that´s even worst because it does require investigation of a lot of
> code to make sure we don´t break anything in a subtle way.
> 
> Fabio
> 

Ok argument makes sense.  Could you do me a favor though, and place it
as the 3rd parameter (the type).

Regards
-steve
_______________________________________________
discuss mailing list
discuss@xxxxxxxxxxxx
http://lists.corosync.org/mailman/listinfo/discuss



[Index of Archives]     [Linux Clusters]     [Corosync Project]     [Linux USB Devel]     [Linux Audio Users]     [Photo]     [Yosemite News]    [Yosemite Photos]    [Linux Kernel]     [Linux SCSI]     [X.Org]

  Powered by Linux