Skip to content
This repository has been archived by the owner on May 12, 2021. It is now read-only.

Commit

Permalink
state: Refactor code to move all the state load code
Browse files Browse the repository at this point in the history
Refactor so that all code to load state, devices, network
takes place at one place. This is in line with the experimental api
for new storage that also loads all the necessary items here all at once.

Signed-off-by: Archana Shinde <archana.m.shinde@intel.com>
  • Loading branch information
amshinde committed Oct 9, 2019
1 parent fa4acad commit f6a10bc
Showing 1 changed file with 18 additions and 25 deletions.
43 changes: 18 additions & 25 deletions virtcontainers/sandbox.go
Original file line number Diff line number Diff line change
Expand Up @@ -477,31 +477,12 @@ func createSandbox(ctx context.Context, sandboxConfig SandboxConfig, factory Fac
s.Logger().WithField("features", s.config.Experimental).Infof("Enable experimental features")
}

if s.supportNewStore() {
// Restored successfully from newstore before.
if s.state.State != "" {
return s, nil
}
} else {
// Fetch sandbox network to be able to access it from the sandbox structure.
var networkNS NetworkNamespace
if err := s.store.Load(store.Network, &networkNS); err == nil {
s.networkNS = networkNS
}

devices, err := s.store.LoadDevices()
if err != nil {
s.Logger().WithError(err).WithField("sandboxid", s.id).Warning("load sandbox devices failed")
}
s.devManager = deviceManager.NewDeviceManager(sandboxConfig.HypervisorConfig.BlockDeviceDriver, devices)

// 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.
if s.state.State != "" {
return s, nil
}
// 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.
if s.state.State != "" {
return s, nil
}

// Below code path is called only during create, because of earlier check.
Expand Down Expand Up @@ -586,6 +567,18 @@ func newSandbox(ctx context.Context, sandboxConfig SandboxConfig, factory Factor
return nil, err
}
} else {
// Fetch sandbox network to be able to access it from the sandbox structure.
var networkNS NetworkNamespace
if err = s.store.Load(store.Network, &networkNS); err == nil {
s.networkNS = networkNS
}

devices, err := s.store.LoadDevices()
if err != nil {
s.Logger().WithError(err).WithField("sandboxid", s.id).Warning("load sandbox devices failed")
}
s.devManager = deviceManager.NewDeviceManager(sandboxConfig.HypervisorConfig.BlockDeviceDriver, devices)

// Load sandbox state. The hypervisor.createSandbox call, may need to access statei.
state, err := s.store.LoadState()
if err == nil {
Expand Down

0 comments on commit f6a10bc

Please sign in to comment.