!116 [sync] PR-115: kata-runtime:add timeout for all qmp commands

From: @openeuler-sync-bot 
Reviewed-by: @vegbir, @duguhaotian 
Signed-off-by: @duguhaotian
This commit is contained in:
openeuler-ci-bot 2022-11-21 01:31:12 +00:00 committed by Gitee
commit 78a0054f1f
No known key found for this signature in database
GPG Key ID: 173E9B9CA92EEF8F
3 changed files with 56 additions and 1 deletions

View File

@ -2,7 +2,7 @@
%global debug_package %{nil}
%define VERSION 1.11.1
%define RELEASE 24
%define RELEASE 25
Name: kata-containers
Version: %{VERSION}
@ -98,6 +98,12 @@ install -p -m 640 -D ./runtime/cli/config/configuration-qemu.toml %{buildroot}/u
%doc
%changelog
* Thu Nov 17 2022 Vanient<xiadanni1@huawei.com> - 1.11.1-25
- Type:bugfix
- CVE:NA
- SUG:NA
- DESC:add timeout for all qmp commands
* Mon Sep 12 2022 Vanient<xiadanni1@huawei.com> - 1.11.1-24
- Type:bugfix
- CVE:NA

View File

@ -0,0 +1,48 @@
From d28dd8fd6f57a0d42b41f7d12adc248a9911093e Mon Sep 17 00:00:00 2001
From: Vanient <xiadanni1@huawei.com>
Date: Wed, 2 Nov 2022 16:32:12 +0800
Subject: [PATCH] [Huawei]kata-runtime:add timeout for all qmp commands
If qemu process is blocked for some reasons, qmp command call
will block without return, which causes kata command blocked.
So we add timeout for all qmp commands.
Signed-off-by: Vanient <xiadanni1@huawei.com>
---
vendor/github.com/intel/govmm/qemu/qmp.go | 11 +++++++++++
1 file changed, 11 insertions(+)
diff --git a/vendor/github.com/intel/govmm/qemu/qmp.go b/vendor/github.com/intel/govmm/qemu/qmp.go
index 1d6d9c6..97aff4a 100644
--- a/vendor/github.com/intel/govmm/qemu/qmp.go
+++ b/vendor/github.com/intel/govmm/qemu/qmp.go
@@ -33,6 +33,8 @@ import (
"strings"
)
+const qmpCommandTimeout = 30 * time.Second
+
// QMPLog is a logging interface used by the qemu package to log various
// interesting pieces of information. Rather than introduce a dependency
// on a given logging package, qemu presents this interface that allows
@@ -625,8 +627,17 @@ func startQMPLoop(conn io.ReadWriteCloser, cfg QMPConfig,
return q
}
+func FixMissingTimeout(ctx context.Context) (context.Context, func()) {
+ if _, ok := ctx.Deadline(); ok {
+ return ctx, func() {}
+ }
+ return context.WithTimeout(ctx, qmpCommandTimeout)
+}
+
func (q *QMP) executeCommandWithResponse(ctx context.Context, name string, args map[string]interface{},
oob []byte, filter *qmpEventFilter) (interface{}, error) {
+ ctx, cancel := FixMissingTimeout(ctx)
+ defer cancel()
var err error
var response interface{}
resCh := make(chan qmpResult)
--
2.27.0

View File

@ -94,3 +94,4 @@
0094-kata-runtime-fix-update-iface-clean-NIC-cause-route-.patch
0095-kata-runtime-fix-qemu-process-resource-resi.patch
0096-kata-containers-Move-from-query-cpus-to-query-cpus-f.patch
0097-kata-runtime-add-timeout-for-all-qmp-commands.patch