From a5ff572061445d2a1c7d07c342116c3b7afeae49 Mon Sep 17 00:00:00 2001 From: angiecris Date: Fri, 2 Mar 2018 14:43:44 -0800 Subject: [PATCH 1/6] Revert "Reduce datastore searches during non-vSAN delete operations (#6951)" This reverts commit 1fd1e7fa361da3623a6e629759687315d0f323fe. --- lib/install/management/store_files.go | 29 ++++++++++++--------------- 1 file changed, 13 insertions(+), 16 deletions(-) diff --git a/lib/install/management/store_files.go b/lib/install/management/store_files.go index 2046fb7ab6..8f5c860890 100644 --- a/lib/install/management/store_files.go +++ b/lib/install/management/store_files.go @@ -158,26 +158,23 @@ 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 children files listed ahead of folder. Then we can empty folder before delete it + // This function specifically designed for vSan, as vSan sometimes will throw error to delete folder is the folder 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 + } - 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 } } - return d.deleteVMFSFiles(m, ds, dsPath) } From b4f125903fbe3e57a662081d9baed0dd4f7ff476 Mon Sep 17 00:00:00 2001 From: angiecris Date: Thu, 8 Mar 2018 13:57:33 -0800 Subject: [PATCH 2/6] attempt delete datastore folder first; empty it upon failure --- lib/install/management/store_files.go | 32 ++++++++++++++++----------- 1 file changed, 19 insertions(+), 13 deletions(-) diff --git a/lib/install/management/store_files.go b/lib/install/management/store_files.go index 8f5c860890..6e3df3124d 100644 --- a/lib/install/management/store_files.go +++ b/lib/install/management/store_files.go @@ -158,24 +158,30 @@ 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)) - // Get sorted result to make sure children files listed ahead of folder. Then we can empty folder before delete it - // This function specifically designed for vSan, as vSan sometimes will throw error to delete folder is the folder is not empty - res, err := d.getSortedChildren(ds, dsPath) + // If deleting top level folder fails, delete the child files and empty the folder first + err := d.deleteVMFSFiles(m, 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.Debug("Attempt to delete top level folder %s failed. Removing the children files instead.") + 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 } - 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 + } } + + return d.deleteVMFSFiles(m, ds, dsPath) } - return d.deleteVMFSFiles(m, ds, dsPath) + + return nil } func (d *Dispatcher) deleteVMFSFiles(m *object.DatastoreFileManager, ds *object.Datastore, dsPath string) error { From 15a37bbd675e7a310109681c94cf3f7f43af31d0 Mon Sep 17 00:00:00 2001 From: angiecris Date: Thu, 8 Mar 2018 14:00:51 -0800 Subject: [PATCH 3/6] fixup! attempt delete datastore folder first; empty it upon failure --- lib/install/management/store_files.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/install/management/store_files.go b/lib/install/management/store_files.go index 6e3df3124d..d497da1d8d 100644 --- a/lib/install/management/store_files.go +++ b/lib/install/management/store_files.go @@ -158,7 +158,7 @@ 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 deleting top level folder fails, delete the child files and empty the folder first + // If deleting top level folder fails, remove the child files to empty the folder first err := d.deleteVMFSFiles(m, ds, dsPath) if err != nil { d.op.Debug("Attempt to delete top level folder %s failed. Removing the children files instead.") From 8045b1adc4e5fe9936ffaee975f0059c1379a3a5 Mon Sep 17 00:00:00 2001 From: angiecris Date: Fri, 9 Mar 2018 09:24:44 -0800 Subject: [PATCH 4/6] fixup! fixup! attempt delete datastore folder first; empty it upon failure --- lib/install/management/store_files.go | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/lib/install/management/store_files.go b/lib/install/management/store_files.go index d497da1d8d..48cd8eba7e 100644 --- a/lib/install/management/store_files.go +++ b/lib/install/management/store_files.go @@ -161,7 +161,7 @@ func (d *Dispatcher) deleteFilesIteratively(m *object.DatastoreFileManager, ds * // If deleting top level folder fails, remove the child files to empty the folder first err := d.deleteVMFSFiles(m, ds, dsPath) if err != nil { - d.op.Debug("Attempt to delete top level folder %s failed. Removing the children files instead.") + d.op.Debugf("Attempt to delete top level folder %s failed. Removing the children files instead.", dsPath) res, err := d.getSortedChildren(ds, dsPath) if err != nil { if !types.IsFileNotFound(err) { @@ -196,7 +196,9 @@ func (d *Dispatcher) deleteVMFSFiles(m *object.DatastoreFileManager, ds *object. if err := m.Delete(d.op, dsPath); err != nil { d.op.Debugf("Failed to delete %q: %s", dsPath, err) + return err } + return nil } From 607b60fd28ddd0bb40afd4380fc4a5bedb22a58d Mon Sep 17 00:00:00 2001 From: angiecris Date: Fri, 9 Mar 2018 09:26:15 -0800 Subject: [PATCH 5/6] fixup! fixup! attempt delete datastore folder first; empty it upon failure --- lib/install/management/store_files.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/install/management/store_files.go b/lib/install/management/store_files.go index 48cd8eba7e..b9619c6f45 100644 --- a/lib/install/management/store_files.go +++ b/lib/install/management/store_files.go @@ -161,7 +161,7 @@ func (d *Dispatcher) deleteFilesIteratively(m *object.DatastoreFileManager, ds * // If deleting top level folder fails, remove the child files to empty the folder first err := d.deleteVMFSFiles(m, ds, dsPath) if err != nil { - d.op.Debugf("Attempt to delete top level folder %s failed. Removing the children files instead.", dsPath) + d.op.Debugf("Attempt to delete top level folder %s failed. Remove the children files instead.", dsPath) res, err := d.getSortedChildren(ds, dsPath) if err != nil { if !types.IsFileNotFound(err) { From a29cd0138ac4101734d64fb950b215fdee9e92d0 Mon Sep 17 00:00:00 2001 From: angiecris Date: Fri, 9 Mar 2018 12:07:01 -0800 Subject: [PATCH 6/6] trigger drone