Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 8 additions & 10 deletions internal/server/device/config/devices.go
Original file line number Diff line number Diff line change
Expand Up @@ -139,23 +139,13 @@ func (list Devices) Update(newlist Devices, updateFields func(Device, Device) []

// Detect which devices have changed or been removed in in new list.
for key, d := range list {
// Always skip user keys.
if strings.HasPrefix(key, "user.") {
continue
}

if !newlist.Contains(key, d) {
rmlist[key] = d
}
}

// Detect which devices have changed or been added in in new list.
for key, d := range newlist {
// Always skip user keys.
if strings.HasPrefix(key, "user.") {
continue
}

if !list.Contains(key, d) {
addlist[key] = d
}
Expand All @@ -172,6 +162,14 @@ func (list Devices) Update(newlist Devices, updateFields func(Device, Device) []
// Detect keys different between old and new device and append to the all changed keys list.
allChangedKeys = append(allChangedKeys, deviceEqualsDiffKeys(oldDevice, newDevice)...)

// Remove 'user.' fields that can be live-updated without adding/removing the device from instance.
for k := range d {
if strings.HasPrefix(k, "user.") {
delete(oldDevice, k)
delete(newDevice, k)
}
}

// Remove any fields that can be live-updated without adding/removing the device from instance.
if updateFields != nil {
for _, k := range updateFields(oldDevice, newDevice) {
Expand Down
32 changes: 17 additions & 15 deletions internal/server/device/disk.go
Original file line number Diff line number Diff line change
Expand Up @@ -1526,25 +1526,27 @@ func (d *disk) Update(oldDevices deviceConfig.Devices, isRunning bool) error {
}

if d.inst.Type() == instancetype.VM {
// Parse the limits into usable values.
readBps, readIops, writeBps, writeIops, err := d.parseLimit(d.config)
if err != nil {
return err
}
var diskLimits *deviceConfig.DiskLimits
runConf.Mounts = []deviceConfig.MountEntryItem{}
if d.config["limits.read"] != "" || d.config["limits.write"] != "" || d.config["limits.max"] != "" {
// Parse the limits into usable values.
readBps, readIops, writeBps, writeIops, err := d.parseLimit(d.config)
if err != nil {
return err
}

// Apply the limits to a minimal mount entry.
diskLimits := &deviceConfig.DiskLimits{
ReadBytes: readBps,
ReadIOps: readIops,
WriteBytes: writeBps,
WriteIOps: writeIops,
}
// Apply the limits to a minimal mount entry.
diskLimits = &deviceConfig.DiskLimits{
ReadBytes: readBps,
ReadIOps: readIops,
WriteBytes: writeBps,
WriteIOps: writeIops,
}

runConf.Mounts = []deviceConfig.MountEntryItem{
{
runConf.Mounts = append(runConf.Mounts, deviceConfig.MountEntryItem{
DevName: d.name,
Limits: diskLimits,
},
})
}

oldAttached := util.IsTrueOrEmpty(oldDevices[d.name]["attached"])
Expand Down
2 changes: 1 addition & 1 deletion internal/server/instance/drivers/driver_qemu.go
Original file line number Diff line number Diff line change
Expand Up @@ -2487,7 +2487,7 @@ func (d *qemu) deviceStart(dev device.Device, instanceRunning bool) (*deviceConf
if err != nil {
return nil, err
}
} else {
} else if mount.TargetPath != "/" {
err = d.deviceAttachBlockDevice(dev.Name(), configCopy, mount)
if err != nil {
return nil, err
Expand Down
Loading