From f97d9b45c8a59afa573ba08bb4ead303598e05dc Mon Sep 17 00:00:00 2001 From: Eric Ernst Date: Thu, 16 Jun 2022 00:24:04 -0700 Subject: [PATCH] runtime: device/persist: drop persist dependency from device pkgs Rather than have device package depend on persist, let's define the (almost duplicate) structures within device itself, and have the Kata Container's persist pkg import these. This'll help avoid unecessary dependencies within our core packages. Signed-off-by: Eric Ernst --- src/runtime/pkg/device/api/interface.go | 7 +++---- .../device/config/device_state.go} | 18 +++++++++--------- src/runtime/pkg/device/drivers/block.go | 7 +++---- src/runtime/pkg/device/drivers/generic.go | 7 +++---- src/runtime/pkg/device/drivers/vfio.go | 7 +++---- .../pkg/device/drivers/vhost_user_blk.go | 7 +++---- .../pkg/device/drivers/vhost_user_net.go | 7 +++---- .../pkg/device/drivers/vhost_user_scsi.go | 7 +++---- src/runtime/pkg/device/manager/manager.go | 3 +-- src/runtime/virtcontainers/persist.go | 7 ++++--- .../virtcontainers/persist/api/sandbox.go | 3 ++- 11 files changed, 37 insertions(+), 43 deletions(-) rename src/runtime/{virtcontainers/persist/api/device.go => pkg/device/config/device_state.go} (88%) diff --git a/src/runtime/pkg/device/api/interface.go b/src/runtime/pkg/device/api/interface.go index 2db12f677..074980f44 100644 --- a/src/runtime/pkg/device/api/interface.go +++ b/src/runtime/pkg/device/api/interface.go @@ -10,7 +10,6 @@ import ( "context" "github.com/kata-containers/kata-containers/src/runtime/pkg/device/config" - persistapi "github.com/kata-containers/kata-containers/src/runtime/virtcontainers/persist/api" "github.com/sirupsen/logrus" ) @@ -78,10 +77,10 @@ type Device interface { Dereference() uint // Save converts Device to DeviceState - Save() persistapi.DeviceState + Save() config.DeviceState // Load loads DeviceState and converts it to specific device - Load(persistapi.DeviceState) + Load(config.DeviceState) } // DeviceManager can be used to create a new device, this can be used as single @@ -94,5 +93,5 @@ type DeviceManager interface { IsDeviceAttached(string) bool GetDeviceByID(string) Device GetAllDevices() []Device - LoadDevices([]persistapi.DeviceState) + LoadDevices([]config.DeviceState) } diff --git a/src/runtime/virtcontainers/persist/api/device.go b/src/runtime/pkg/device/config/device_state.go similarity index 88% rename from src/runtime/virtcontainers/persist/api/device.go rename to src/runtime/pkg/device/config/device_state.go index dd61efbfc..36d513fa6 100644 --- a/src/runtime/virtcontainers/persist/api/device.go +++ b/src/runtime/pkg/device/config/device_state.go @@ -4,7 +4,7 @@ // SPDX-License-Identifier: Apache-2.0 // -package persistapi +package config import vcTypes "github.com/kata-containers/kata-containers/src/runtime/virtcontainers/types" @@ -12,7 +12,7 @@ import vcTypes "github.com/kata-containers/kata-containers/src/runtime/virtconta // BlockDrive represents a block storage drive which may be used in case the storage // driver has an underlying block storage device. -type BlockDrive struct { +type BlockDriveState struct { // File is the path to the disk-image/device which will be used with this drive File string @@ -50,7 +50,7 @@ type BlockDrive struct { } // VFIODev represents a VFIO drive used for hotplugging -type VFIODev struct { +type VFIODevState struct { // ID is used to identify this drive in the hypervisor options. ID string @@ -65,7 +65,7 @@ type VFIODev struct { } // VhostUserDeviceAttrs represents data shared by most vhost-user devices -type VhostUserDeviceAttrs struct { +type VhostUserDeviceAttrsState struct { DevID string SocketPath string Type string @@ -89,11 +89,11 @@ type DeviceState struct { // for example, for BlockDevice, we can set DriverOptions["block-driver"]="virtio-blk" DriverOptions map[string]string - // VhostUserDeviceAttrs is specific for vhost-user device driver - VhostUserDev *VhostUserDeviceAttrs `json:",omitempty"` + // VhostUserDeviceAttrsState is specific for vhost-user device driver + VhostUserDev *VhostUserDeviceAttrsState `json:",omitempty"` // BlockDrive is specific for block device driver - BlockDrive *BlockDrive `json:",omitempty"` + BlockDrive *BlockDriveState `json:",omitempty"` ID string @@ -108,8 +108,8 @@ type DeviceState struct { // More info in mknod(1). DevType string - // VFIODev is specific VFIO device driver - VFIODevs []*VFIODev `json:",omitempty"` + // VFIODevState is specific VFIO device driver + VFIODevs []*VFIODevState `json:",omitempty"` RefCount uint AttachCount uint diff --git a/src/runtime/pkg/device/drivers/block.go b/src/runtime/pkg/device/drivers/block.go index 294e8da60..6088a5c9f 100644 --- a/src/runtime/pkg/device/drivers/block.go +++ b/src/runtime/pkg/device/drivers/block.go @@ -12,7 +12,6 @@ import ( "github.com/kata-containers/kata-containers/src/runtime/pkg/device/api" "github.com/kata-containers/kata-containers/src/runtime/pkg/device/config" - persistapi "github.com/kata-containers/kata-containers/src/runtime/virtcontainers/persist/api" "github.com/kata-containers/kata-containers/src/runtime/virtcontainers/utils" ) @@ -159,13 +158,13 @@ func (device *BlockDevice) GetDeviceInfo() interface{} { } // Save converts Device to DeviceState -func (device *BlockDevice) Save() persistapi.DeviceState { +func (device *BlockDevice) Save() config.DeviceState { ds := device.GenericDevice.Save() ds.Type = string(device.DeviceType()) drive := device.BlockDrive if drive != nil { - ds.BlockDrive = &persistapi.BlockDrive{ + ds.BlockDrive = &config.BlockDriveState{ File: drive.File, Format: drive.Format, ID: drive.ID, @@ -183,7 +182,7 @@ func (device *BlockDevice) Save() persistapi.DeviceState { } // Load loads DeviceState and converts it to specific device -func (device *BlockDevice) Load(ds persistapi.DeviceState) { +func (device *BlockDevice) Load(ds config.DeviceState) { device.GenericDevice = &GenericDevice{} device.GenericDevice.Load(ds) diff --git a/src/runtime/pkg/device/drivers/generic.go b/src/runtime/pkg/device/drivers/generic.go index 67cf243c7..38358ed24 100644 --- a/src/runtime/pkg/device/drivers/generic.go +++ b/src/runtime/pkg/device/drivers/generic.go @@ -12,7 +12,6 @@ import ( "github.com/kata-containers/kata-containers/src/runtime/pkg/device/api" "github.com/kata-containers/kata-containers/src/runtime/pkg/device/config" - persistapi "github.com/kata-containers/kata-containers/src/runtime/virtcontainers/persist/api" ) // GenericDevice refers to a device that is neither a VFIO device, block device or VhostUserDevice. @@ -128,8 +127,8 @@ func (device *GenericDevice) bumpAttachCount(attach bool) (skip bool, err error) } // Save converts Device to DeviceState -func (device *GenericDevice) Save() persistapi.DeviceState { - dss := persistapi.DeviceState{ +func (device *GenericDevice) Save() config.DeviceState { + dss := config.DeviceState{ ID: device.ID, Type: string(device.DeviceType()), RefCount: device.RefCount, @@ -148,7 +147,7 @@ func (device *GenericDevice) Save() persistapi.DeviceState { } // Load loads DeviceState and converts it to specific device -func (device *GenericDevice) Load(ds persistapi.DeviceState) { +func (device *GenericDevice) Load(ds config.DeviceState) { device.ID = ds.ID device.RefCount = ds.RefCount device.AttachCount = ds.AttachCount diff --git a/src/runtime/pkg/device/drivers/vfio.go b/src/runtime/pkg/device/drivers/vfio.go index ec10cc02d..ed791f841 100644 --- a/src/runtime/pkg/device/drivers/vfio.go +++ b/src/runtime/pkg/device/drivers/vfio.go @@ -18,7 +18,6 @@ import ( "github.com/kata-containers/kata-containers/src/runtime/pkg/device/api" "github.com/kata-containers/kata-containers/src/runtime/pkg/device/config" - persistapi "github.com/kata-containers/kata-containers/src/runtime/virtcontainers/persist/api" "github.com/kata-containers/kata-containers/src/runtime/virtcontainers/utils" ) @@ -174,14 +173,14 @@ func (device *VFIODevice) GetDeviceInfo() interface{} { } // Save converts Device to DeviceState -func (device *VFIODevice) Save() persistapi.DeviceState { +func (device *VFIODevice) Save() config.DeviceState { ds := device.GenericDevice.Save() ds.Type = string(device.DeviceType()) devs := device.VfioDevs for _, dev := range devs { if dev != nil { - ds.VFIODevs = append(ds.VFIODevs, &persistapi.VFIODev{ + ds.VFIODevs = append(ds.VFIODevs, &config.VFIODevState{ ID: dev.ID, Type: uint32(dev.Type), BDF: dev.BDF, @@ -193,7 +192,7 @@ func (device *VFIODevice) Save() persistapi.DeviceState { } // Load loads DeviceState and converts it to specific device -func (device *VFIODevice) Load(ds persistapi.DeviceState) { +func (device *VFIODevice) Load(ds config.DeviceState) { device.GenericDevice = &GenericDevice{} device.GenericDevice.Load(ds) diff --git a/src/runtime/pkg/device/drivers/vhost_user_blk.go b/src/runtime/pkg/device/drivers/vhost_user_blk.go index 9d6de5a05..75d65d0a5 100644 --- a/src/runtime/pkg/device/drivers/vhost_user_blk.go +++ b/src/runtime/pkg/device/drivers/vhost_user_blk.go @@ -11,7 +11,6 @@ import ( "github.com/kata-containers/kata-containers/src/runtime/pkg/device/api" "github.com/kata-containers/kata-containers/src/runtime/pkg/device/config" - persistapi "github.com/kata-containers/kata-containers/src/runtime/virtcontainers/persist/api" "github.com/kata-containers/kata-containers/src/runtime/virtcontainers/utils" "github.com/sirupsen/logrus" ) @@ -156,13 +155,13 @@ func (device *VhostUserBlkDevice) GetDeviceInfo() interface{} { } // Save converts Device to DeviceState -func (device *VhostUserBlkDevice) Save() persistapi.DeviceState { +func (device *VhostUserBlkDevice) Save() config.DeviceState { ds := device.GenericDevice.Save() ds.Type = string(device.DeviceType()) vAttr := device.VhostUserDeviceAttrs if vAttr != nil { - ds.VhostUserDev = &persistapi.VhostUserDeviceAttrs{ + ds.VhostUserDev = &config.VhostUserDeviceAttrsState{ DevID: vAttr.DevID, SocketPath: vAttr.SocketPath, Type: string(vAttr.Type), @@ -174,7 +173,7 @@ func (device *VhostUserBlkDevice) Save() persistapi.DeviceState { } // Load loads DeviceState and converts it to specific device -func (device *VhostUserBlkDevice) Load(ds persistapi.DeviceState) { +func (device *VhostUserBlkDevice) Load(ds config.DeviceState) { device.GenericDevice = &GenericDevice{} device.GenericDevice.Load(ds) diff --git a/src/runtime/pkg/device/drivers/vhost_user_net.go b/src/runtime/pkg/device/drivers/vhost_user_net.go index 6ac038b02..7441c2d89 100644 --- a/src/runtime/pkg/device/drivers/vhost_user_net.go +++ b/src/runtime/pkg/device/drivers/vhost_user_net.go @@ -12,7 +12,6 @@ import ( "github.com/kata-containers/kata-containers/src/runtime/pkg/device/api" "github.com/kata-containers/kata-containers/src/runtime/pkg/device/config" - persistapi "github.com/kata-containers/kata-containers/src/runtime/virtcontainers/persist/api" "github.com/kata-containers/kata-containers/src/runtime/virtcontainers/utils" ) @@ -75,10 +74,10 @@ func (device *VhostUserNetDevice) GetDeviceInfo() interface{} { } // Save converts Device to DeviceState -func (device *VhostUserNetDevice) Save() persistapi.DeviceState { +func (device *VhostUserNetDevice) Save() config.DeviceState { ds := device.GenericDevice.Save() ds.Type = string(device.DeviceType()) - ds.VhostUserDev = &persistapi.VhostUserDeviceAttrs{ + ds.VhostUserDev = &config.VhostUserDeviceAttrsState{ DevID: device.DevID, SocketPath: device.SocketPath, Type: string(device.Type), @@ -88,7 +87,7 @@ func (device *VhostUserNetDevice) Save() persistapi.DeviceState { } // Load loads DeviceState and converts it to specific device -func (device *VhostUserNetDevice) Load(ds persistapi.DeviceState) { +func (device *VhostUserNetDevice) Load(ds config.DeviceState) { device.GenericDevice = &GenericDevice{} device.GenericDevice.Load(ds) diff --git a/src/runtime/pkg/device/drivers/vhost_user_scsi.go b/src/runtime/pkg/device/drivers/vhost_user_scsi.go index cd0c5f264..7fbcc382c 100644 --- a/src/runtime/pkg/device/drivers/vhost_user_scsi.go +++ b/src/runtime/pkg/device/drivers/vhost_user_scsi.go @@ -12,7 +12,6 @@ import ( "github.com/kata-containers/kata-containers/src/runtime/pkg/device/api" "github.com/kata-containers/kata-containers/src/runtime/pkg/device/config" - persistapi "github.com/kata-containers/kata-containers/src/runtime/virtcontainers/persist/api" "github.com/kata-containers/kata-containers/src/runtime/virtcontainers/utils" ) @@ -75,10 +74,10 @@ func (device *VhostUserSCSIDevice) GetDeviceInfo() interface{} { } // Save converts Device to DeviceState -func (device *VhostUserSCSIDevice) Save() persistapi.DeviceState { +func (device *VhostUserSCSIDevice) Save() config.DeviceState { ds := device.GenericDevice.Save() ds.Type = string(device.DeviceType()) - ds.VhostUserDev = &persistapi.VhostUserDeviceAttrs{ + ds.VhostUserDev = &config.VhostUserDeviceAttrsState{ DevID: device.DevID, SocketPath: device.SocketPath, Type: string(device.Type), @@ -88,7 +87,7 @@ func (device *VhostUserSCSIDevice) Save() persistapi.DeviceState { } // Load loads DeviceState and converts it to specific device -func (device *VhostUserSCSIDevice) Load(ds persistapi.DeviceState) { +func (device *VhostUserSCSIDevice) Load(ds config.DeviceState) { device.GenericDevice = &GenericDevice{} device.GenericDevice.Load(ds) diff --git a/src/runtime/pkg/device/manager/manager.go b/src/runtime/pkg/device/manager/manager.go index d9e3193cb..eed9e39f1 100644 --- a/src/runtime/pkg/device/manager/manager.go +++ b/src/runtime/pkg/device/manager/manager.go @@ -17,7 +17,6 @@ import ( "github.com/kata-containers/kata-containers/src/runtime/pkg/device/api" "github.com/kata-containers/kata-containers/src/runtime/pkg/device/config" "github.com/kata-containers/kata-containers/src/runtime/pkg/device/drivers" - persistapi "github.com/kata-containers/kata-containers/src/runtime/virtcontainers/persist/api" "github.com/kata-containers/kata-containers/src/runtime/virtcontainers/utils" ) @@ -242,7 +241,7 @@ func (dm *deviceManager) IsDeviceAttached(id string) bool { } // LoadDevices load devices from persist state -func (dm *deviceManager) LoadDevices(devStates []persistapi.DeviceState) { +func (dm *deviceManager) LoadDevices(devStates []config.DeviceState) { dm.Lock() defer dm.Unlock() diff --git a/src/runtime/virtcontainers/persist.go b/src/runtime/virtcontainers/persist.go index f559d8242..56a63ae59 100644 --- a/src/runtime/virtcontainers/persist.go +++ b/src/runtime/virtcontainers/persist.go @@ -8,8 +8,9 @@ package virtcontainers import ( "errors" - hv "github.com/kata-containers/kata-containers/src/runtime/pkg/hypervisors" "github.com/kata-containers/kata-containers/src/runtime/pkg/device/api" + devconfig "github.com/kata-containers/kata-containers/src/runtime/pkg/device/config" + hv "github.com/kata-containers/kata-containers/src/runtime/pkg/hypervisors" exp "github.com/kata-containers/kata-containers/src/runtime/virtcontainers/experimental" "github.com/kata-containers/kata-containers/src/runtime/virtcontainers/persist" persistapi "github.com/kata-containers/kata-containers/src/runtime/virtcontainers/persist/api" @@ -65,7 +66,7 @@ func (s *Sandbox) dumpHypervisor(ss *persistapi.SandboxState) { ss.HypervisorState.BlockIndexMap = s.state.BlockIndexMap } -func deviceToDeviceState(devices []api.Device) (dss []persistapi.DeviceState) { +func deviceToDeviceState(devices []api.Device) (dss []devconfig.DeviceState) { for _, dev := range devices { dss = append(dss, dev.Save()) } @@ -323,7 +324,7 @@ func (s *Sandbox) loadAgent(as persistapi.AgentState) { } } -func (s *Sandbox) loadDevices(devStates []persistapi.DeviceState) { +func (s *Sandbox) loadDevices(devStates []devconfig.DeviceState) { s.devManager.LoadDevices(devStates) } diff --git a/src/runtime/virtcontainers/persist/api/sandbox.go b/src/runtime/virtcontainers/persist/api/sandbox.go index 09196637c..665edd280 100644 --- a/src/runtime/virtcontainers/persist/api/sandbox.go +++ b/src/runtime/virtcontainers/persist/api/sandbox.go @@ -7,6 +7,7 @@ package persistapi import ( + dev "github.com/kata-containers/kata-containers/src/runtime/pkg/device/config" hv "github.com/kata-containers/kata-containers/src/runtime/pkg/hypervisors" ) @@ -26,7 +27,7 @@ type SandboxState struct { CgroupPaths map[string]string // Devices plugged to sandbox(hypervisor) - Devices []DeviceState + Devices []dev.DeviceState // State is sandbox running status State string