Skip to content

Commit 692424b

Browse files
Remove the hard coded timeout while doing bucket deletion. (#14085) (#23198)
[upstream:6889a5bb4ceb188ac90e1b27b7e24ed293c60927] Signed-off-by: Modular Magician <[email protected]>
1 parent a354122 commit 692424b

File tree

2 files changed

+56
-58
lines changed

2 files changed

+56
-58
lines changed

.changelog/14085.txt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
```release-note:enhancement
2+
storage: removed the hardcoded 80m timeout used during `google_storage_bucket` deletion when removing an anywhere cache, polling instead. This should speed up deletion in these cases.
3+
```

google/services/storage/resource_storage_bucket.go

Lines changed: 53 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -726,71 +726,63 @@ func getAnywhereCacheListResult(d *schema.ResourceData, config *transport_tpg.Co
726726
}
727727

728728
func deleteAnywhereCacheIfAny(d *schema.ResourceData, config *transport_tpg.Config) error {
729-
// Get the initial list of Anywhere Caches
730-
cacheList, err := getAnywhereCacheListResult(d, config)
731-
if err != nil {
732-
return err
733-
}
734-
735-
// If no cache exists initially, return early
736-
if len(cacheList) == 0 {
737-
return nil
738-
}
739-
740-
// Iterate over each object in the resource list
741-
for _, item := range cacheList {
742-
// Ensure the item is a map
743-
obj, ok := item.(map[string]interface{})
744-
if !ok {
745-
return fmt.Errorf("unexpected type for resource list item: %T", item)
746-
}
747-
748-
// Check the state of the object
749-
state, ok := obj["state"].(string)
750-
if !ok {
751-
continue // If state is not a string, skip this item
752-
}
753-
if !strings.EqualFold(state, "running") && !strings.EqualFold(state, "paused") {
754-
continue
755-
}
756-
757-
// Disable the cache if state is running or paused
758-
anywhereCacheId, ok := obj["anywhereCacheId"].(string)
759-
if !ok {
760-
return fmt.Errorf("missing or invalid anywhereCacheId: %v", obj)
761-
}
762-
anywhereCacheUrl, err := tpgresource.ReplaceVars(d, config, "{{StorageBasePath}}b/{{name}}/anywhereCaches/")
729+
for {
730+
// Get the list of Anywhere Caches
731+
cacheList, err := getAnywhereCacheListResult(d, config)
763732
if err != nil {
764733
return err
765734
}
766-
disableUrl := anywhereCacheUrl + fmt.Sprintf("%s/disable", anywhereCacheId)
767735

768-
_, err = transport_tpg.SendRequest(transport_tpg.SendRequestOptions{
769-
Config: config,
770-
Method: "POST",
771-
Project: config.Project,
772-
RawURL: disableUrl,
773-
UserAgent: config.UserAgent,
774-
})
775-
if err != nil {
776-
return err
736+
// Check if the cache list is empty
737+
if len(cacheList) == 0 {
738+
break
777739
}
778-
}
779-
time.Sleep(80 * time.Minute) // It takes around 70 minutes of time for cache to finally delete post it disable time.
780740

781-
// Post this time, we check again!
782-
// Get the list of Anywhere Caches after the sleep
783-
cacheList, err = getAnywhereCacheListResult(d, config)
784-
if err != nil {
785-
return err
786-
}
741+
// Iterate over each object in the resource list
742+
for _, item := range cacheList {
743+
// Ensure the item is a map
744+
obj, ok := item.(map[string]interface{})
745+
if !ok {
746+
return fmt.Errorf("unexpected type for resource list item: %T", item)
747+
}
787748

788-
// Check if the cache list is now empty
789-
if len(cacheList) == 0 {
790-
return nil
749+
// Check the state of the object
750+
state, ok := obj["state"].(string)
751+
if !ok {
752+
continue // If state is not a string, skip this item
753+
}
754+
if !strings.EqualFold(state, "running") && !strings.EqualFold(state, "paused") {
755+
continue
756+
}
757+
758+
// Disable the cache if state is running or paused
759+
anywhereCacheId, ok := obj["anywhereCacheId"].(string)
760+
if !ok {
761+
return fmt.Errorf("missing or invalid anywhereCacheId: %v", obj)
762+
}
763+
anywhereCacheUrl, err := tpgresource.ReplaceVars(d, config, "{{StorageBasePath}}b/{{name}}/anywhereCaches/")
764+
if err != nil {
765+
return err
766+
}
767+
disableUrl := anywhereCacheUrl + fmt.Sprintf("%s/disable", anywhereCacheId)
768+
769+
_, err = transport_tpg.SendRequest(transport_tpg.SendRequestOptions{
770+
Config: config,
771+
Method: "POST",
772+
Project: config.Project,
773+
RawURL: disableUrl,
774+
UserAgent: config.UserAgent,
775+
})
776+
if err != nil {
777+
return err
778+
}
779+
}
780+
781+
// Sleep for 1 minute
782+
time.Sleep(1 * time.Minute)
791783
}
792784

793-
return fmt.Errorf("Error while deleting the cache: caches still exists post 80mins of their disable time")
785+
return nil
794786
}
795787

796788
func resourceDataplexLabelDiffSuppress(k, old, new string, d *schema.ResourceData) bool {
@@ -1195,7 +1187,7 @@ func resourceStorageBucketDelete(d *schema.ResourceData, meta interface{}) error
11951187
// Get the bucket
11961188
bucket := d.Get("name").(string)
11971189

1198-
var listError, deleteObjectError error
1190+
var listError, deleteObjectError, deleteCacheError error
11991191
for deleteObjectError == nil {
12001192
res, err := config.NewStorageClient(userAgent).Objects.List(bucket).Versions(true).Do()
12011193
if err != nil {
@@ -1255,7 +1247,7 @@ func resourceStorageBucketDelete(d *schema.ResourceData, meta interface{}) error
12551247
wp.Submit(func() {
12561248
err = deleteAnywhereCacheIfAny(d, config)
12571249
if err != nil {
1258-
deleteObjectError = fmt.Errorf("error deleting the caches on the bucket %s : %w", bucket, err)
1250+
deleteCacheError = fmt.Errorf("error deleting the caches on the bucket %s : %w", bucket, err)
12591251
}
12601252
})
12611253

@@ -1295,6 +1287,9 @@ func resourceStorageBucketDelete(d *schema.ResourceData, meta interface{}) error
12951287
if gerr, ok := err.(*googleapi.Error); ok && gerr.Code == 409 && strings.Contains(gerr.Message, "not empty") && deleteObjectError != nil {
12961288
return fmt.Errorf("could not delete non-empty bucket due to error when deleting contents: %v", deleteObjectError)
12971289
}
1290+
if gerr, ok := err.(*googleapi.Error); ok && gerr.Code == 409 && strings.Contains(gerr.Message, "Anywhere Caches") && deleteCacheError != nil {
1291+
return fmt.Errorf("could not delete bucket due to error when deleting anywhere caches on it: %v", deleteCacheError)
1292+
}
12981293
if err != nil {
12991294
log.Printf("Error deleting bucket %s: %v", bucket, err)
13001295
return err

0 commit comments

Comments
 (0)