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

Commit

Permalink
persist: merge "agent.json"
Browse files Browse the repository at this point in the history
Manage "agent.json" with new store.

Signed-off-by: Wei Zhang <[email protected]>
  • Loading branch information
WeiZhang555 committed Jul 23, 2019
1 parent 7d5e48f commit 99cf3f8
Show file tree
Hide file tree
Showing 5 changed files with 58 additions and 12 deletions.
7 changes: 7 additions & 0 deletions virtcontainers/agent.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ import (
"time"

"github.com/kata-containers/agent/protocols/grpc"
persistapi "github.com/kata-containers/runtime/virtcontainers/persist/api"
vcTypes "github.com/kata-containers/runtime/virtcontainers/pkg/types"
"github.com/kata-containers/runtime/virtcontainers/types"
"github.com/mitchellh/mapstructure"
Expand Down Expand Up @@ -255,4 +256,10 @@ type agent interface {

// cleanup removes all on disk information generated by the agent
cleanup(s *Sandbox)

// return data for saving
save() persistapi.AgentState

// load data from disk
load(persistapi.AgentState)
}
28 changes: 22 additions & 6 deletions virtcontainers/kata_agent.go
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ import (
kataclient "github.com/kata-containers/agent/protocols/client"
"github.com/kata-containers/agent/protocols/grpc"
"github.com/kata-containers/runtime/virtcontainers/device/config"
persistapi "github.com/kata-containers/runtime/virtcontainers/persist/api"
vcAnnotations "github.com/kata-containers/runtime/virtcontainers/pkg/annotations"
ns "github.com/kata-containers/runtime/virtcontainers/pkg/nsenter"
vcTypes "github.com/kata-containers/runtime/virtcontainers/pkg/types"
Expand Down Expand Up @@ -286,8 +287,10 @@ func (k *kataAgent) init(ctx context.Context, sandbox *Sandbox, config interface
k.proxyBuiltIn = isProxyBuiltIn(sandbox.config.ProxyType)

// Fetch agent runtime info.
if err := sandbox.store.Load(store.Agent, &k.state); err != nil {
k.Logger().Debug("Could not retrieve anything from storage")
if !sandbox.supportNewStore() {
if err := sandbox.store.Load(store.Agent, &k.state); err != nil {
k.Logger().Debug("Could not retrieve anything from storage")
}
}

return disableVMShutdown, nil
Expand Down Expand Up @@ -686,7 +689,7 @@ func (k *kataAgent) setProxy(sandbox *Sandbox, proxy proxy, pid int, url string)
k.proxy = proxy
k.state.ProxyPid = pid
k.state.URL = url
if sandbox != nil {
if sandbox != nil && !sandbox.supportNewStore() {
if err := sandbox.store.Store(store.Agent, k.state); err != nil {
return err
}
Expand Down Expand Up @@ -841,9 +844,11 @@ func (k *kataAgent) stopSandbox(sandbox *Sandbox) error {
// clean up agent state
k.state.ProxyPid = -1
k.state.URL = ""
if err := sandbox.store.Store(store.Agent, k.state); err != nil {
// ignore error
k.Logger().WithError(err).WithField("sandbox", sandbox.id).Error("failed to clean up agent state")
if !sandbox.supportNewStore() {
if err := sandbox.store.Store(store.Agent, k.state); err != nil {
// ignore error
k.Logger().WithError(err).WithField("sandbox", sandbox.id).Error("failed to clean up agent state")
}
}

return nil
Expand Down Expand Up @@ -2074,3 +2079,14 @@ func (k *kataAgent) cleanup(s *Sandbox) {
k.Logger().WithError(err).Errorf("failed to cleanup vm share path %s", path)
}
}

func (k *kataAgent) save() (s persistapi.AgentState) {
s.ProxyPid = k.state.ProxyPid
s.URL = k.state.URL
return
}

func (k *kataAgent) load(s persistapi.AgentState) {
k.state.ProxyPid = s.ProxyPid
k.state.URL = s.URL
}
9 changes: 9 additions & 0 deletions virtcontainers/noop_agent.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ import (
"time"

"github.com/kata-containers/agent/protocols/grpc"
persistapi "github.com/kata-containers/runtime/virtcontainers/persist/api"
vcTypes "github.com/kata-containers/runtime/virtcontainers/pkg/types"
"github.com/kata-containers/runtime/virtcontainers/types"
specs "github.com/opencontainers/runtime-spec/specs-go"
Expand Down Expand Up @@ -233,3 +234,11 @@ func (n *noopAgent) markDead() {

func (n *noopAgent) cleanup(s *Sandbox) {
}

// save is the Noop agent state saver. It does nothing.
func (n *noopAgent) save() (s persistapi.AgentState) {
return
}

// load is the Noop agent state loader. It does nothing.
func (n *noopAgent) load(s persistapi.AgentState) {}
14 changes: 14 additions & 0 deletions virtcontainers/persist.go
Original file line number Diff line number Diff line change
Expand Up @@ -154,6 +154,12 @@ func (s *Sandbox) dumpMounts(cs map[string]persistapi.ContainerState) {
}
}

func (s *Sandbox) dumpAgent(ss *persistapi.SandboxState) {
if s.agent != nil {
ss.AgentState = s.agent.save()
}
}

func (s *Sandbox) Save() error {
var (
ss = persistapi.SandboxState{}
Expand All @@ -166,6 +172,7 @@ func (s *Sandbox) Save() error {
s.dumpDevices(&ss, cs)
s.dumpProcess(cs)
s.dumpMounts(cs)
s.dumpAgent(&ss)

if err := s.newStore.ToDisk(ss, cs); err != nil {
return err
Expand Down Expand Up @@ -196,6 +203,12 @@ func (s *Sandbox) loadHypervisor(hs persistapi.HypervisorState) {
s.hypervisor.load(hs)
}

func (s *Sandbox) loadAgent(as persistapi.AgentState) {
if s.agent != nil {
s.agent.load(as)
}
}

func (s *Sandbox) loadDevices(devStates []persistapi.DeviceState) {
s.devManager.LoadDevices(devStates)
}
Expand Down Expand Up @@ -245,6 +258,7 @@ func (s *Sandbox) Restore() error {
s.loadState(ss)
s.loadHypervisor(ss.HypervisorState)
s.loadDevices(ss.Devices)
s.loadAgent(ss.AgentState)
return nil
}

Expand Down
12 changes: 6 additions & 6 deletions virtcontainers/persist/api/sandbox.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,12 +8,12 @@ package persistapi

// ============= sandbox level resources =============

// ProxyState save proxy state data
type ProxyState struct {
// AgentState save agent state data
type AgentState struct {
// Pid of proxy process
Pid int
ProxyPid int

// URL to connect to proxy
// URL to connect to agent
URL string
}

Expand Down Expand Up @@ -46,8 +46,8 @@ type SandboxState struct {
// HypervisorState saves hypervisor specific data
HypervisorState HypervisorState

// ProxyState saves state data of proxy process
ProxyState ProxyState
// AgentState saves state data of agent
AgentState AgentState

// Network saves network configuration of sandbox
Network NetworkInfo
Expand Down

0 comments on commit 99cf3f8

Please sign in to comment.