Skip to content

Commit edbc65e

Browse files
authored
added alert in the ui while upgrade in progress (#850)
1 parent 03e757e commit edbc65e

File tree

2 files changed

+62
-41
lines changed

2 files changed

+62
-41
lines changed

pkg/vpwned/server/version.go

Lines changed: 49 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -581,25 +581,30 @@ func checkAndDeleteMigrationPlans(ctx context.Context, restConfig *rest.Config)
581581
if err != nil {
582582
return false, "Failed to create dynamic client"
583583
}
584+
584585
list, err := dynamicClient.Resource(gvr).Namespace("migration-system").List(ctx, metav1.ListOptions{})
585586
if err != nil {
586587
return false, "Failed to list MigrationPlans"
587588
}
589+
588590
for _, item := range list.Items {
589-
err := dynamicClient.Resource(gvr).Namespace("migration-system").Delete(ctx, item.GetName(), metav1.DeleteOptions{})
591+
_ = dynamicClient.Resource(gvr).Namespace("migration-system").Delete(ctx, item.GetName(), metav1.DeleteOptions{})
592+
}
593+
594+
timeout := 5 * time.Minute
595+
interval := 5 * time.Second
596+
for start := time.Now(); time.Since(start) < timeout; {
597+
list, err := dynamicClient.Resource(gvr).Namespace("migration-system").List(ctx, metav1.ListOptions{})
590598
if err != nil {
591-
return false, "Failed to delete MigrationPlan: " + item.GetName()
599+
return false, "Failed to re-list MigrationPlans during polling"
592600
}
601+
if len(list.Items) == 0 {
602+
return true, "No MigrationPlans remaining"
603+
}
604+
time.Sleep(interval)
593605
}
594-
time.Sleep(2 * time.Second)
595-
list, err = dynamicClient.Resource(gvr).Namespace("migration-system").List(ctx, metav1.ListOptions{})
596-
if err != nil {
597-
return false, "Failed to re-list MigrationPlans"
598-
}
599-
if len(list.Items) == 0 {
600-
return true, "No MigrationPlans remaining"
601-
}
602-
return false, "MigrationPlans still exist"
606+
607+
return false, "MigrationPlans still exist after 5 minute timeout"
603608
}
604609

605610
func checkAndDeleteRollingMigrationPlans(ctx context.Context, restConfig *rest.Config) (bool, string) {
@@ -608,33 +613,34 @@ func checkAndDeleteRollingMigrationPlans(ctx context.Context, restConfig *rest.C
608613
if err != nil {
609614
return false, "Failed to create dynamic client"
610615
}
616+
611617
list, err := dynamicClient.Resource(gvr).Namespace("migration-system").List(ctx, metav1.ListOptions{})
612618
if err != nil {
613619
return false, "Failed to list RollingMigrationPlans"
614620
}
621+
615622
for _, item := range list.Items {
616-
err := dynamicClient.Resource(gvr).Namespace("migration-system").Delete(ctx, item.GetName(), metav1.DeleteOptions{})
623+
_ = dynamicClient.Resource(gvr).Namespace("migration-system").Delete(ctx, item.GetName(), metav1.DeleteOptions{})
624+
}
625+
626+
timeout := 5 * time.Minute
627+
interval := 5 * time.Second
628+
for start := time.Now(); time.Since(start) < timeout; {
629+
list, err := dynamicClient.Resource(gvr).Namespace("migration-system").List(ctx, metav1.ListOptions{})
617630
if err != nil {
618-
return false, "Failed to delete RollingMigrationPlan: " + item.GetName()
631+
return false, "Failed to re-list RollingMigrationPlans during polling"
619632
}
633+
if len(list.Items) == 0 {
634+
return true, "No RollingMigrationPlans remaining"
635+
}
636+
time.Sleep(interval)
620637
}
621-
time.Sleep(2 * time.Second)
622-
list, err = dynamicClient.Resource(gvr).Namespace("migration-system").List(ctx, metav1.ListOptions{})
623-
if err != nil {
624-
return false, "Failed to re-list RollingMigrationPlans"
625-
}
626-
if len(list.Items) == 0 {
627-
return true, "No RollingMigrationPlans remaining"
628-
}
629-
return false, "RollingMigrationPlans still exist"
638+
639+
return false, "RollingMigrationPlans still exist after 5 minute timeout"
630640
}
631641

632642
func checkAndScaleDownAgent(ctx context.Context, restConfig *rest.Config) (bool, string) {
633-
gvr := schema.GroupVersionResource{
634-
Group: "vjailbreak.k8s.pf9.io",
635-
Version: "v1alpha1",
636-
Resource: "vjailbreaknodes",
637-
}
643+
gvr := schema.GroupVersionResource{Group: "vjailbreak.k8s.pf9.io", Version: "v1alpha1", Resource: "vjailbreaknodes"}
638644
dynamicClient, err := dynamic.NewForConfig(restConfig)
639645
if err != nil {
640646
return false, "Failed to create dynamic client"
@@ -646,22 +652,27 @@ func checkAndScaleDownAgent(ctx context.Context, restConfig *rest.Config) (bool,
646652
}
647653

648654
for _, item := range list.Items {
649-
err := dynamicClient.Resource(gvr).Namespace("migration-system").Delete(ctx, item.GetName(), metav1.DeleteOptions{})
650-
if err != nil {
651-
return false, "Failed to delete VjailbreakNode: " + item.GetName()
655+
if item.GetName() == "vjailbreak-master" {
656+
continue
652657
}
658+
_ = dynamicClient.Resource(gvr).Namespace("migration-system").Delete(ctx, item.GetName(), metav1.DeleteOptions{})
653659
}
654660

655-
time.Sleep(2 * time.Second)
656-
list, err = dynamicClient.Resource(gvr).Namespace("migration-system").List(ctx, metav1.ListOptions{})
657-
if err != nil {
658-
return false, "Failed to re-list VjailbreakNodes"
659-
}
660-
if len(list.Items) == 0 || (len(list.Items) == 1 && list.Items[0].GetName() == "vjailbreak-master") {
661-
return true, "Agents scaled down"
661+
timeout := 5 * time.Minute
662+
interval := 5 * time.Second
663+
for start := time.Now(); time.Since(start) < timeout; {
664+
list, err := dynamicClient.Resource(gvr).Namespace("migration-system").List(ctx, metav1.ListOptions{})
665+
if err != nil {
666+
return false, "Failed to re-list VjailbreakNodes"
667+
}
668+
669+
if len(list.Items) == 0 || (len(list.Items) == 1 && list.Items[0].GetName() == "vjailbreak-master") {
670+
return true, "Agents scaled down"
671+
}
672+
time.Sleep(interval)
662673
}
663674

664-
return false, "Non-master agents still exist"
675+
return false, "Non-master agents still exist after 5 minute timeout"
665676
}
666677

667678
func checkAndDeleteSecret(ctx context.Context, kubeClient client.Client, restConfig *rest.Config, credType string) (bool, string) {

ui/src/components/UpgradeModal.tsx

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ export const UpgradeModal = ({ show, onClose }) => {
3636
const [successMsg, setSuccessMsg] = useState('');
3737
const [upgradeInProgress, setUpgradeInProgress] = useState(false);
3838
const [progressData, setProgressData] = useState<UpgradeProgressResponse | null>(null);
39+
const [cleanUpInProgress, setCleanUpInProgress] = useState(false);
3940
const theme = useTheme();
4041

4142
const stepKeys = [
@@ -123,6 +124,8 @@ export const UpgradeModal = ({ show, onClose }) => {
123124
}, [upgradeInProgress, onClose, selectedVersion]);
124125

125126
const runStepwiseCleanup = async () => {
127+
setCleanUpInProgress(true);
128+
setErrorMsg('');
126129
let newStates = stepLabels.map(label => ({ label, state: 'pending' }));
127130
setStepStates(newStates);
128131

@@ -139,6 +142,7 @@ export const UpgradeModal = ({ show, onClose }) => {
139142
setStepStates([...newStates]);
140143
if (newStates[i].state === 'error') break;
141144
}
145+
setCleanUpInProgress(false);
142146
};
143147

144148
const allChecksPassed = checkResults
@@ -215,6 +219,12 @@ export const UpgradeModal = ({ show, onClose }) => {
215219
</Box>
216220
)}
217221

222+
{(upgradeInProgress || cleanUpInProgress) && (
223+
<Alert severity="warning" sx={{ mt: 2 }}>
224+
Processing. Please do not close or refresh this page.
225+
</Alert>
226+
)}
227+
218228
{errorMsg && (
219229
<Box display="flex" justifyContent="center" mb={2}>
220230
<Alert severity="error" sx={{ mb: 2, display: 'flex', alignItems: 'center' }}>
@@ -261,7 +271,7 @@ export const UpgradeModal = ({ show, onClose }) => {
261271
<DialogActions>
262272
<Button
263273
onClick={() => upgradeMutation.mutate()}
264-
disabled={!selectedVersion || upgradeInProgress || areVersionsLoading || upgradeMutation.isPending || !allChecksPassed}
274+
disabled={!selectedVersion || upgradeInProgress || cleanUpInProgress || areVersionsLoading || upgradeMutation.isPending || !allChecksPassed}
265275
variant="contained"
266276
color="primary"
267277
fullWidth
@@ -277,12 +287,12 @@ export const UpgradeModal = ({ show, onClose }) => {
277287
arrow
278288
>
279289
<span>
280-
<Button onClick={runStepwiseCleanup} variant="contained" color="primary" fullWidth disabled={upgradeInProgress}>
290+
<Button onClick={runStepwiseCleanup} variant="contained" color="primary" fullWidth disabled={upgradeInProgress || cleanUpInProgress}>
281291
Cleanup
282292
</Button>
283293
</span>
284294
</Tooltip>
285-
<Button onClick={onClose} variant="outlined" fullWidth disabled={upgradeInProgress}>
295+
<Button onClick={onClose} variant="outlined" fullWidth disabled={upgradeInProgress || cleanUpInProgress}>
286296
Cancel
287297
</Button>
288298
</DialogActions>

0 commit comments

Comments
 (0)