@@ -148,33 +148,17 @@ func (p *Provider) BucketDump(ctx context.Context, action, bucketName string) {
148148 ossdrvier := & _oss.Driver {Cred : p .apiCred , Region : p .region }
149149 switch action {
150150 case "list" :
151- var infos = make (map [string ]string )
152- if bucketName == "all" {
153- buckets , err := ossdrvier .GetBuckets (context .Background ())
154- if err != nil {
155- logger .Error ("List buckets failed:" , err )
156- return
157- }
158- for _ , b := range buckets {
159- infos [b .BucketName ] = b .Region
160- }
161- } else {
162- infos [bucketName ] = p .region
151+ infos , err := p .bucketInfos (context .Background (), ossdrvier , bucketName )
152+ if err != nil {
153+ logger .Error ("List buckets failed:" , err )
154+ return
163155 }
164156 ossdrvier .ListObjects (ctx , infos )
165157 case "total" :
166- var infos = make (map [string ]string )
167- if bucketName == "all" {
168- buckets , err := ossdrvier .GetBuckets (context .Background ())
169- if err != nil {
170- logger .Error ("List buckets failed:" , err )
171- return
172- }
173- for _ , b := range buckets {
174- infos [b .BucketName ] = b .Region
175- }
176- } else {
177- infos [bucketName ] = p .region
158+ infos , err := p .bucketInfos (context .Background (), ossdrvier , bucketName )
159+ if err != nil {
160+ logger .Error ("List buckets failed:" , err )
161+ return
178162 }
179163 ossdrvier .TotalObjects (ctx , infos )
180164 default :
@@ -286,3 +270,40 @@ func (p *Provider) lookupDatabase(instanceID string) (schema.Database, bool) {
286270 }
287271 return schema.Database {}, false
288272}
273+
274+ func (p * Provider ) bucketInfos (ctx context.Context , driver * _oss.Driver , bucketName string ) (map [string ]string , error ) {
275+ infos := make (map [string ]string )
276+ bucketName = strings .TrimSpace (bucketName )
277+ region := strings .TrimSpace (p .region )
278+ switch {
279+ case bucketName == "" :
280+ return nil , fmt .Errorf ("empty bucket name" )
281+ case bucketName == "all" :
282+ buckets , err := driver .GetBuckets (ctx )
283+ if err != nil {
284+ return nil , err
285+ }
286+ for _ , bucket := range buckets {
287+ infos [bucket .BucketName ] = bucket .Region
288+ }
289+ if len (infos ) == 0 {
290+ return nil , fmt .Errorf ("no buckets found" )
291+ }
292+ return infos , nil
293+ case region != "" && region != "all" :
294+ infos [bucketName ] = region
295+ return infos , nil
296+ default :
297+ buckets , err := driver .GetBuckets (ctx )
298+ if err != nil {
299+ return nil , err
300+ }
301+ for _ , bucket := range buckets {
302+ if bucket .BucketName == bucketName {
303+ infos [bucket .BucketName ] = bucket .Region
304+ return infos , nil
305+ }
306+ }
307+ return nil , fmt .Errorf ("bucket %s region not found; set region explicitly or use `list all` first" , bucketName )
308+ }
309+ }
0 commit comments