diff --git a/lib/remote/zone.cpp b/lib/remote/zone.cpp index d856b7d55..ded60f621 100644 --- a/lib/remote/zone.cpp +++ b/lib/remote/zone.cpp @@ -21,6 +21,7 @@ #include "remote/zone.tcpp" #include "remote/jsonrpcconnection.hpp" #include "base/objectlock.hpp" +#include "base/logger.hpp" #include using namespace icinga; @@ -121,3 +122,14 @@ Zone::Ptr Zone::GetLocalZone(void) return local->GetZone(); } +void Zone::ValidateEndpointsRaw(const Array::Ptr& value, const ValidationUtils& utils) +{ + ObjectImpl::ValidateEndpointsRaw(value, utils); + + if (value && value->GetLength() > 2) { + Log(LogWarning, "Zone") + << "The Zone object '" << GetName() << "' has more than two endpoints." + << " Due to a known issue this type of configuration is strongly" + << " discouraged and may cause Icinga to use excessive amounts of CPU time."; + } +} diff --git a/lib/remote/zone.hpp b/lib/remote/zone.hpp index 4d00a514a..c633d4967 100644 --- a/lib/remote/zone.hpp +++ b/lib/remote/zone.hpp @@ -48,6 +48,9 @@ public: static Zone::Ptr GetLocalZone(void); +protected: + virtual void ValidateEndpointsRaw(const Array::Ptr& value, const ValidationUtils& utils) override; + private: Zone::Ptr m_Parent; std::vector m_AllParents;