@@ -461,8 +461,6 @@ func (vm *VolumeManager) AddVolume(ctx context.Context, localPath string, maxSec
461
461
vm .vs .SetAvailable (volumeID , true )
462
462
463
463
go func () {
464
- defer vol .SetStatus (VolumeStatusReady )
465
-
466
464
log := vm .log .Named ("initialize" ).With (zap .Int64 ("volumeID" , volumeID ), zap .Uint64 ("maxSectors" , maxSectors ))
467
465
start := time .Now ()
468
466
@@ -486,7 +484,7 @@ func (vm *VolumeManager) AddVolume(ctx context.Context, localPath string, maxSec
486
484
alert .Severity = alerts .SeverityInfo
487
485
}
488
486
vm .a .Register (alert )
489
-
487
+ vol . SetStatus ( VolumeStatusReady )
490
488
select {
491
489
case result <- err :
492
490
default :
@@ -565,8 +563,6 @@ func (vm *VolumeManager) RemoveVolume(ctx context.Context, id int64, force bool,
565
563
}
566
564
567
565
go func () {
568
- defer vol .SetStatus (oldStatus )
569
-
570
566
var migrated , failed int
571
567
572
568
updateRemovalAlert := func (message string , severity alerts.Severity , err error ) {
@@ -580,53 +576,56 @@ func (vm *VolumeManager) RemoveVolume(ctx context.Context, id int64, force bool,
580
576
vm .a .Register (alert )
581
577
}
582
578
583
- migrated , failed , err := vm .vs .MigrateSectors (ctx , id , 0 , func (newLoc SectorLocation ) error {
584
- err := vm .migrateSector (newLoc )
579
+ doMigration := func () error {
580
+ migrated , failed , err = vm .vs .MigrateSectors (ctx , id , 0 , func (newLoc SectorLocation ) error {
581
+ err := vm .migrateSector (newLoc )
582
+ if err != nil {
583
+ failed ++
584
+ } else {
585
+ migrated ++
586
+ }
587
+ updateRemovalAlert ("Removing volume" , alerts .SeverityInfo , nil ) // error is ignored during migration
588
+ return err
589
+ })
585
590
if err != nil {
586
- failed ++
587
- } else {
588
- migrated ++
591
+ log .Error ("failed to migrate sectors" , zap .Error (err ))
592
+ // update the alert
593
+ updateRemovalAlert ("Failed to remove volume" , alerts .SeverityError , err )
594
+ return err
595
+ } else if ! force && failed > 0 {
596
+ updateRemovalAlert ("Failed to remove volume" , alerts .SeverityError , ErrMigrationFailed )
597
+ return ErrMigrationFailed
589
598
}
590
- updateRemovalAlert ("Removing volume" , alerts .SeverityInfo , nil ) // error is ignored during migration
591
- return err
592
- })
593
- if err != nil {
594
- log .Error ("failed to migrate sectors" , zap .Error (err ))
595
- // update the alert
596
- updateRemovalAlert ("Failed to remove volume" , alerts .SeverityError , err )
597
- result <- err
598
- return
599
- } else if ! force && failed > 0 {
600
- updateRemovalAlert ("Failed to remove volume" , alerts .SeverityError , ErrMigrationFailed )
601
- result <- ErrMigrationFailed
602
- return
603
- }
604
599
605
- // remove the volume from the volume store
606
- if err := vm .vs .RemoveVolume (id , force ); err != nil {
607
- log .Error ("failed to remove volume" , zap .Error (err ))
608
- // update the alert
609
- updateRemovalAlert ("Failed to remove volume" , alerts .SeverityError , err )
610
- result <- err
611
- return
600
+ // remove the volume from the volume store
601
+ if err := vm .vs .RemoveVolume (id , force ); err != nil {
602
+ log .Error ("failed to remove volume" , zap .Error (err ))
603
+ // update the alert
604
+ updateRemovalAlert ("Failed to remove volume" , alerts .SeverityError , err )
605
+ return err
606
+ }
607
+ delete (vm .volumes , id )
608
+
609
+ // close the volume file and remove it from disk
610
+ if err := vol .Close (); err != nil {
611
+ log .Error ("failed to close volume" , zap .Error (err ))
612
+ updateRemovalAlert ("Failed to close volume files" , alerts .SeverityError , err )
613
+ return err
614
+ } else if err := os .Remove (stat .LocalPath ); err != nil && ! errors .Is (err , os .ErrNotExist ) {
615
+ log .Error ("failed to remove volume file" , zap .Error (err ))
616
+ updateRemovalAlert ("Failed to delete volume file" , alerts .SeverityError , err )
617
+ return err
618
+ }
619
+ updateRemovalAlert ("Volume removed" , alerts .SeverityInfo , nil )
620
+ return nil
612
621
}
613
- delete (vm .volumes , id )
614
622
615
- // close the volume file and remove it from disk
616
- if err := vol .Close (); err != nil {
617
- log .Error ("failed to close volume" , zap .Error (err ))
618
- updateRemovalAlert ("Failed to close volume files" , alerts .SeverityError , err )
619
- result <- err
620
- return
621
- } else if err := os .Remove (stat .LocalPath ); err != nil && ! errors .Is (err , os .ErrNotExist ) {
622
- log .Error ("failed to remove volume file" , zap .Error (err ))
623
- updateRemovalAlert ("Failed to delete volume file" , alerts .SeverityError , err )
624
- result <- err
625
- return
623
+ err := doMigration ()
624
+ vol .SetStatus (oldStatus )
625
+ select {
626
+ case result <- err :
627
+ default :
626
628
}
627
-
628
- updateRemovalAlert ("Volume removed" , alerts .SeverityInfo , nil )
629
- result <- nil
630
629
}()
631
630
632
631
return nil
@@ -670,20 +669,12 @@ func (vm *VolumeManager) ResizeVolume(ctx context.Context, id int64, maxSectors
670
669
671
670
go func () {
672
671
log := vm .log .Named ("resize" ).With (zap .Int64 ("volumeID" , id ))
673
-
674
- defer func () {
675
- if resetReadOnly {
676
- // reset the volume to read-write
677
- if err := vm .vs .SetReadOnly (id , false ); err != nil {
678
- vm .log .Error ("failed to set volume to read-write" , zap .Error (err ))
679
- }
680
- }
681
- vol .SetStatus (VolumeStatusReady )
682
- }()
683
-
684
672
ctx , cancel , err := vm .tg .AddContext (ctx )
685
673
if err != nil {
686
- result <- err
674
+ select {
675
+ case result <- err :
676
+ default :
677
+ }
687
678
return
688
679
}
689
680
defer cancel ()
@@ -722,6 +713,13 @@ func (vm *VolumeManager) ResizeVolume(ctx context.Context, id int64, maxSectors
722
713
alert .Severity = alerts .SeverityInfo
723
714
}
724
715
vm .a .Register (alert )
716
+ if resetReadOnly {
717
+ // reset the volume to read-write
718
+ if err := vm .vs .SetReadOnly (id , false ); err != nil {
719
+ vm .log .Error ("failed to set volume to read-write" , zap .Error (err ))
720
+ }
721
+ }
722
+ vol .SetStatus (VolumeStatusReady )
725
723
select {
726
724
case result <- err :
727
725
default :
0 commit comments