summaryrefslogtreecommitdiff
path: root/0200-clean-sandbox-when-create-failed-to-be-consisent-wit.patch
diff options
context:
space:
mode:
Diffstat (limited to '0200-clean-sandbox-when-create-failed-to-be-consisent-wit.patch')
-rw-r--r--0200-clean-sandbox-when-create-failed-to-be-consisent-wit.patch91
1 files changed, 91 insertions, 0 deletions
diff --git a/0200-clean-sandbox-when-create-failed-to-be-consisent-wit.patch b/0200-clean-sandbox-when-create-failed-to-be-consisent-wit.patch
new file mode 100644
index 0000000..e3783b4
--- /dev/null
+++ b/0200-clean-sandbox-when-create-failed-to-be-consisent-wit.patch
@@ -0,0 +1,91 @@
+From e980d889e5af64219cbb1bf7ec4ebaa14c05588a Mon Sep 17 00:00:00 2001
+From: zhongtao <zhongtao17@huawei.com>
+Date: Mon, 24 Feb 2025 15:10:28 +1400
+Subject: [PATCH 2/2] clean sandbox when create failed to be consisent with CRI
+ v1alpha
+
+Signed-off-by: zhongtao <zhongtao17@huawei.com>
+---
+ .../v1/v1_cri_pod_sandbox_manager_service.cc | 25 +++++++++++++++++--
+ 1 file changed, 23 insertions(+), 2 deletions(-)
+
+diff --git a/src/daemon/entry/cri/v1/v1_cri_pod_sandbox_manager_service.cc b/src/daemon/entry/cri/v1/v1_cri_pod_sandbox_manager_service.cc
+index fd87e90b..35f968e8 100644
+--- a/src/daemon/entry/cri/v1/v1_cri_pod_sandbox_manager_service.cc
++++ b/src/daemon/entry/cri/v1/v1_cri_pod_sandbox_manager_service.cc
+@@ -324,12 +324,14 @@ void PodSandboxManagerService::StartPodSandboxAndSetupNetowrk(std::shared_ptr<sa
+ {
+ cri_container_message_t msg = { 0 };
+ std::string network_setting_json;
++ Errors stopError;
+
+ // Step 8.2.1: Call sandbox create.
+ sandbox->Create(error);
+ if (error.NotEmpty()) {
+ ERROR("Failed to create sandbox: %s", sandboxName.c_str());
+- return;
++ // clean_sandbox to be consisent with CRI v1alpha
++ goto cleanup_sandbox;
+ }
+
+ msg.container_id = sandbox->GetId().c_str();
+@@ -380,15 +382,21 @@ void PodSandboxManagerService::StartPodSandboxAndSetupNetowrk(std::shared_ptr<sa
+
+ return;
+ stop_sandbox:
+- Errors stopError;
+ CRIHelpers::StopContainerHelper(m_cb, sandbox->GetId(), 0, stopError);
+ WARN("Error stop container: %s: %s", sandbox->GetId().c_str(), stopError.GetCMessage());
++ return;
++cleanup_sandbox:
++ sandbox::SandboxManager::GetInstance()->DeleteSandbox(sandbox->GetId(), error);
++ if (error.NotEmpty()) {
++ WARN("Error remove container: %s: %s", sandbox->GetId().c_str(), error.GetCMessage());
++ }
+ }
+
+ void PodSandboxManagerService::SetupNetowrkAndStartPodSandbox(std::shared_ptr<sandbox::Sandbox> sandbox, std::string &sandboxName, std::string &networkMode, Errors &error)
+ {
+ cri_container_message_t msg = { 0 };
+ std::string network_setting_json;
++ bool clean_sandbox = true;
+
+ // Step 8.1.1: Setup networking for the sandbox.
+ // Setup sandbox network before create sandbox since the remote create might fail for sandbox
+@@ -404,6 +412,8 @@ void PodSandboxManagerService::SetupNetowrkAndStartPodSandbox(std::shared_ptr<sa
+ goto cleanup_network;
+ }
+
++ // clean_sandbox is false, no need to clean sandbox to be consisent with CRI v1alpha
++ clean_sandbox = false;
+ msg.container_id = sandbox->GetId().c_str();
+ msg.sandbox_id = sandbox->GetId().c_str();
+ msg.type = CRI_CONTAINER_MESSAGE_TYPE_CREATED;
+@@ -438,6 +448,13 @@ cleanup_network:
+ return;
+ }
+ }
++ if (clean_sandbox) {
++ sandbox::SandboxManager::GetInstance()->DeleteSandbox(sandbox->GetId(), error);
++ if (error.NotEmpty()) {
++ WARN("Error remove sanbox: %s: %s", sandbox->GetId().c_str(), error.GetCMessage());
++ }
++ }
++
+ }
+
+ auto PodSandboxManagerService::RunPodSandbox(const runtime::v1::PodSandboxConfig &config,
+@@ -517,6 +534,10 @@ auto PodSandboxManagerService::RunPodSandbox(const runtime::v1::PodSandboxConfig
+ sandbox->Save(error);
+ if (error.NotEmpty()) {
+ ERROR("Failed to save sandbox, %s", sandboxName.c_str());
++ sandbox::SandboxManager::GetInstance()->DeleteSandbox(sandbox->GetId(), error);
++ if (error.NotEmpty()) {
++ WARN("Error remove sanbox: %s: %s", sandbox->GetId().c_str(), error.GetCMessage());
++ }
+ goto clean_ns;
+ }
+
+--
+2.43.0
+