[ 
https://issues.apache.org/jira/browse/QPID-2341?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12801892#action_12801892
 ] 

Gordon Sim commented on QPID-2341:
----------------------------------

I don't have a better idea (at least not a concrete one!) and I concede that 
helping to locate these sorts of bugs would be valuable. It does grate somewhat 
though to have cluster specific assertions sprinkled throughout the code. It 
certainly wouldn't be feasible to require this sort of 'contract' for every 
'plugin'.

> Annotate replicated broker classes with assertions.
> ---------------------------------------------------
>
>                 Key: QPID-2341
>                 URL: https://issues.apache.org/jira/browse/QPID-2341
>             Project: Qpid
>          Issue Type: Improvement
>          Components: C++ Broker
>    Affects Versions: 0.6
>            Reporter: Alan Conway
>            Assignee: Alan Conway
>
> A clustered broker maintains consistency of replicated objects by only 
> modifying them in a "replication safe" thread context: while receiving an 
> update or dispatching cluster events.
> A repeated source of cluster bugs is broker code that unwittingly modifies 
> replicated objects in an unsafe context such as a timer thread. These bugs 
> are intermittent race conditions that are hard to track down.
> Proposal: annotate broker code with assertions to identify code that modifies 
> replicated state and log/abort if such code is called in an unsafe context:
> // New class:
> namespace broker {
> class Replicated {
>  protected: 
>    void assertReplicationSafe();
> }
> // Existing classes
> class Queue : public Replicated { // Mark Queue as state that may be 
> replicated.
>   void someQueueModifier() {
>     assertReplicationSafe(); // This function should only be called in 
> replication-safe context.
>  }
> The assertion is cheap: just testing a thread-local boolean value. In a 
> non-clustered broker it does nothing.
> This technique has already proven valuable in debugging a recent bug, putting 
> the assertions permanently in the code should speed debugging of future bugs.
> This would be the beginning of a formal contract between the broker code and 
> the cluster that should make things more maintainable in the long run.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


---------------------------------------------------------------------
Apache Qpid - AMQP Messaging Implementation
Project:      http://qpid.apache.org
Use/Interact: mailto:[email protected]

Reply via email to