From fa4acad4aa0352d1f2ed2b7393b5648e3d175065 Mon Sep 17 00:00:00 2001 From: Archana Shinde Date: Tue, 8 Oct 2019 11:02:15 -0700 Subject: [PATCH] state: Load the state from storage early on The hypervisor.createSandbox may need to access the state. For eg, ACRN today needs to access the block index to assign it to the root image of the VM. Hence load this early on. Fixes #2026 Signed-off-by: Archana Shinde --- virtcontainers/sandbox.go | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/virtcontainers/sandbox.go b/virtcontainers/sandbox.go index 0d88e90115..b1f409868a 100644 --- a/virtcontainers/sandbox.go +++ b/virtcontainers/sandbox.go @@ -495,13 +495,11 @@ func createSandbox(ctx context.Context, sandboxConfig SandboxConfig, factory Fac } s.devManager = deviceManager.NewDeviceManager(sandboxConfig.HypervisorConfig.BlockDeviceDriver, devices) - // We first try to fetch the sandbox state from storage. - // If it exists, this means this is a re-creation, i.e. + // Sandbox state has been loaded from storage. + // If the Stae is not empty, this is a re-creation, i.e. // we don't need to talk to the guest's agent, but only // want to create the sandbox and its containers in memory. - state, err := s.store.LoadState() - if err == nil && state.State != "" { - s.state = state + if s.state.State != "" { return s, nil } } @@ -588,6 +586,12 @@ func newSandbox(ctx context.Context, sandboxConfig SandboxConfig, factory Factor return nil, err } } else { + // Load sandbox state. The hypervisor.createSandbox call, may need to access statei. + state, err := s.store.LoadState() + if err == nil { + s.state = state + } + if err = s.hypervisor.createSandbox(ctx, s.id, s.networkNS, &sandboxConfig.HypervisorConfig, s.store); err != nil { return nil, err }