diff mbox

[RFC,20/59] xenworker: Use libxl_domain_unpause rather than forking xl

Message ID 1482974092-15891-20-git-send-email-ronladred@gmail.com (mailing list archive)
State New, archived
Headers show

Commit Message

Ronald Rojas Dec. 29, 2016, 1:14 a.m. UTC
From: George Dunlap <george.dunlap@citrix.com>

Unpause is a time-sensitive operation; use libxl to unpause directly
rather than forking and execing xl for each VM.

Signed-off-by: George Dunlap <george.dunlap@citrix.com>
---
 libxl.go     | 14 ++++++++++++++
 xenworker.go | 12 ++----------
 2 files changed, 16 insertions(+), 10 deletions(-)
diff mbox

Patch

diff --git a/libxl.go b/libxl.go
index 39e47ab..415de7f 100644
--- a/libxl.go
+++ b/libxl.go
@@ -114,3 +114,17 @@  func (Ctx *Context) DomainInfo(Id Domid) (di *Dominfo, err error) {
 	di.Domain_type = int32(cdi.domain_type)
 	return
 }
+
+func (Ctx *Context) DomainUnpause(Id Domid) (err error) {
+	if Ctx.ctx == nil {
+		err = fmt.Errorf("Context not opened")
+		return
+	}
+
+	ret := C.libxl_domain_unpause(Ctx.ctx, C.uint32_t(Id))
+
+	if ret != 0 {
+		err = fmt.Errorf("libxl_domain_unpause failed: %d", ret)
+	}
+	return
+}
diff --git a/xenworker.go b/xenworker.go
index 31af35f..4077e77 100644
--- a/xenworker.go
+++ b/xenworker.go
@@ -232,16 +232,8 @@  func (w *XenWorker) Shutdown() {
 
 // FIXME: Return an error
 func (w *XenWorker) Process(report chan WorkerReport, done chan bool) {
-	mock := false
-	
-	// xl unpause [vmname]
-	args := []string{"xl", "unpause", w.vmname}
-	if mock {
-		args = append([]string{"echo"}, args...)
-	}
-	e := exec.Command(args[0], args[1:]...)
-
-	err := e.Run()
+	// // xl unpause [vmname]
+	err := xg.Ctx.DomainUnpause(Domid(w.domid))
 	if err != nil {
 		fmt.Printf("Error unpausing domain: %v\n", err)
 		return