Fix: State file doesn't work for generated service objects.

This commit is contained in:
Gunnar Beutner 2013-08-29 16:53:57 +02:00
parent fa9ab6c768
commit 91724814d8
8 changed files with 41 additions and 9 deletions

View File

@ -68,9 +68,17 @@ Dictionary::Ptr DynamicObject::Serialize(int attributeTypes) const
void DynamicObject::Deserialize(const Dictionary::Ptr& update, int attributeTypes)
{
ASSERT(!OwnsLock());
ObjectLock olock(this);
InternalDeserialize(update, attributeTypes);
{
ObjectLock olock(this);
InternalDeserialize(update, attributeTypes);
}
if (attributeTypes & Attribute_Config)
OnConfigLoaded();
if (attributeTypes & Attribute_State)
OnStateLoaded();
}
void DynamicObject::InternalSerialize(const Dictionary::Ptr& bag, int attributeTypes) const
@ -176,6 +184,16 @@ void DynamicObject::Stop(void)
OnStopped(GetSelf());
}
void DynamicObject::OnConfigLoaded(void)
{
/* Nothing to do here. */
}
void DynamicObject::OnStateLoaded(void)
{
/* Nothing to do here. */
}
Value DynamicObject::InvokeMethod(const String& method,
const std::vector<Value>& arguments)
{

View File

@ -102,6 +102,9 @@ protected:
virtual void InternalSerialize(const Dictionary::Ptr& bag, int attributeTypes) const;
virtual void InternalDeserialize(const Dictionary::Ptr& bag, int attributeTypes);
virtual void OnConfigLoaded(void);
virtual void OnStateLoaded(void);
private:
String m_Name;
String m_Type;

View File

@ -56,7 +56,10 @@ void Host::Start(void)
hg->AddMember(GetSelf());
}
}
}
void Host::OnConfigLoaded(void)
{
UpdateSlaveServices();
}

View File

@ -127,6 +127,8 @@ protected:
virtual void Start(void);
virtual void Stop(void);
virtual void OnConfigLoaded(void);
virtual void InternalSerialize(const Dictionary::Ptr& bag, int attributeTypes) const;
virtual void InternalDeserialize(const Dictionary::Ptr& bag, int attributeTypes);

View File

@ -44,6 +44,12 @@ void Service::Start(void)
SetSchedulingOffset(rand());
UpdateNextCheck();
AddDowntimesToCache();
AddCommentsToCache();
}
void Service::OnConfigLoaded(void)
{
Array::Ptr groups = GetGroups();
if (groups) {
@ -55,12 +61,11 @@ void Service::Start(void)
}
}
AddDowntimesToCache();
AddCommentsToCache();
Host::Ptr host = GetHost();
if (host)
host->AddService(GetSelf());
UpdateSlaveNotifications();
}
String Service::GetDisplayName(void) const

View File

@ -332,6 +332,8 @@ public:
protected:
virtual void Start(void);
virtual void OnConfigLoaded(void);
virtual void InternalSerialize(const Dictionary::Ptr& bag, int attributeTypes) const;
virtual void InternalDeserialize(const Dictionary::Ptr& bag, int attributeTypes);

View File

@ -27,10 +27,8 @@ using namespace icinga;
REGISTER_TYPE(User);
void User::Start(void)
void User::OnConfigLoaded(void)
{
DynamicObject::Start();
Array::Ptr groups = GetGroups();
if (groups) {

View File

@ -57,9 +57,10 @@ public:
virtual bool ResolveMacro(const String& macro, const Dictionary::Ptr& cr, String *result) const;
protected:
virtual void Start(void);
virtual void Stop(void);
virtual void OnConfigLoaded(void);
virtual void InternalSerialize(const Dictionary::Ptr& bag, int attributeTypes) const;
virtual void InternalDeserialize(const Dictionary::Ptr& bag, int attributeTypes);