Skip to content

Commit f79cf08

Browse files
al1imgmlohvynenko
authored andcommitted
sm: launcher: container: do not set 0 error code as error
Systemd conn may return error code 0 but instance is not started within start interval. In this case we set this instance as failed but returned error is none. Signed-off-by: Oleksandr Grytsov <oleksandr_grytsov@epam.com> Reviewed-by: Mykola Kobets <mykola_kobets@epam.com> Reviewed-by: Mykola Solianko <mykola_solianko@epam.com> Reviewed-by: Mykhailo Lohvynenko <mykhailo_lohvynenko@epam.com>
1 parent 4080acb commit f79cf08

2 files changed

Lines changed: 9 additions & 5 deletions

File tree

src/sm/launcher/runtimes/container/instance.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -128,7 +128,7 @@ Error Instance::Start()
128128
mRunStatus = mRunner.StartInstance(mInstanceID, itemConfig->mRunParameters);
129129
err = mRunStatus.mError;
130130

131-
if (!err.IsNone()) {
131+
if (mRunStatus.mState != InstanceStateEnum::eActive) {
132132
return AOS_ERROR_WRAP(err);
133133
}
134134

src/sm/launcher/runtimes/container/runner.cpp

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -151,7 +151,8 @@ RunStatus Runner::StartInstance(const std::string& instanceID, const RunParamete
151151
Tie(status.mState, status.mError) = GetStartingUnitState(unitName, startTime);
152152

153153
LOG_DBG() << "Start instance" << Log::Field("instanceID", instanceID.c_str())
154-
<< Log::Field("name", unitName.c_str()) << Log::Field(status.mError);
154+
<< Log::Field("name", unitName.c_str()) << Log::Field("state", status.mState)
155+
<< Log::Field("error", status.mError);
155156

156157
return status;
157158
}
@@ -223,6 +224,9 @@ void Runner::MonitorUnits()
223224
startUnitIt->second.mRunState = unit.mActiveState;
224225
startUnitIt->second.mExitCode = unit.mExitCode;
225226

227+
LOG_DBG() << "==== Unit state updated" << Log::Field("unit", unit.mName.c_str())
228+
<< Log::Field("state", unit.mActiveState) << Log::Field("exitCode", unit.mExitCode);
229+
226230
// systemd doesn't change the state of failed unit => notify listener about final state.
227231
if (unit.mActiveState == utils::UnitStateEnum::eFailed) {
228232
startUnitIt->second.mCondVar.notify_all();
@@ -312,14 +316,14 @@ RetWithError<InstanceState> Runner::GetStartingUnitState(const std::string& unit
312316
// Wait specified duration for unit state updates.
313317
std::ignore = mStartingUnits[unitName].mCondVar.wait_for(lock, timeout);
314318
auto runState = mStartingUnits[unitName].mRunState;
315-
auto exitCode = mStartingUnits[unitName].mExitCode;
319+
auto exitCode
320+
= mStartingUnits[unitName].mExitCode.HasValue() ? mStartingUnits[unitName].mExitCode.GetValue() : 0;
316321

317322
mStartingUnits.erase(unitName);
318323

319324
if (runState.GetValue() != utils::UnitStateEnum::eActive) {
320-
321325
const auto errMsg = "failed to start unit";
322-
err = exitCode.HasValue() ? Error(exitCode.GetValue(), errMsg) : Error(ErrorEnum::eFailed, errMsg);
326+
err = (exitCode) ? Error(exitCode, errMsg) : Error(ErrorEnum::eFailed, errMsg);
323327

324328
return {InstanceStateEnum::eFailed, AOS_ERROR_WRAP(err)};
325329
}

0 commit comments

Comments
 (0)