mirror of
https://github.com/ceph/ceph-csi.git
synced 2024-11-25 07:40:19 +00:00
cephfs: round to cephfs size to multiple of 4Mib
Due to the bug in the df stat we need to round off the subvolume size to align with 4Mib. Note:- Minimum supported size in cephcsi is 1Mib, we dont need to take care of Kib. fixes #3240 More details at https://github.com/ceph/ceph/pull/46905 Signed-off-by: Madhu Rajanna <madhupr007@gmail.com>
This commit is contained in:
parent
1856647506
commit
f171143135
@ -277,7 +277,7 @@ func (cs *ControllerServer) CreateVolume(
|
|||||||
defer volOptions.Destroy()
|
defer volOptions.Destroy()
|
||||||
|
|
||||||
if req.GetCapacityRange() != nil {
|
if req.GetCapacityRange() != nil {
|
||||||
volOptions.Size = util.RoundOffBytes(req.GetCapacityRange().GetRequiredBytes())
|
volOptions.Size = util.RoundOffCephFSVolSize(req.GetCapacityRange().GetRequiredBytes())
|
||||||
}
|
}
|
||||||
|
|
||||||
parentVol, pvID, sID, err := checkContentSource(ctx, req, cr)
|
parentVol, pvID, sID, err := checkContentSource(ctx, req, cr)
|
||||||
@ -672,7 +672,8 @@ func (cs *ControllerServer) ControllerExpandVolume(
|
|||||||
return nil, status.Error(codes.InvalidArgument, "cannot expand snapshot-backed volume")
|
return nil, status.Error(codes.InvalidArgument, "cannot expand snapshot-backed volume")
|
||||||
}
|
}
|
||||||
|
|
||||||
RoundOffSize := util.RoundOffBytes(req.GetCapacityRange().GetRequiredBytes())
|
RoundOffSize := util.RoundOffCephFSVolSize(req.GetCapacityRange().GetRequiredBytes())
|
||||||
|
|
||||||
volClient := core.NewSubVolume(volOptions.GetConnection(), &volOptions.SubVolume, volOptions.ClusterID)
|
volClient := core.NewSubVolume(volOptions.GetConnection(), &volOptions.SubVolume, volOptions.ClusterID)
|
||||||
if err = volClient.ResizeVolume(ctx, RoundOffSize); err != nil {
|
if err = volClient.ResizeVolume(ctx, RoundOffSize); err != nil {
|
||||||
log.ErrorLog(ctx, "failed to expand volume %s: %v", fsutil.VolumeID(volIdentifier.FsSubvolName), err)
|
log.ErrorLog(ctx, "failed to expand volume %s: %v", fsutil.VolumeID(volIdentifier.FsSubvolName), err)
|
||||||
|
@ -58,6 +58,22 @@ func RoundOffBytes(bytes int64) int64 {
|
|||||||
return num
|
return num
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// RoundOffCephFSVolSize rounds up the bytes to 4MiB if the request is less
|
||||||
|
// than 4MiB or if its greater it rounds up to multiple of 4MiB.
|
||||||
|
func RoundOffCephFSVolSize(bytes int64) int64 {
|
||||||
|
// Minimum supported size is 1MiB in CephCSI, if the request is <4MiB,
|
||||||
|
// round off to 4MiB.
|
||||||
|
if bytes < helpers.MiB {
|
||||||
|
return 4 * helpers.MiB
|
||||||
|
}
|
||||||
|
|
||||||
|
bytes /= helpers.MiB
|
||||||
|
|
||||||
|
bytes = int64(math.Ceil(float64(bytes)/4) * 4)
|
||||||
|
|
||||||
|
return RoundOffBytes(bytes * helpers.MiB)
|
||||||
|
}
|
||||||
|
|
||||||
// variables which will be set during the build time.
|
// variables which will be set during the build time.
|
||||||
var (
|
var (
|
||||||
// GitCommit tell the latest git commit image is built from.
|
// GitCommit tell the latest git commit image is built from.
|
||||||
|
@ -352,3 +352,52 @@ func TestCheckKernelSupport(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestRoundOffCephFSVolSize(t *testing.T) {
|
||||||
|
t.Parallel()
|
||||||
|
tests := []struct {
|
||||||
|
name string
|
||||||
|
size int64
|
||||||
|
want int64
|
||||||
|
}{
|
||||||
|
{
|
||||||
|
"1000kiB conversion",
|
||||||
|
1000,
|
||||||
|
4194304, // 4 MiB
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"1MiB conversions",
|
||||||
|
1048576,
|
||||||
|
4194304, // 4 MiB
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"1.5Mib conversion",
|
||||||
|
1677722,
|
||||||
|
4194304, // 4 MiB
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"1023MiB conversion",
|
||||||
|
1072693248,
|
||||||
|
1073741824, // 1024 MiB
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"1.5GiB conversion",
|
||||||
|
1585446912,
|
||||||
|
2147483648, // 2 GiB
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"1555MiB conversion",
|
||||||
|
1630535680,
|
||||||
|
2147483648, // 2 GiB
|
||||||
|
},
|
||||||
|
}
|
||||||
|
for _, tt := range tests {
|
||||||
|
ts := tt
|
||||||
|
t.Run(ts.name, func(t *testing.T) {
|
||||||
|
t.Parallel()
|
||||||
|
if got := RoundOffCephFSVolSize(ts.size); got != ts.want {
|
||||||
|
t.Errorf("RoundOffCephFSVolSize() = %v, want %v", got, ts.want)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user