Skip to content
This repository was archived by the owner on Jul 4, 2025. It is now read-only.

Commit 2d8c32e

Browse files
committed
update
1 parent 157d0c0 commit 2d8c32e

File tree

4 files changed

+38
-2
lines changed

4 files changed

+38
-2
lines changed

engine/controllers/engines.cc

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -282,6 +282,7 @@ void Engines::SetDefaultEngineVariant(
282282
res["message"] = result.error();
283283
auto resp = cortex_utils::CreateCortexHttpJsonResponse(res);
284284
resp->setStatusCode(k400BadRequest);
285+
callback(resp);
285286
} else {
286287
auto resp =
287288
cortex_utils::CreateCortexHttpJsonResponse(result.value().ToJson());
@@ -300,6 +301,7 @@ void Engines::GetDefaultEngineVariant(
300301
res["message"] = result.error();
301302
auto resp = cortex_utils::CreateCortexHttpJsonResponse(res);
302303
resp->setStatusCode(k400BadRequest);
304+
callback(resp);
303305
} else {
304306
auto resp =
305307
cortex_utils::CreateCortexHttpJsonResponse(result.value().ToJson());

engine/controllers/engines.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ class Engines : public drogon::HttpController<Engines, false> {
1717
METHOD_ADD(Engines::UninstallEngine, "/{1}", Delete);
1818
METHOD_ADD(Engines::ListEngine, "", Get);
1919

20+
// TODO: might better use query param
2021
METHOD_ADD(Engines::GetEngineVersions, "/{1}/versions", Get);
2122
METHOD_ADD(Engines::GetEngineVariants, "/{1}/versions/{2}", Get);
2223
METHOD_ADD(Engines::InstallEngineVariant, "/{1}/versions/{2}/{3}", Post);

engine/services/engine_service.cc

Lines changed: 31 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -598,8 +598,16 @@ EngineService::SetDefaultEngineVariant(const std::string& engine,
598598
const std::string& version,
599599
const std::string& variant) {
600600
auto ne = NormalizeEngine(engine);
601+
auto is_installed = IsEngineVariantReady(engine, version, variant);
602+
if (is_installed.has_error()) {
603+
return cpp::fail(is_installed.error());
604+
}
605+
606+
if (!is_installed.value()) {
607+
return cpp::fail("Engine variant " + version + "-" + variant +
608+
" is not installed yet!");
609+
}
601610

602-
// TODO: (namh) Handle case that the input is invalid, need to check if we have that version
603611
default_variants_[ne] = DefaultEngineVariant{
604612
.engine = engine,
605613
.version = version,
@@ -608,12 +616,33 @@ EngineService::SetDefaultEngineVariant(const std::string& engine,
608616
return default_variants_[ne];
609617
}
610618

619+
cpp::result<bool, std::string> EngineService::IsEngineVariantReady(
620+
const std::string& engine, const std::string& version,
621+
const std::string& variant) {
622+
auto ne = NormalizeEngine(engine);
623+
auto normalized_version = string_utils::RemoveSubstring(version, "v");
624+
auto installed_engines = GetInstalledEngineVariants(ne);
625+
if (installed_engines.has_error()) {
626+
return cpp::fail("Failed to get installed engines: " +
627+
installed_engines.error());
628+
}
629+
630+
for (const auto& installed_engine : installed_engines.value()) {
631+
if (installed_engine.name == variant &&
632+
installed_engine.version == normalized_version) {
633+
return true;
634+
}
635+
}
636+
return false;
637+
}
638+
611639
cpp::result<DefaultEngineVariant, std::string>
612640
EngineService::GetDefaultEngineVariant(const std::string& engine) {
613641
auto ne = NormalizeEngine(engine);
614642
if (default_variants_.find(ne) == default_variants_.end()) {
615-
return cpp::fail("Variant for " + engine + " is not set yet!");
643+
return cpp::fail("Engine variant for " + engine + " is not set yet!");
616644
}
645+
617646
return default_variants_[ne];
618647
}
619648

engine/services/engine_service.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -146,6 +146,10 @@ class EngineService {
146146
std::string GetMatchedVariant(const std::string& engine,
147147
const std::vector<std::string>& variants);
148148

149+
cpp::result<bool, std::string> IsEngineVariantReady(
150+
const std::string& engine, const std::string& version,
151+
const std::string& variant);
152+
149153
private:
150154
std::shared_ptr<DownloadService> download_service_;
151155

0 commit comments

Comments
 (0)