|
2 | 2 |
|
3 | 3 | #include "remote/configstageshandler.hpp"
|
4 | 4 | #include "remote/configpackageutility.hpp"
|
| 5 | +#include "remote/configobjectslock.hpp" |
5 | 6 | #include "remote/httputility.hpp"
|
6 | 7 | #include "remote/filterutility.hpp"
|
7 | 8 | #include "base/application.hpp"
|
@@ -135,6 +136,12 @@ void ConfigStagesHandler::HandlePost(
|
135 | 136 | if (reload && !activate)
|
136 | 137 | BOOST_THROW_EXCEPTION(std::invalid_argument("Parameter 'reload' must be false when 'activate' is false."));
|
137 | 138 |
|
| 139 | + ConfigObjectsSharedLock configObjectsSharedLock(std::try_to_lock); |
| 140 | + if (!configObjectsSharedLock) { |
| 141 | + HttpUtility::SendJsonError(response, params, 503, "Icinga is reloading"); |
| 142 | + return; |
| 143 | + } |
| 144 | + |
138 | 145 | {
|
139 | 146 | std::lock_guard runningPackageUpdatesLock(l_RunningPackageUpdatesMutex);
|
140 | 147 | double currentReloadFailedTime = Application::GetLastReloadFailed();
|
@@ -228,6 +235,12 @@ void ConfigStagesHandler::HandleDelete(
|
228 | 235 | if (!ConfigPackageUtility::ValidateStageName(stageName))
|
229 | 236 | return HttpUtility::SendJsonError(response, params, 400, "Invalid stage name '" + stageName + "'.");
|
230 | 237 |
|
| 238 | + ConfigObjectsSharedLock lock(std::try_to_lock); |
| 239 | + if (!lock) { |
| 240 | + HttpUtility::SendJsonError(response, params, 503, "Icinga is reloading"); |
| 241 | + return; |
| 242 | + } |
| 243 | + |
231 | 244 | try {
|
232 | 245 | ConfigPackageUtility::DeleteStage(packageName, stageName);
|
233 | 246 | } catch (const std::exception& ex) {
|
|
0 commit comments