mirror of
https://github.com/Icinga/icinga2.git
synced 2025-07-25 22:54:57 +02:00
Disallow stage deletions during reload
Co-Authored-By: Yonas Habteab <yonas.habteab@icinga.com> Once the new worker process has read the config, it also includes a `include */include.conf` statement within the config packages root directory, and from there on we must not allow to delete any stage directory from the config package. Otherwise, when the worker actually evaluates that include statement, it will fail to find the directory where the include file is located, or the `active.conf` file, which is included from each stage's `include.conf` file, thus causing the worker fail.
This commit is contained in:
parent
1ac4d83963
commit
73f3fdbc02
@ -2,6 +2,7 @@
|
||||
|
||||
#include "remote/configpackageshandler.hpp"
|
||||
#include "remote/configpackageutility.hpp"
|
||||
#include "remote/configobjectslock.hpp"
|
||||
#include "remote/httputility.hpp"
|
||||
#include "remote/filterutility.hpp"
|
||||
#include "base/exception.hpp"
|
||||
@ -157,6 +158,13 @@ void ConfigPackagesHandler::HandleDelete(
|
||||
return;
|
||||
}
|
||||
|
||||
ConfigObjectsSharedLock lock(std::try_to_lock);
|
||||
|
||||
if (!lock) {
|
||||
HttpUtility::SendJsonError(response, params, 503, "Icinga is reloading");
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
ConfigPackageUtility::DeletePackage(packageName);
|
||||
} catch (const std::exception& ex) {
|
||||
|
@ -2,6 +2,7 @@
|
||||
|
||||
#include "remote/configstageshandler.hpp"
|
||||
#include "remote/configpackageutility.hpp"
|
||||
#include "remote/configobjectslock.hpp"
|
||||
#include "remote/httputility.hpp"
|
||||
#include "remote/filterutility.hpp"
|
||||
#include "base/application.hpp"
|
||||
@ -135,6 +136,12 @@ void ConfigStagesHandler::HandlePost(
|
||||
if (reload && !activate)
|
||||
BOOST_THROW_EXCEPTION(std::invalid_argument("Parameter 'reload' must be false when 'activate' is false."));
|
||||
|
||||
ConfigObjectsSharedLock configObjectsSharedLock(std::try_to_lock);
|
||||
if (!configObjectsSharedLock) {
|
||||
HttpUtility::SendJsonError(response, params, 503, "Icinga is reloading");
|
||||
return;
|
||||
}
|
||||
|
||||
{
|
||||
std::lock_guard runningPackageUpdatesLock(l_RunningPackageUpdatesMutex);
|
||||
double currentReloadFailedTime = Application::GetLastReloadFailed();
|
||||
@ -228,6 +235,13 @@ void ConfigStagesHandler::HandleDelete(
|
||||
if (!ConfigPackageUtility::ValidateStageName(stageName))
|
||||
return HttpUtility::SendJsonError(response, params, 400, "Invalid stage name '" + stageName + "'.");
|
||||
|
||||
ConfigObjectsSharedLock lock(std::try_to_lock);
|
||||
|
||||
if (!lock) {
|
||||
HttpUtility::SendJsonError(response, params, 503, "Icinga is reloading");
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
ConfigPackageUtility::DeleteStage(packageName, stageName);
|
||||
} catch (const std::exception& ex) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user