Skip to content

Commit d01835f

Browse files
mgr/dashboard: Gracefully handle client/target info not found
Fixes: https://tracker.ceph.com/issues/41779 Signed-off-by: Ricardo Marques <[email protected]>
1 parent 6f346f1 commit d01835f

File tree

2 files changed

+42
-14
lines changed

2 files changed

+42
-14
lines changed

src/pybind/mgr/dashboard/controllers/iscsi.py

Lines changed: 24 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -708,19 +708,36 @@ def _config_to_target(target_iqn, config):
708708
}
709709
return target
710710

711+
@staticmethod
712+
def _is_executing(target_iqn):
713+
executing_tasks, _ = TaskManager.list()
714+
for t in executing_tasks:
715+
if t.name.startswith('iscsi/target') and t.metadata.get('target_iqn') == target_iqn:
716+
return True
717+
return False
718+
711719
@staticmethod
712720
def _set_info(target):
713721
if not target['portals']:
714722
return
715723
target_iqn = target['target_iqn']
724+
# During task execution, additional info is not available
725+
if IscsiTarget._is_executing(target_iqn):
726+
return
716727
gateway_name = target['portals'][0]['host']
717-
target_info = IscsiClient.instance(gateway_name=gateway_name).get_targetinfo(target_iqn)
718-
target['info'] = target_info
719-
for client in target['clients']:
720-
client_iqn = client['client_iqn']
721-
client_info = IscsiClient.instance(gateway_name=gateway_name).get_clientinfo(
722-
target_iqn, client_iqn)
723-
client['info'] = client_info
728+
try:
729+
target_info = IscsiClient.instance(gateway_name=gateway_name).get_targetinfo(
730+
target_iqn)
731+
target['info'] = target_info
732+
for client in target['clients']:
733+
client_iqn = client['client_iqn']
734+
client_info = IscsiClient.instance(gateway_name=gateway_name).get_clientinfo(
735+
target_iqn, client_iqn)
736+
client['info'] = client_info
737+
except RequestException as e:
738+
# Target/Client has been removed in the meanwhile (e.g. using gwcli)
739+
if e.status_code != 404:
740+
raise e
724741

725742
@staticmethod
726743
def _sorted_portals(portals):

src/pybind/mgr/dashboard/frontend/src/app/ceph/block/iscsi-target-details/iscsi-target-details.component.ts

Lines changed: 18 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,12 @@ export class IscsiTargetDetailsComponent implements OnChanges, OnInit {
7878
this.metadata = { root: this.selectedItem.target_controls };
7979
const cssClasses = {
8080
target: {
81-
expanded: _.join([Icons.large, Icons.bullseye], ' ')
81+
expanded: _.join(
82+
this.selectedItem.cdExecuting
83+
? [Icons.large, Icons.spinner, Icons.spin]
84+
: [Icons.large, Icons.bullseye],
85+
' '
86+
)
8287
},
8388
initiators: {
8489
expanded: _.join([Icons.large, Icons.user], ' '),
@@ -120,11 +125,13 @@ export class IscsiTargetDetailsComponent implements OnChanges, OnInit {
120125
const clients = [];
121126
_.forEach(this.selectedItem.clients, (client) => {
122127
const client_metadata = _.cloneDeep(client.auth);
123-
_.extend(client_metadata, client.info);
124-
delete client_metadata['state'];
125-
_.forEach(Object.keys(client.info.state), (state) => {
126-
client_metadata[state.toLowerCase()] = client.info.state[state];
127-
});
128+
if (client.info) {
129+
_.extend(client_metadata, client.info);
130+
delete client_metadata['state'];
131+
_.forEach(Object.keys(client.info.state), (state) => {
132+
client_metadata[state.toLowerCase()] = client.info.state[state];
133+
});
134+
}
128135
this.metadata['client_' + client.client_iqn] = client_metadata;
129136

130137
const luns = [];
@@ -138,9 +145,13 @@ export class IscsiTargetDetailsComponent implements OnChanges, OnInit {
138145
});
139146
});
140147

148+
let status = '';
149+
if (client.info) {
150+
status = Object.keys(client.info.state).includes('LOGGED_IN') ? 'logged_in' : 'logged_out';
151+
}
141152
clients.push({
142153
value: client.client_iqn,
143-
status: Object.keys(client.info.state).includes('LOGGED_IN') ? 'logged_in' : 'logged_out',
154+
status: status,
144155
id: 'client_' + client.client_iqn,
145156
children: luns
146157
});

0 commit comments

Comments
 (0)