}
}
-bool ApiListener::RelayMessageOne(const Zone::Ptr& targetZone, const MessageOrigin::Ptr& origin, const Dictionary::Ptr& message)
+bool ApiListener::RelayMessageOne(const Zone::Ptr& targetZone, const MessageOrigin::Ptr& origin, const Dictionary::Ptr& message, const Endpoint::Ptr& currentMaster)
{
ASSERT(targetZone);
- bool is_master = IsMaster();
- Endpoint::Ptr master = GetMaster();
Zone::Ptr myZone = Zone::GetLocalZone();
/* only relay the message to a) the same zone, b) the parent zone and c) direct child zones */
if (targetZone != myZone && targetZone != myZone->GetParent() && targetZone->GetParent() != myZone)
return true;
+ Endpoint::Ptr myEndpoint = GetLocalEndpoint();
+
std::vector<Endpoint::Ptr> skippedEndpoints;
bool relayed = false, log_needed = false, log_done = false;
}
/* only relay message to the master if we're not currently the master */
- if (!is_master && master != endpoint) {
+ if (currentMaster != myEndpoint && currentMaster != endpoint) {
skippedEndpoints.push_back(endpoint);
continue;
}
if (!target_zone)
target_zone = Zone::GetLocalZone();
- bool need_log = !RelayMessageOne(target_zone, origin, message);
+ Endpoint::Ptr master = GetMaster();
+
+ bool need_log = !RelayMessageOne(target_zone, origin, message, master);
BOOST_FOREACH(const Zone::Ptr& zone, target_zone->GetAllParents()) {
- if (!RelayMessageOne(zone, origin, message))
+ if (!RelayMessageOne(zone, origin, message, master))
need_log = true;
}
Stream::Ptr m_LogFile;
size_t m_LogMessageCount;
- bool RelayMessageOne(const Zone::Ptr& zone, const MessageOrigin::Ptr& origin, const Dictionary::Ptr& message);
+ bool RelayMessageOne(const Zone::Ptr& zone, const MessageOrigin::Ptr& origin, const Dictionary::Ptr& message, const Endpoint::Ptr& currentMaster);
void SyncRelayMessage(const MessageOrigin::Ptr& origin, const ConfigObject::Ptr& secobj, const Dictionary::Ptr& message, bool log);
void PersistMessage(const Dictionary::Ptr& message, const ConfigObject::Ptr& secobj);