mirror of
https://github.com/kata-containers/kata-containers.git
synced 2025-07-04 02:56:18 +00:00
qemu: make saveSandbox wait for migration completion
Then we can remove the arbitrary sleep waiting for migration completion when creating a tempalte vm. Fixes: #728 Signed-off-by: Peng Tao <bergwolf@gmail.com>
This commit is contained in:
parent
c3cfe8204a
commit
eb77a41535
@ -25,7 +25,6 @@ type template struct {
|
||||
|
||||
var templateProxyType = vc.KataBuiltInProxyType
|
||||
var templateWaitForAgent = 2 * time.Second
|
||||
var templateWaitForMigration = 1 * time.Second
|
||||
|
||||
// Fetch finds and returns a pre-built template factory.
|
||||
// TODO: save template metadata and fetch from storage.
|
||||
@ -145,9 +144,6 @@ func (t *template) createTemplateVM(ctx context.Context) error {
|
||||
return err
|
||||
}
|
||||
|
||||
// qemu QMP does not wait for migration to finish...
|
||||
time.Sleep(templateWaitForMigration)
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
|
@ -20,7 +20,6 @@ import (
|
||||
func TestTemplateFactory(t *testing.T) {
|
||||
assert := assert.New(t)
|
||||
|
||||
templateWaitForMigration = 1 * time.Microsecond
|
||||
templateWaitForAgent = 1 * time.Microsecond
|
||||
|
||||
testDir, _ := ioutil.TempDir("", "vmfactory-tmp-")
|
||||
|
@ -76,6 +76,7 @@ const (
|
||||
qmpCapErrMsg = "Failed to negoatiate QMP capabilities"
|
||||
qmpCapMigrationBypassSharedMemory = "bypass-shared-memory"
|
||||
qmpExecCatCmd = "exec:cat"
|
||||
qmpMigrationWaitTimeout = 5 * time.Second
|
||||
|
||||
scsiControllerID = "scsi0"
|
||||
rngID = "rng0"
|
||||
@ -1181,6 +1182,29 @@ func (q *qemu) saveSandbox() error {
|
||||
return err
|
||||
}
|
||||
|
||||
t := time.NewTimer(qmpMigrationWaitTimeout)
|
||||
defer t.Stop()
|
||||
for {
|
||||
status, err := q.qmpMonitorCh.qmp.ExecuteQueryMigration(q.qmpMonitorCh.ctx)
|
||||
if err != nil {
|
||||
q.Logger().WithError(err).Error("failed to query migration status")
|
||||
return err
|
||||
}
|
||||
if status.Status == "completed" {
|
||||
break
|
||||
}
|
||||
|
||||
select {
|
||||
case <-t.C:
|
||||
q.Logger().WithField("migration-status", status).Error("timeout waiting for qemu migration")
|
||||
return fmt.Errorf("timed out after %d seconds waiting for qemu migration", qmpMigrationWaitTimeout)
|
||||
default:
|
||||
// migration in progress
|
||||
q.Logger().WithField("migration-status", status).Debug("migration in progress")
|
||||
time.Sleep(100 * time.Millisecond)
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user