Skip to content

Commit 23971f0

Browse files
committed
[common,tools] Include mman.h if thread stack usage is defined
Signed-off-by: Mykhailo Lohvynenko <Mykhailo_Lohvynenko@epam.com>
1 parent 9f4a28f commit 23971f0

File tree

3 files changed

+78
-0
lines changed

3 files changed

+78
-0
lines changed

include/aos/sm/servicemanager.hpp

+1
Original file line numberDiff line numberDiff line change
@@ -345,6 +345,7 @@ class ServiceManager : public ServiceManagerItf, public spaceallocator::ItemRemo
345345
Error RemoveDamagedServiceFolders(const Array<ServiceData>& services);
346346
Error RemoveOutdatedServices(const Array<ServiceData>& services);
347347
Error RemoveService(const ServiceData& service);
348+
Error TruncServiceVersions(const String& serviceID, size_t numVersions);
348349
Error CacheServices(Array<ServiceInfo>& desiredServices);
349350
Error InstallServices(const Array<ServiceInfo>& services);
350351
Error InstallService(const ServiceInfo& service);

src/sm/servicemanager/servicemanager.cpp

+52
Original file line numberDiff line numberDiff line change
@@ -109,8 +109,15 @@ Error ServiceManager::Init(const Config& config, oci::OCISpecItf& ociManager, do
109109
LOG_ERR() << "Can't remove outdated services: err=" << err;
110110
}
111111

112+
for (const auto& service : *services) {
113+
if (auto err = TruncServiceVersions(service.mServiceID, 2); !err.IsNone()) {
114+
LOG_ERR() << "Can't keep last two versions: err=" << err;
115+
}
116+
}
117+
112118
return ErrorEnum::eNone;
113119
}
120+
114121
Error ServiceManager::Start()
115122
{
116123
LOG_DBG() << "Start service manager";
@@ -168,6 +175,12 @@ Error ServiceManager::ProcessDesiredServices(const Array<ServiceInfo>& services)
168175
return err;
169176
}
170177

178+
for (const auto& service : services) {
179+
if (auto err = TruncServiceVersions(service.mServiceID, 2); !err.IsNone()) {
180+
LOG_WRN() << "Can't keep last two versions: serviceID=" << service.mServiceID << ", err=" << err;
181+
}
182+
}
183+
171184
return ErrorEnum::eNone;
172185
}
173186

@@ -384,6 +397,45 @@ Error ServiceManager::RemoveService(const ServiceData& service)
384397
return ErrorEnum::eNone;
385398
}
386399

400+
Error ServiceManager::TruncServiceVersions(const String& serviceID, size_t numVersions)
401+
{
402+
auto storageServices = MakeUnique<ServiceDataStaticArray>(&mAllocator);
403+
404+
if (auto err = mStorage->GetServiceVersions(serviceID, *storageServices);
405+
!err.IsNone() && !err.Is(ErrorEnum::eNotFound)) {
406+
return AOS_ERROR_WRAP(err);
407+
}
408+
409+
if (storageServices->Size() <= numVersions) {
410+
return ErrorEnum::eNone;
411+
}
412+
413+
LOG_DBG() << "Truncate service versions: serviceID=" << serviceID << ", versions=" << storageServices->Size()
414+
<< ", truncate=" << numVersions;
415+
416+
storageServices->Sort([](const ServiceData& lhs, const ServiceData& rhs) {
417+
return semver::CompareSemver(lhs.mVersion, rhs.mVersion).mValue == -1;
418+
});
419+
420+
size_t removedVersions = 0;
421+
422+
for (const auto& service : *storageServices) {
423+
if (service.mState == ServiceStateEnum::eActive) {
424+
continue;
425+
}
426+
427+
if (auto err = RemoveService(service); !err.IsNone()) {
428+
return AOS_ERROR_WRAP(err);
429+
}
430+
431+
if (++removedVersions == storageServices->Size() - numVersions) {
432+
break;
433+
}
434+
}
435+
436+
return ErrorEnum::eNone;
437+
}
438+
387439
Error ServiceManager::CacheServices(Array<ServiceInfo>& desiredServices)
388440
{
389441
LOG_DBG() << "Cache services";

tests/sm/servicemanager/servicemanager_test.cpp

+25
Original file line numberDiff line numberDiff line change
@@ -274,6 +274,31 @@ TEST_F(ServiceManagerTest, ProcessDesiredServices)
274274
ServiceStateEnum::eCached, 0, 0},
275275
},
276276
},
277+
{
278+
std::vector<ServiceInfo> {
279+
{"service4", "provider4", "3.0.0", 0, "url", {}, 0},
280+
},
281+
std::vector<ServiceData> {
282+
{"service1", "provider1", "1.0.0", FS::JoinPath(cServicesDir, "service1"), "", {},
283+
ServiceStateEnum::eCached, 0, 0},
284+
{"service2", "provider2", "1.0.0", FS::JoinPath(cServicesDir, "service2"), "", {},
285+
ServiceStateEnum::eCached, 0, 0},
286+
{"service3", "provider3", "1.0.0", FS::JoinPath(cServicesDir, "service3"), "", {},
287+
ServiceStateEnum::eCached, 0, 0},
288+
{"service4", "provider4", "2.0.0", FS::JoinPath(cServicesDir, "service4"), "", {},
289+
ServiceStateEnum::eCached, 0, 0},
290+
{"service4", "provider4", "3.0.0", FS::JoinPath(cServicesDir, "service4"), "", {},
291+
ServiceStateEnum::eActive, 0, 0},
292+
{"service5", "provider5", "1.0.0", FS::JoinPath(cServicesDir, "service5"), "", {},
293+
ServiceStateEnum::eCached, 0, 0},
294+
{"service5", "provider5", "3.0.0", FS::JoinPath(cServicesDir, "service5"), "", {},
295+
ServiceStateEnum::eCached, 0, 0},
296+
{"service6", "provider6", "1.0.0", FS::JoinPath(cServicesDir, "service6"), "", {},
297+
ServiceStateEnum::eCached, 0, 0},
298+
{"service6", "provider6", "4.0.0", FS::JoinPath(cServicesDir, "service6"), "", {},
299+
ServiceStateEnum::eCached, 0, 0},
300+
},
301+
},
277302
};
278303

279304
size_t i = 0;

0 commit comments

Comments
 (0)