Fix object resync issues

refs #11684
This commit is contained in:
Gunnar Beutner 2016-10-11 10:53:51 +02:00
parent d264a0dab8
commit 0145a32e58
3 changed files with 28 additions and 5 deletions

View File

@ -107,7 +107,11 @@ Value ApiListener::ConfigUpdateObjectAPIHandler(const MessageOrigin::Ptr& origin
String config = params->Get("config"); String config = params->Get("config");
bool newObject = false;
if (!object && !config.IsEmpty()) { if (!object && !config.IsEmpty()) {
newObject = true;
/* object does not exist, create it through the API */ /* object does not exist, create it through the API */
Array::Ptr errors = new Array(); Array::Ptr errors = new Array();
@ -136,8 +140,8 @@ Value ApiListener::ConfigUpdateObjectAPIHandler(const MessageOrigin::Ptr& origin
if (!object) if (!object)
return Empty; return Empty;
/* update object attributes if version was changed */ /* update object attributes if version was changed or if this is a new object */
if (objVersion <= object->GetVersion()) { if (newObject || objVersion <= object->GetVersion()) {
Log(LogNotice, "ApiListener") Log(LogNotice, "ApiListener")
<< "Discarding config update for object '" << object->GetName() << "Discarding config update for object '" << object->GetName()
<< "': Object version " << std::fixed << object->GetVersion() << "': Object version " << std::fixed << object->GetVersion()
@ -337,8 +341,14 @@ void ApiListener::UpdateConfigObject(const ConfigObject::Ptr& object, const Mess
if (client) if (client)
JsonRpc::SendMessage(client->GetStream(), message); JsonRpc::SendMessage(client->GetStream(), message);
else else {
Zone::Ptr target = static_pointer_cast<Zone>(object->GetZone());
if (!target)
target = Zone::GetLocalZone();
RelayMessage(origin, object, message, false); RelayMessage(origin, object, message, false);
}
} }
@ -379,8 +389,14 @@ void ApiListener::DeleteConfigObject(const ConfigObject::Ptr& object, const Mess
if (client) if (client)
JsonRpc::SendMessage(client->GetStream(), message); JsonRpc::SendMessage(client->GetStream(), message);
else else {
RelayMessage(origin, object, message, false); Zone::Ptr target = static_pointer_cast<Zone>(object->GetZone());
if (!target)
target = Zone::GetLocalZone();
RelayMessage(origin, target, message, false);
}
} }
/* Initial sync on connect for new endpoints */ /* Initial sync on connect for new endpoints */

View File

@ -164,6 +164,12 @@ void ApiListener::Start(bool runtimeCreated)
OnMasterChanged(true); OnMasterChanged(true);
} }
void ApiListener::Stop(bool runtimeDeleted)
{
boost::mutex::scoped_lock lock(m_LogLock);
CloseLogFile();
}
ApiListener::Ptr ApiListener::GetInstance(void) ApiListener::Ptr ApiListener::GetInstance(void)
{ {
return m_Instance; return m_Instance;

View File

@ -104,6 +104,7 @@ protected:
virtual void OnConfigLoaded(void) override; virtual void OnConfigLoaded(void) override;
virtual void OnAllConfigLoaded(void) override; virtual void OnAllConfigLoaded(void) override;
virtual void Start(bool runtimeCreated) override; virtual void Start(bool runtimeCreated) override;
virtual void Stop(bool runtimeDeleted) override;
virtual void ValidateTlsProtocolmin(const String& value, const ValidationUtils& utils) override; virtual void ValidateTlsProtocolmin(const String& value, const ValidationUtils& utils) override;