Skip to content
Closed
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
29 changes: 14 additions & 15 deletions lib/install/management/store_files.go
Original file line number Diff line number Diff line change
Expand Up @@ -158,23 +158,22 @@ func (d *Dispatcher) isVSAN(ds *object.Datastore) bool {
func (d *Dispatcher) deleteFilesIteratively(m *object.DatastoreFileManager, ds *object.Datastore, dsPath string) error {
defer trace.End(trace.Begin(dsPath, d.op))

if d.isVSAN(ds) {
// Get sorted result to make sure child files are listed ahead of their parent folder so we empty the folder before deleting it.
// This behaviour is specifically for vSan, as vSan sometimes throws an error when deleting a folder that is not empty.
res, err := d.getSortedChildren(ds, dsPath)
if err != nil {
if !types.IsFileNotFound(err) {
err = errors.Errorf("Failed to browse sub folders %q: %s", dsPath, err)
return err
}
d.op.Debugf("Folder %q is not found", dsPath)
return nil
// Get sorted result to make sure child files are listed ahead of their parent folder so we empty the folder before deleting it.
// This behaviour was specifically for vSan, as vSan sometimes throws an error when deleting a folder that is not empty.
// Sometimes for non-vSAN type datastores, deleting non-empty directories would throw error as well
res, err := d.getSortedChildren(ds, dsPath)
if err != nil {
if !types.IsFileNotFound(err) {
err = errors.Errorf("Failed to browse sub folders %q: %s", dsPath, err)
return err
}
d.op.Debugf("Folder %q is not found", dsPath)
return nil
}

for _, path := range res {
if err = d.deleteVMFSFiles(m, ds, path); err != nil {
return err
}
for _, path := range res {
if err = d.deleteVMFSFiles(m, ds, path); err != nil {
return err
}
}

Expand Down