Fix a bug cephfs subvolume size calculation

The charm is documented to take the 'size' in gigabytes.
But when passing it down to 'ceph fs subvolume', it's incorrectly
calculating the bytes.

Closes-Bug: #2078019
Change-Id: I94ebe1bf506ef7741dbf9d2975a7ba82405a41ff
Signed-off-by: Ponnuvel Palaniyappan <pponnuvel@gmail.com>
This commit is contained in:
Ponnuvel Palaniyappan 2024-08-29 12:58:12 +01:00
parent 52fb257d66
commit 28a1bb3f3c
No known key found for this signature in database
GPG Key ID: BC92FF4EEE6CD9DE
2 changed files with 42 additions and 2 deletions

View File

@ -126,7 +126,7 @@ class GaneshaNFS(object):
if existing_shares: if existing_shares:
return existing_shares[0].path return existing_shares[0].path
if size is not None: if size is not None:
size_in_bytes = size * 1024 * 1024 size_in_bytes = size * 1024 * 1024 * 1024
if access_ips is None: if access_ips is None:
access_ips = ['0.0.0.0'] access_ips = ['0.0.0.0']
# Ganesha deals with networks just fine, except when the network is # Ganesha deals with networks just fine, except when the network is
@ -188,7 +188,7 @@ class GaneshaNFS(object):
return exports return exports
def resize_share(self, name: str, size: int): def resize_share(self, name: str, size: int):
size_in_bytes = size * 1024 * 1024 size_in_bytes = size * 1024 * 1024 * 1024
self._ceph_subvolume_command('resize', 'ceph-fs', name, self._ceph_subvolume_command('resize', 'ceph-fs', name,
str(size_in_bytes), '--no_shrink') str(size_in_bytes), '--no_shrink')

View File

@ -78,3 +78,43 @@ class ExportTest(unittest.TestCase):
[ [
{'Access_Type': 'rw', 'Clients': '10.0.0.0/8, 192.168.0.0/16'}, {'Access_Type': 'rw', 'Clients': '10.0.0.0/8, 192.168.0.0/16'},
]) ])
class TestGaneshaNFS(unittest.TestCase):
@unittest.mock.patch.object(ganesha.GaneshaNFS, '_ceph_subvolume_command')
@unittest.mock.patch.object(ganesha.GaneshaNFS, '_ganesha_add_export')
@unittest.mock.patch.object(ganesha.GaneshaNFS, '_get_next_export_id')
@unittest.mock.patch.object(ganesha.GaneshaNFS, 'list_shares')
@unittest.mock.patch.object(ganesha.GaneshaNFS, '_ceph_auth_key')
@unittest.mock.patch.object(ganesha.GaneshaNFS, '_rados_get')
@unittest.mock.patch.object(ganesha.GaneshaNFS, '_rados_put')
@unittest.mock.patch.object(ganesha.Export, 'to_export')
def test_create_share(self, mock_export,
mock_rados_put,
mock_rados_get,
mock_auth_key,
mock_list_shares,
mock_export_id,
mock_add_export,
mock_subvolume_command):
mock_subvolume_command.return_value = b'mock-volume'
mock_list_shares.return_value = []
mock_export_id.return_value = 1
mock_auth_key.return_value = b'mock-auth-key'
inst = ganesha.GaneshaNFS('ceph-client', 'mypool')
inst.create_share('test-create-share', size=3, access_ips=None)
mock_subvolume_command.assert_any_call('create', 'ceph-fs',
'test-create-share',
str(3 * 1024 * 1024 * 1024))
@unittest.mock.patch.object(ganesha.GaneshaNFS, '_ceph_subvolume_command')
def test_resize_share(self, mock_subvolume_command):
inst = ganesha.GaneshaNFS('ceph-client', 'mypool')
inst.resize_share('test-resize-share', 5)
mock_subvolume_command.assert_any_call('resize', 'ceph-fs',
'test-resize-share',
str(5 * 1024 * 1024 * 1024),
'--no_shrink')