qpid-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Alan Conway (JIRA)" <qpid-...@incubator.apache.org>
Subject [jira] Updated: (QPID-2341) Annotate replicated broker classes with assertions.
Date Mon, 18 Jan 2010 22:16:54 GMT

     [ https://issues.apache.org/jira/browse/QPID-2341?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]

Alan Conway updated QPID-2341:
------------------------------

    Attachment: cluster_safe.patch

I agree. It's also not obvious where or how widely they should be sprinkled.

Attached patch is slightly simplified (no base class, just assertions) and adds assertions
just to Queue and SemanticState which are the main areas we care about. 

> 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
>         Attachments: cluster_safe.patch
>
>
> 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:dev-subscribe@qpid.apache.org


Mime
View raw message