Skip to content

Commit 135f3ad

Browse files
committed
mgr/dashboard: fix zone update API forcing STANDARD storage class
The zone update REST API (`edit_zone`) always attempted to configure a placement target for the `STANDARD` storage class, even when the request was intended for a different storage class name. This caused failures in deployments where `STANDARD` is not defined. Changes: Club add placement target and add storage class methods into one single add_placement_targets_storage_class_zone method which takes the storage class as a param as well alongside the rest of the placement params. Fixes: https://tracker.ceph.com/issues/73105 Signed-off-by: Aashish Sharma <[email protected]>
1 parent 8afc88c commit 135f3ad

File tree

2 files changed

+38
-42
lines changed

2 files changed

+38
-42
lines changed

src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-multisite-zone-form/rgw-multisite-zone-form.component.ts

Lines changed: 4 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -199,17 +199,12 @@ export class RgwMultisiteZoneFormComponent implements OnInit {
199199
key,
200200
value
201201
}));
202-
let placementDataPool = storageClasses['STANDARD']
203-
? storageClasses['STANDARD']['data_pool']
204-
: '';
205202
let placementIndexPool = plc_pool.val.index_pool;
206203
let placementDataExtraPool = plc_pool.val.data_extra_pool;
207-
this.poolList.push({ poolname: placementDataPool });
208204
this.poolList.push({ poolname: placementIndexPool });
209205
this.poolList.push({ poolname: placementDataExtraPool });
210206
this.multisiteZoneForm.get('storageClass').setValue(this.storageClassList[0]['key']);
211207
this.getStorageClassData(this.storageClassList[0]['key']);
212-
this.multisiteZoneForm.get('placementDataPool').setValue(placementDataPool);
213208
this.multisiteZoneForm.get('placementIndexPool').setValue(placementIndexPool);
214209
this.multisiteZoneForm.get('placementDataExtraPool').setValue(placementDataExtraPool);
215210
}
@@ -220,10 +215,10 @@ export class RgwMultisiteZoneFormComponent implements OnInit {
220215

221216
getStorageClassData(storageClass: string) {
222217
let storageClassSelected = this.storageClassList.find((sc) => sc['key'] === storageClass);
223-
this.poolList.push({ poolname: storageClassSelected['value']['data_pool'] });
224-
this.multisiteZoneForm
225-
.get('storageDataPool')
226-
.setValue(storageClassSelected['value']['data_pool']);
218+
let dataPoolName = storageClassSelected['value']['data_pool'];
219+
this.poolList.push({ poolname: dataPoolName });
220+
this.multisiteZoneForm.get('storageDataPool').setValue(dataPoolName);
221+
this.multisiteZoneForm.get('placementDataPool').setValue(dataPoolName);
227222
this.multisiteZoneForm
228223
.get('storageCompression')
229224
.setValue(storageClassSelected['value']['compression_type']);

src/pybind/mgr/dashboard/services/rgw_client.py

Lines changed: 34 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -2411,60 +2411,61 @@ def modify_zone(self, zone_name: str, zonegroup_name: str, default: str, master:
24112411
raise DashboardException(error, http_status_code=500, component='rgw')
24122412
self.update_period()
24132413

2414-
def add_placement_targets_zone(self, zone_name: str, placement_target: str, data_pool: str,
2415-
index_pool: str, data_extra_pool: str):
2414+
def add_placement_targets_storage_class_zone(self, zone_name: str, placement_target: str,
2415+
data_pool: str, index_pool: str,
2416+
data_extra_pool: str, storage_class: str,
2417+
data_pool_class: str, compression: str):
24162418
rgw_zone_add_placement_cmd = ['zone', 'placement', 'add', '--rgw-zone', zone_name,
2417-
'--placement-id', placement_target, '--data-pool', data_pool,
2419+
'--placement-id', placement_target,
2420+
'--data-pool', data_pool,
24182421
'--index-pool', index_pool,
2419-
'--data-extra-pool', data_extra_pool]
2420-
try:
2421-
exit_code, _, err = mgr.send_rgwadmin_command(rgw_zone_add_placement_cmd)
2422-
if exit_code > 0:
2423-
raise DashboardException(e=err, msg='Unable to add placement target {} to zone {}'.format(placement_target, zone_name), # noqa E501 #pylint: disable=line-too-long
2424-
http_status_code=500, component='rgw')
2425-
except SubprocessError as error:
2426-
raise DashboardException(error, http_status_code=500, component='rgw')
2427-
self.update_period()
2422+
'--data-extra-pool', data_extra_pool,
2423+
'--storage-class', storage_class,
2424+
'--data-pool', data_pool_class]
24282425

2429-
def add_storage_class_zone(self, zone_name: str, placement_target: str, storage_class: str,
2430-
data_pool: str, compression: str):
2431-
rgw_zone_add_storage_class_cmd = ['zone', 'placement', 'add', '--rgw-zone', zone_name,
2432-
'--placement-id', placement_target,
2433-
'--storage-class', storage_class,
2434-
'--data-pool', data_pool]
24352426
if compression:
2436-
rgw_zone_add_storage_class_cmd.extend(['--compression', compression])
2427+
rgw_zone_add_placement_cmd.extend(['--compression', compression])
2428+
24372429
try:
2438-
exit_code, _, err = mgr.send_rgwadmin_command(rgw_zone_add_storage_class_cmd)
2430+
exit_code, _, err = mgr.send_rgwadmin_command(rgw_zone_add_placement_cmd)
24392431
if exit_code > 0:
2440-
raise DashboardException(e=err, msg='Unable to add storage class {} to zone {}'.format(storage_class, zone_name), # noqa E501 #pylint: disable=line-too-long
2441-
http_status_code=500, component='rgw')
2432+
raise DashboardException(
2433+
e=err,
2434+
msg='Unable to add placement target {} to \
2435+
zone {}'.format(placement_target, zone_name),
2436+
http_status_code=500,
2437+
component='rgw'
2438+
)
24422439
except SubprocessError as error:
24432440
raise DashboardException(error, http_status_code=500, component='rgw')
24442441
self.update_period()
24452442

2446-
def edit_zone(self, zone_name: str, new_zone_name: str, zonegroup_name: str, default: str = '',
2447-
master: str = '', endpoints: str = '', access_key: str = '', secret_key: str = '',
2448-
placement_target: str = '', data_pool: str = '', index_pool: str = '',
2449-
data_extra_pool: str = '', storage_class: str = '', data_pool_class: str = '',
2450-
compression: str = ''):
2443+
def edit_zone(self, zone_name: str, new_zone_name: str, zonegroup_name: str,
2444+
default: str = '', master: str = '', endpoints: str = '',
2445+
access_key: str = '', secret_key: str = '', placement_target: str = '',
2446+
data_pool: str = '', index_pool: str = '', data_extra_pool: str = '',
2447+
storage_class: str = '', data_pool_class: str = '', compression: str = ''):
24512448
if new_zone_name != zone_name:
24522449
rgw_zone_rename_cmd = ['zone', 'rename', '--rgw-zone',
24532450
zone_name, '--zone-new-name', new_zone_name]
24542451
try:
24552452
exit_code, _, err = mgr.send_rgwadmin_command(rgw_zone_rename_cmd, False)
24562453
if exit_code > 0:
2457-
raise DashboardException(e=err, msg='Unable to rename zone to {}'.format(new_zone_name), # noqa E501 #pylint: disable=line-too-long
2458-
http_status_code=500, component='rgw')
2454+
raise DashboardException(
2455+
e=err, msg='Unable to rename zone to {}'.format(new_zone_name),
2456+
http_status_code=500, component='rgw')
24592457
except SubprocessError as error:
24602458
raise DashboardException(error, http_status_code=500, component='rgw')
24612459
self.update_period()
24622460
self.modify_zone(new_zone_name, zonegroup_name, default, master, endpoints, access_key,
24632461
secret_key)
2464-
self.add_placement_targets_zone(new_zone_name, placement_target,
2465-
data_pool, index_pool, data_extra_pool)
2466-
self.add_storage_class_zone(new_zone_name, placement_target, storage_class,
2467-
data_pool_class, compression)
2462+
2463+
if placement_target:
2464+
self.add_placement_targets_storage_class_zone(
2465+
new_zone_name, placement_target,
2466+
data_pool, index_pool,
2467+
data_extra_pool, storage_class,
2468+
data_pool_class, compression)
24682469

24692470
def list_zones(self):
24702471
rgw_zone_list = {}

0 commit comments

Comments
 (0)