OLD | NEW |
1 # -*- coding: utf-8 -*- | 1 # -*- coding: utf-8 -*- |
2 # Copyright 2011 Google Inc. All Rights Reserved. | 2 # Copyright 2011 Google Inc. All Rights Reserved. |
3 # | 3 # |
4 # Licensed under the Apache License, Version 2.0 (the "License"); | 4 # Licensed under the Apache License, Version 2.0 (the "License"); |
5 # you may not use this file except in compliance with the License. | 5 # you may not use this file except in compliance with the License. |
6 # You may obtain a copy of the License at | 6 # You may obtain a copy of the License at |
7 # | 7 # |
8 # http://www.apache.org/licenses/LICENSE-2.0 | 8 # http://www.apache.org/licenses/LICENSE-2.0 |
9 # | 9 # |
10 # Unless required by applicable law or agreed to in writing, software | 10 # Unless required by applicable law or agreed to in writing, software |
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
95 some_failed = False | 95 some_failed = False |
96 for url_str in self.args: | 96 for url_str in self.args: |
97 wildcard_url = StorageUrlFromString(url_str) | 97 wildcard_url = StorageUrlFromString(url_str) |
98 if wildcard_url.IsObject(): | 98 if wildcard_url.IsObject(): |
99 raise CommandException('"rb" command requires a provider or ' | 99 raise CommandException('"rb" command requires a provider or ' |
100 'bucket URL') | 100 'bucket URL') |
101 # Wrap WildcardIterator call in try/except so we can avoid printing errors | 101 # Wrap WildcardIterator call in try/except so we can avoid printing errors |
102 # with -f option if a non-existent URL listed, permission denial happens | 102 # with -f option if a non-existent URL listed, permission denial happens |
103 # while listing, etc. | 103 # while listing, etc. |
104 try: | 104 try: |
105 # Need to materialize iterator results into a list to catch exceptions. | 105 # Materialize iterator results into a list to catch exceptions. |
106 # Since this is listing buckets this list shouldn't be too large to fit | 106 # Since this is listing buckets this list shouldn't be too large to fit |
107 # in memory at once. | 107 # in memory at once. |
108 blrs = list(self.WildcardIterator(url_str).IterBuckets()) | 108 # Also, avoid listing all fields to avoid performing unnecessary bucket |
| 109 # metadata GETs. These would also be problematic when billing is |
| 110 # disabled, as deletes are allowed but GetBucket is not. |
| 111 blrs = list( |
| 112 self.WildcardIterator(url_str).IterBuckets(bucket_fields=['id'])) |
109 except: # pylint: disable=bare-except | 113 except: # pylint: disable=bare-except |
110 some_failed = True | 114 some_failed = True |
111 if self.continue_on_error: | 115 if self.continue_on_error: |
112 continue | 116 continue |
113 else: | 117 else: |
114 raise | 118 raise |
115 for blr in blrs: | 119 for blr in blrs: |
116 url = blr.storage_url | 120 url = blr.storage_url |
117 self.logger.info('Removing %s...', url) | 121 self.logger.info('Removing %s...', url) |
118 try: | 122 try: |
119 self.gsutil_api.DeleteBucket(url.bucket_name, provider=url.scheme) | 123 self.gsutil_api.DeleteBucket(url.bucket_name, provider=url.scheme) |
120 except NotEmptyException as e: | 124 except NotEmptyException as e: |
| 125 some_failed = True |
121 if self.continue_on_error: | 126 if self.continue_on_error: |
122 continue | 127 continue |
123 elif 'VersionedBucketNotEmpty' in e.reason: | 128 elif 'VersionedBucketNotEmpty' in e.reason: |
124 raise CommandException('Bucket is not empty. Note: this is a ' | 129 raise CommandException('Bucket is not empty. Note: this is a ' |
125 'versioned bucket, so to delete all ' | 130 'versioned bucket, so to delete all ' |
126 'objects\nyou need to use:' | 131 'objects\nyou need to use:' |
127 '\n\tgsutil rm -r %s' % url) | 132 '\n\tgsutil rm -r %s' % url) |
128 else: | 133 else: |
129 raise | 134 raise |
130 except: # pylint: disable=bare-except | 135 except: # pylint: disable=bare-except |
| 136 some_failed = True |
131 if not self.continue_on_error: | 137 if not self.continue_on_error: |
132 raise | 138 raise |
133 did_some_work = True | 139 did_some_work = True |
134 if not did_some_work: | 140 if not did_some_work: |
135 raise CommandException('No URLs matched') | 141 raise CommandException('No URLs matched') |
136 return 1 if some_failed else 0 | 142 return 1 if some_failed else 0 |
137 | 143 |
OLD | NEW |