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]