ad timer to update tool 60min max / 30min per Step

This commit is contained in:
2026-10-08 12:53:32 +02:00
parent 6bc3345ee8
commit ccb0bc4217
4 changed files with 107 additions and 12 deletions
+69 -8
View File
@@ -284,7 +284,38 @@ bool Worker::repairCorruptedRepository() {
return true;
}
bool Worker::updateTimedOut() const
{
if (!m_updateRuntime.isValid())
return false;
if (m_updateRuntime.elapsed() < UPDATE_MAX_RUNTIME_MS)
return false;
qCritical() << "UPDATE TOOL GLOBAL TIMEOUT:"
<< m_updateRuntime.elapsed()
<< "ms";
return true;
}
void Worker::privateUpdate() {
m_updateRuntime.start();
auto abortIfTimedOut = [this]() -> bool {
if (!updateTimedOut())
return false;
qCritical() << "UPDATE TOOL GLOBAL TIMEOUT - aborting update";
// Ideally use a dedicated timeout step later.
m_lastFailedUpdateStep = UPDATE_STEP::UPDATE_FINALIZE;
return true;
};
if (!m_mainWindow) {
Utils::printCriticalErrorMsg("m_mainWindow NOT SET");
return;
@@ -351,6 +382,9 @@ void Worker::privateUpdate() {
// update procedure, even if ISMAS-trigger is not correctly set ("WAIT")
}
if (abortIfTimedOut())
return;
emit this->disableExit();
QDir customerRepository(m_customerRepository);
@@ -434,6 +468,9 @@ void Worker::privateUpdate() {
CONSOLE() << UPDATE_STEP::CHECK_REPOSITORY_SUCCESS;
setProgress(_CHECKOUT_REPOSITORY_SUCCESS);
if (abortIfTimedOut())
return;
if (m_clone == false) {
if (m_ismasTriggerActive == false) {
return;
@@ -462,6 +499,9 @@ void Worker::privateUpdate() {
// CHECK-OUT BRANCH
//
////////////////////////////////////////////////////////////////////////////
if (abortIfTimedOut())
return;
if ((continueUpdate = customerEnvironment()) == false) {
// even if something goes wrong creating the environment, try to execute
// opkg_commands
@@ -484,6 +524,8 @@ void Worker::privateUpdate() {
// COMPUTE CHANGED FILES OF CUSTOMER REPOSITORY
//
////////////////////////////////////////////////////////////////////////////
if (abortIfTimedOut())
return;
if ((continueUpdate = filesToUpdate()) == false) {
// even if something goes wrong in filesToUpdate, try to execute
// opkg_commands
@@ -505,6 +547,9 @@ void Worker::privateUpdate() {
// (R)SYNC THE REPOSITORY WITH THE LOCAL FILEYSTEM
//
////////////////////////////////////////////////////////////////////////////
if (abortIfTimedOut())
return;
if ((continueUpdate = syncCustomerRepositoryAndFS()) == false) {
// even if something goes wrong with rsync, try to execute
// opkg_commands
@@ -526,6 +571,9 @@ void Worker::privateUpdate() {
// EXECUTE OPKG COMMANDS
//
////////////////////////////////////////////////////////////////////////////
if (abortIfTimedOut())
return;
if ((continueUpdate = execOpkgCommands()) == false) {
return;
}
@@ -533,6 +581,9 @@ void Worker::privateUpdate() {
GUI(lst) << (CONSOLE(lst) << UPDATE_STEP::EXEC_OPKG_COMMANDS);
setProgress(_EXEC_OPKG_COMMAND_SUCCESS);
if (abortIfTimedOut())
return;
////////////////////////////////////////////////////////////////////////////
//
@@ -1295,18 +1346,28 @@ qint64 Worker::getFileSize(QString const &fileName) const {
return fInfo.exists() ? fInfo.size() : -1;
}
static constexpr int OPKG_START_TIMEOUT_MS = 30 * 1000;
static constexpr int OPKG_FINISH_TIMEOUT_MS = 30 * 60 * 1000;
bool Worker::executeOpkgCommand(QString opkgCommand) {
Command c(opkgCommand);
Command c(opkgCommand,
OPKG_START_TIMEOUT_MS,
OPKG_FINISH_TIMEOUT_MS);
if (c.execute(m_workingDirectory)) {
QString const r = c.getCommandResult();
Utils::printInfoMsg(QString("EXECUTE OPKG COMMAND %1 OK: %2")
.arg(opkgCommand)
.arg(c.getCommandResult()));
Utils::printInfoMsg(
QString("EXECUTE OPKG COMMAND %1 OK: %2")
.arg(opkgCommand)
.arg(c.getCommandResult()));
return true;
} else {
Utils::printCriticalErrorMsg(QString("EXECUTE OPKG COMMAND %1 FAILED")
.arg(opkgCommand));
}
Utils::printCriticalErrorMsg(
QString("EXECUTE OPKG COMMAND %1 FAILED/TIMED OUT: %2")
.arg(opkgCommand)
.arg(c.getCommandResult()));
return false;
}