From b05c4a84c84fbbef2a410338a2d08eb255e33ca9 Mon Sep 17 00:00:00 2001 From: Kenneth Anthony Giusti Date: Fri, 30 Apr 2010 16:58:36 +0000 Subject: QMF: Agent now sends class indications for schema added after attachement completes. git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk/qpid@939736 13f79535-47bb-0310-9956-ffa450edef68 --- cpp/src/qmf/engine/Agent.cpp | 31 ++++++++++++++++++++++++++----- 1 file changed, 26 insertions(+), 5 deletions(-) (limited to 'cpp/src') diff --git a/cpp/src/qmf/engine/Agent.cpp b/cpp/src/qmf/engine/Agent.cpp index 7667213e5e..64c5961385 100644 --- a/cpp/src/qmf/engine/Agent.cpp +++ b/cpp/src/qmf/engine/Agent.cpp @@ -127,6 +127,7 @@ namespace engine { deque eventQueue; deque xmtQueue; map contextMap; + bool attachComplete; static const char* QMF_EXCHANGE; static const char* DIR_EXCHANGE; @@ -235,7 +236,7 @@ AgentImpl::AgentImpl(char* _label, bool i) : label(_label), queueName("qmfa-"), internalStore(i), nextTransientId(1), requestedBrokerBank(0), requestedAgentBank(0), assignedBrokerBank(0), assignedAgentBank(0), - bootSequence(1), nextObjectId(1), nextContextNum(1) + bootSequence(1), nextObjectId(1), nextContextNum(1), attachComplete(false) { queueName += label; } @@ -425,35 +426,53 @@ void AgentImpl::queryComplete(uint32_t sequence) void AgentImpl::registerClass(SchemaObjectClass* cls) { Mutex::ScopedLock _lock(lock); + bool newPackage = false; map::iterator iter = packages.find(cls->getClassKey()->getPackageName()); if (iter == packages.end()) { packages[cls->getClassKey()->getPackageName()] = ClassMaps(); iter = packages.find(cls->getClassKey()->getPackageName()); - // TODO: Indicate this package if connected + newPackage = true; } AgentClassKey key(cls->getClassKey()->getClassName(), cls->getClassKey()->getHash()); iter->second.objectClasses[key] = cls; - // TODO: Indicate this schema if connected. + // Indicate this new schema if connected. + + if (attachComplete) { + + if (newPackage) { + sendPackageIndicationLH(iter->first); + } + sendClassIndicationLH(CLASS_OBJECT, iter->first, key); + } } void AgentImpl::registerClass(SchemaEventClass* cls) { Mutex::ScopedLock _lock(lock); + bool newPackage = false; map::iterator iter = packages.find(cls->getClassKey()->getPackageName()); if (iter == packages.end()) { packages[cls->getClassKey()->getPackageName()] = ClassMaps(); iter = packages.find(cls->getClassKey()->getPackageName()); - // TODO: Indicate this package if connected + newPackage = true; } AgentClassKey key(cls->getClassKey()->getClassName(), cls->getClassKey()->getHash()); iter->second.eventClasses[key] = cls; - // TODO: Indicate this schema if connected. + // Indicate this new schema if connected. + + if (attachComplete) { + + if (newPackage) { + sendPackageIndicationLH(iter->first); + } + sendClassIndicationLH(CLASS_EVENT, iter->first, key); + } } const ObjectId* AgentImpl::addObject(Object&, uint64_t) @@ -662,6 +681,8 @@ void AgentImpl::handleAttachResponse(Buffer& inBuffer) cIter != cMap.eventClasses.end(); cIter++) sendClassIndicationLH(CLASS_EVENT, pIter->first, cIter->first); } + + attachComplete = true; } void AgentImpl::handlePackageRequest(Buffer&) -- cgit v1.2.1