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 2db12f677f..074980f44f 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 dd61efbfcf..36d513fa65 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 294e8da604..6088a5c9f5 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 67cf243c7b..38358ed248 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 ec10cc02d1..ed791f8416 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 9d6de5a05a..75d65d0a5a 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 6ac038b02e..7441c2d892 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 cd0c5f2640..7fbcc382c4 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 d9e3193cb6..eed9e39f1e 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 f559d82429..56a63ae59e 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 09196637ca..665edd2804 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