From c67b6b29b9c53951bb9083043a3d1a6b6ef025c6 Mon Sep 17 00:00:00 2001 From: Mykola Solianko Date: Wed, 11 Feb 2026 14:31:08 +0200 Subject: [PATCH] cm: imagemanager: reuse removed same removed item Signed-off-by: Mykola Solianko Reviewed-by: Mykola Kobets Reviewed-by: Oleksandr Grytsov --- src/core/cm/imagemanager/imagemanager.cpp | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/src/core/cm/imagemanager/imagemanager.cpp b/src/core/cm/imagemanager/imagemanager.cpp index 81efdbea0..8fbd39e21 100644 --- a/src/core/cm/imagemanager/imagemanager.cpp +++ b/src/core/cm/imagemanager/imagemanager.cpp @@ -790,7 +790,8 @@ Error ImageManager::ProcessDownloadRequest(const Array& itemsInf auto sameVersionIt = storedItems.FindIf([&itemInfo](const auto& stored) { return stored.mItemID == itemInfo.mItemID && stored.mVersion == itemInfo.mVersion - && (stored.mState == ItemStateEnum::eDownloading || stored.mState == ItemStateEnum::eFailed); + && (stored.mState == ItemStateEnum::eDownloading || stored.mState == ItemStateEnum::eFailed + || stored.mState == ItemStateEnum::eRemoved); }); if (sameVersionIt == storedItems.end()) { @@ -806,6 +807,20 @@ Error ImageManager::ProcessDownloadRequest(const Array& itemsInf continue; } + } else if (sameVersionIt->mState == ItemStateEnum::eRemoved) { + if (auto updateErr + = mStorage->UpdateItemState(itemInfo.mItemID, itemInfo.mVersion, ItemStateEnum::eDownloading); + !updateErr.IsNone()) { + LOG_ERR() << "Failed to update removed item state" << Log::Field(updateErr); + + continue; + } + + if (auto err = mInstallSpaceAllocator->RestoreOutdatedItem(itemInfo.mItemID, itemInfo.mVersion); + !err.IsNone()) { + LOG_ERR() << "Failed to restore outdated item" << Log::Field("itemID", itemInfo.mItemID) + << Log::Field("version", itemInfo.mVersion) << Log::Field(err); + } } NotifyItemStatusChanged(itemInfo.mItemID, itemInfo.mVersion, ItemStateEnum::eDownloading, ErrorEnum::eNone);