mirror of
https://github.com/moby/moby.git
synced 2022-11-09 12:21:53 -05:00
Merge pull request #224 from thaJeztah/19.03_backport_devno
[19.03 backport] bugfix: fetch the right device number which great than 255
This commit is contained in:
commit
868d87b08e
2 changed files with 65 additions and 4 deletions
|
@ -191,8 +191,8 @@ func getBlkioWeightDevices(config containertypes.Resources) ([]specs.LinuxWeight
|
||||||
}
|
}
|
||||||
weight := weightDevice.Weight
|
weight := weightDevice.Weight
|
||||||
d := specs.LinuxWeightDevice{Weight: &weight}
|
d := specs.LinuxWeightDevice{Weight: &weight}
|
||||||
d.Major = int64(stat.Rdev / 256)
|
d.Major = int64(unix.Major(stat.Rdev))
|
||||||
d.Minor = int64(stat.Rdev % 256)
|
d.Minor = int64(unix.Minor(stat.Rdev))
|
||||||
blkioWeightDevices = append(blkioWeightDevices, d)
|
blkioWeightDevices = append(blkioWeightDevices, d)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -262,8 +262,8 @@ func getBlkioThrottleDevices(devs []*blkiodev.ThrottleDevice) ([]specs.LinuxThro
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
d := specs.LinuxThrottleDevice{Rate: d.Rate}
|
d := specs.LinuxThrottleDevice{Rate: d.Rate}
|
||||||
d.Major = int64(stat.Rdev / 256)
|
d.Major = int64(unix.Major(stat.Rdev))
|
||||||
d.Minor = int64(stat.Rdev % 256)
|
d.Minor = int64(unix.Minor(stat.Rdev))
|
||||||
throttleDevices = append(throttleDevices, d)
|
throttleDevices = append(throttleDevices, d)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -6,12 +6,15 @@ import (
|
||||||
"errors"
|
"errors"
|
||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
"os"
|
"os"
|
||||||
|
"path/filepath"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
|
"github.com/docker/docker/api/types/blkiodev"
|
||||||
containertypes "github.com/docker/docker/api/types/container"
|
containertypes "github.com/docker/docker/api/types/container"
|
||||||
"github.com/docker/docker/container"
|
"github.com/docker/docker/container"
|
||||||
"github.com/docker/docker/daemon/config"
|
"github.com/docker/docker/daemon/config"
|
||||||
"github.com/docker/docker/pkg/sysinfo"
|
"github.com/docker/docker/pkg/sysinfo"
|
||||||
|
"golang.org/x/sys/unix"
|
||||||
"gotest.tools/assert"
|
"gotest.tools/assert"
|
||||||
is "gotest.tools/assert/cmp"
|
is "gotest.tools/assert/cmp"
|
||||||
)
|
)
|
||||||
|
@ -376,3 +379,61 @@ func sysInfo(t *testing.T, opts ...func(*sysinfo.SysInfo)) sysinfo.SysInfo {
|
||||||
}
|
}
|
||||||
return si
|
return si
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const (
|
||||||
|
// prepare major 0x1FD(509 in decimal) and minor 0x130(304)
|
||||||
|
DEVNO = 0x11FD30
|
||||||
|
MAJOR = 509
|
||||||
|
MINOR = 304
|
||||||
|
WEIGHT = 1024
|
||||||
|
)
|
||||||
|
|
||||||
|
func deviceTypeMock(t *testing.T, testAndCheck func(string)) {
|
||||||
|
if os.Getuid() != 0 {
|
||||||
|
t.Skip("root required") // for mknod
|
||||||
|
}
|
||||||
|
|
||||||
|
t.Parallel()
|
||||||
|
|
||||||
|
tempDir, err := ioutil.TempDir("", "tempDevDir"+t.Name())
|
||||||
|
assert.NilError(t, err, "create temp file")
|
||||||
|
tempFile := filepath.Join(tempDir, "dev")
|
||||||
|
|
||||||
|
defer os.RemoveAll(tempDir)
|
||||||
|
|
||||||
|
if err = unix.Mknod(tempFile, unix.S_IFCHR, DEVNO); err != nil {
|
||||||
|
t.Fatalf("mknod error %s(%x): %v", tempFile, DEVNO, err)
|
||||||
|
}
|
||||||
|
|
||||||
|
testAndCheck(tempFile)
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestGetBlkioWeightDevices(t *testing.T) {
|
||||||
|
deviceTypeMock(t, func(tempFile string) {
|
||||||
|
mockResource := containertypes.Resources{
|
||||||
|
BlkioWeightDevice: []*blkiodev.WeightDevice{{Path: tempFile, Weight: WEIGHT}},
|
||||||
|
}
|
||||||
|
|
||||||
|
weightDevs, err := getBlkioWeightDevices(mockResource)
|
||||||
|
|
||||||
|
assert.NilError(t, err, "getBlkioWeightDevices")
|
||||||
|
assert.Check(t, is.Len(weightDevs, 1), "getBlkioWeightDevices")
|
||||||
|
assert.Check(t, weightDevs[0].Major == MAJOR, "get major device type")
|
||||||
|
assert.Check(t, weightDevs[0].Minor == MINOR, "get minor device type")
|
||||||
|
assert.Check(t, *weightDevs[0].Weight == WEIGHT, "get device weight")
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestGetBlkioThrottleDevices(t *testing.T) {
|
||||||
|
deviceTypeMock(t, func(tempFile string) {
|
||||||
|
mockDevs := []*blkiodev.ThrottleDevice{{Path: tempFile, Rate: WEIGHT}}
|
||||||
|
|
||||||
|
retDevs, err := getBlkioThrottleDevices(mockDevs)
|
||||||
|
|
||||||
|
assert.NilError(t, err, "getBlkioThrottleDevices")
|
||||||
|
assert.Check(t, is.Len(retDevs, 1), "getBlkioThrottleDevices")
|
||||||
|
assert.Check(t, retDevs[0].Major == MAJOR, "get major device type")
|
||||||
|
assert.Check(t, retDevs[0].Minor == MINOR, "get minor device type")
|
||||||
|
assert.Check(t, retDevs[0].Rate == WEIGHT, "get device rate")
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in a new issue