Skip to content

Commit

Permalink
Bug 2062862: Check for errors in promise.all call and allow partial f…
Browse files Browse the repository at this point in the history
…ailure (#1435) (#1443)

* Check for errors in promise.all call and allow partial failure

* cleanup

* cleanup

* Change from string to undefined to match storage implementation

Co-authored-by: Ian Bolton <ibolton@redhat.com>
  • Loading branch information
rayfordj and ibolton336 committed Jun 9, 2022
1 parent 11ef65a commit 7c87240
Show file tree
Hide file tree
Showing 4 changed files with 27 additions and 13 deletions.
32 changes: 22 additions & 10 deletions src/app/cluster/duck/sagas.ts
Original file line number Diff line number Diff line change
Expand Up @@ -71,10 +71,16 @@ function groupClusters(migClusters: IMigCluster[], refs: any[]): ICluster[] {
};

if (!mc.spec.isHostCluster) {
fullCluster['Secret'] = refs.find(
(i) =>
i.data.kind === 'Secret' && i.data.metadata.name === mc.spec.serviceAccountSecretRef.name
).data;
const secretValue = refs.find((ref) => {
if (ref.isAxiosError) {
return;
} else {
ref.data.kind === 'Secret' &&
ref.data.metadata.name === mc.spec.serviceAccountSecretRef.name;
}
});

fullCluster['Secret'] = secretValue?.data ? secretValue.data : undefined;
}

return fullCluster;
Expand All @@ -89,11 +95,17 @@ function* fetchClustersGenerator(): Generator<any, any, any> {
let clusterList = yield client.list(resource);
clusterList = yield clusterList.data.items;
const nonHostClusters = clusterList.filter((c: IMigCluster) => !c.spec.isHostCluster);
const refs = yield Promise.all(
fetchMigClusterRefs(client, state.auth.migMeta, nonHostClusters)
);
const groupedClusters = groupClusters(clusterList, refs);
return { updatedClusters: groupedClusters };
try {
const refResponses = yield Promise.all(
fetchMigClusterRefs(client, state.auth.migMeta, nonHostClusters).map((p) => {
return p.catch((error) => error);
})
);
const groupedClusters = groupClusters(clusterList, refResponses);
return { updatedClusters: groupedClusters };
} catch (e) {
throw e;
}
} catch (e) {
throw e;
}
Expand Down Expand Up @@ -330,7 +342,7 @@ function* updateClusterRequest(action: any): Generator<any, any, any> {
const urlUpdated = clusterValues.url !== currentUrl;

// NOTE: Need to decode the b64 token
const currentToken = atob(currentCluster.Secret.data.saToken);
const currentToken = atob(currentCluster?.Secret?.data?.saToken);
const tokenUpdated = clusterValues.token !== currentToken;

const currentAzureResource = currentCluster.MigCluster.spec.azureResourceGroup;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,9 @@ const valuesHaveUpdate = (values: IFormValues, currentCluster: ICluster) => {
return true;
}
const requireSSL = !currentCluster.MigCluster.spec.insecure;
const rawToken = atob(currentCluster.Secret.data.saToken);
const rawToken = currentCluster?.Secret?.data?.saToken
? atob(currentCluster?.Secret?.data?.saToken)
: null;
const existingEndpoint = currentCluster.MigCluster.spec.url;
const azureResourceGroup = currentCluster.MigCluster.spec.azureResourceGroup
? currentCluster.MigCluster.spec.azureResourceGroup
Expand Down
2 changes: 1 addition & 1 deletion src/app/home/pages/ClustersPage/helpers.ts
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ export const getClusterInfo = (
: cluster.MigCluster.status.conditions.filter((c) => c.type === 'Ready').length > 0,
clusterUrl: isHostCluster ? migMeta.clusterApi : cluster.MigCluster.spec.url,
clusterSvcToken:
!isHostCluster && cluster.Secret.data.saToken ? atob(cluster.Secret.data.saToken) : null,
!isHostCluster && cluster?.Secret?.data?.saToken ? atob(cluster.Secret.data.saToken) : null,
clusterRequireSSL: !cluster.MigCluster.spec.insecure,
clusterCABundle: cluster.MigCluster.spec.caBundle,
exposedRegistryPath: cluster.MigCluster.spec.exposedRegistryPath,
Expand Down
2 changes: 1 addition & 1 deletion src/app/home/pages/HooksPage/helpers.ts
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ export const getClusterInfo = (
: cluster.MigCluster.status.conditions.filter((c) => c.type === 'Ready').length > 0,
clusterUrl: isHostCluster ? migMeta.clusterApi : cluster.MigCluster.spec.url,
clusterSvcToken:
!isHostCluster && cluster.Secret.data.saToken ? atob(cluster.Secret.data.saToken) : null,
!isHostCluster && cluster?.Secret?.data?.saToken ? atob(cluster.Secret.data.saToken) : null,
clusterRequireSSL: !cluster.MigCluster.spec.insecure,
clusterCABundle: cluster.MigCluster.spec.caBundle,
exposedRegistryPath: cluster.MigCluster.spec.exposedRegistryPath,
Expand Down

0 comments on commit 7c87240

Please sign in to comment.