From 5f4dcdc6e9e79448a0a679a91abbf83e051a9e19 Mon Sep 17 00:00:00 2001 From: Lia Stratopoulos <167905060+lia-viam@users.noreply.github.com> Date: Fri, 27 Jun 2025 14:07:13 -0400 Subject: [PATCH 1/5] remove resource on alwaysrebuild --- src/viam/sdk/module/service.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/viam/sdk/module/service.cpp b/src/viam/sdk/module/service.cpp index 658630484..a40cc3681 100644 --- a/src/viam/sdk/module/service.cpp +++ b/src/viam/sdk/module/service.cpp @@ -128,6 +128,8 @@ struct ModuleService::ServiceImpl : viam::module::v1::ModuleService::Service { stoppable->stop(); } + manager->remove(Name::from_string(res->name())); + const std::shared_ptr reg = Registry::get().lookup_model(cfg.name()); From 9185837b0389c4af4557356135dedfe7d7b42cbf Mon Sep 17 00:00:00 2001 From: Lia Stratopoulos <167905060+lia-viam@users.noreply.github.com> Date: Mon, 30 Jun 2025 14:39:06 -0400 Subject: [PATCH 2/5] use resource name --- src/viam/sdk/module/service.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/viam/sdk/module/service.cpp b/src/viam/sdk/module/service.cpp index a40cc3681..6d5f70bdf 100644 --- a/src/viam/sdk/module/service.cpp +++ b/src/viam/sdk/module/service.cpp @@ -128,7 +128,7 @@ struct ModuleService::ServiceImpl : viam::module::v1::ModuleService::Service { stoppable->stop(); } - manager->remove(Name::from_string(res->name())); + manager->remove(cfg.resource_name()); const std::shared_ptr reg = Registry::get().lookup_model(cfg.name()); From 769e664732bb66ab927eac35baa141ab9b6a7593 Mon Sep 17 00:00:00 2001 From: Lia Stratopoulos <167905060+lia-viam@users.noreply.github.com> Date: Tue, 1 Jul 2025 11:33:00 -0400 Subject: [PATCH 3/5] fix call to reg lookup --- src/viam/sdk/module/service.cpp | 8 +++----- src/viam/sdk/resource/resource_manager.cpp | 5 +++-- 2 files changed, 6 insertions(+), 7 deletions(-) diff --git a/src/viam/sdk/module/service.cpp b/src/viam/sdk/module/service.cpp index 6d5f70bdf..51bd2daab 100644 --- a/src/viam/sdk/module/service.cpp +++ b/src/viam/sdk/module/service.cpp @@ -128,16 +128,14 @@ struct ModuleService::ServiceImpl : viam::module::v1::ModuleService::Service { stoppable->stop(); } - manager->remove(cfg.resource_name()); - const std::shared_ptr reg = - Registry::get().lookup_model(cfg.name()); + Registry::get().lookup_model(cfg.api(), cfg.model()); // TODO RSDK-11067 new resource gets constructed while old one is still alive. if (reg) { try { - const std::shared_ptr resource = reg->construct_resource(deps, cfg); - manager->replace_one(cfg.resource_name(), resource); + std::shared_ptr resource = reg->construct_resource(deps, cfg); + manager->replace_one(cfg.resource_name(), std::move(resource)); } catch (const std::exception& exc) { return grpc::Status(::grpc::INTERNAL, exc.what()); } diff --git a/src/viam/sdk/resource/resource_manager.cpp b/src/viam/sdk/resource/resource_manager.cpp index b11d9b61a..3c62faae7 100644 --- a/src/viam/sdk/resource/resource_manager.cpp +++ b/src/viam/sdk/resource/resource_manager.cpp @@ -108,6 +108,7 @@ void ResourceManager::do_remove(const Name& name) { ErrorCondition::k_resource_not_found, "Attempted to remove resource " + name.to_string() + " but it didn't exist!"); } + resources_.erase(short_name); std::string const shortcut = get_shortcut_name(short_name); @@ -135,8 +136,8 @@ void ResourceManager::remove(const Name& name) { do_remove(name); } catch (std::exception& exc) { VIAM_SDK_LOG(error) << "unable to remove resource: " << exc.what(); - }; -}; + } +} void ResourceManager::replace_one(const Name& name, std::shared_ptr resource) { const std::lock_guard lock(lock_); From 233259244ad159dc3d8b04c833ae13982f04f037 Mon Sep 17 00:00:00 2001 From: Lia Stratopoulos <167905060+lia-viam@users.noreply.github.com> Date: Tue, 1 Jul 2025 11:33:20 -0400 Subject: [PATCH 4/5] remove rsdk comment --- src/viam/sdk/module/service.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/src/viam/sdk/module/service.cpp b/src/viam/sdk/module/service.cpp index 51bd2daab..004902010 100644 --- a/src/viam/sdk/module/service.cpp +++ b/src/viam/sdk/module/service.cpp @@ -131,7 +131,6 @@ struct ModuleService::ServiceImpl : viam::module::v1::ModuleService::Service { const std::shared_ptr reg = Registry::get().lookup_model(cfg.api(), cfg.model()); - // TODO RSDK-11067 new resource gets constructed while old one is still alive. if (reg) { try { std::shared_ptr resource = reg->construct_resource(deps, cfg); From b5578cefbc168336a43d186aa14f57f3d0c1ca70 Mon Sep 17 00:00:00 2001 From: Lia Stratopoulos <167905060+lia-viam@users.noreply.github.com> Date: Tue, 1 Jul 2025 15:26:58 -0400 Subject: [PATCH 5/5] error on model reg not found --- src/viam/sdk/module/service.cpp | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/src/viam/sdk/module/service.cpp b/src/viam/sdk/module/service.cpp index 004902010..530165b84 100644 --- a/src/viam/sdk/module/service.cpp +++ b/src/viam/sdk/module/service.cpp @@ -83,7 +83,8 @@ struct ModuleService::ServiceImpl : viam::module::v1::ModuleService::Service { } catch (const std::exception& exc) { return grpc::Status(::grpc::INTERNAL, exc.what()); } - }; + } + try { parent.server_->add_resource(res, ctx->deadline()); } catch (const std::exception& exc) { @@ -131,13 +132,16 @@ struct ModuleService::ServiceImpl : viam::module::v1::ModuleService::Service { const std::shared_ptr reg = Registry::get().lookup_model(cfg.api(), cfg.model()); - if (reg) { - try { - std::shared_ptr resource = reg->construct_resource(deps, cfg); - manager->replace_one(cfg.resource_name(), std::move(resource)); - } catch (const std::exception& exc) { - return grpc::Status(::grpc::INTERNAL, exc.what()); - } + if (!reg) { + return grpc::Status(::grpc::INTERNAL, + "Unable to rebuild resource: model registration not found"); + } + + try { + std::shared_ptr resource = reg->construct_resource(deps, cfg); + manager->replace_one(cfg.resource_name(), std::move(resource)); + } catch (const std::exception& exc) { + return grpc::Status(::grpc::INTERNAL, exc.what()); } return grpc::Status();