diff options
| author | Stefan Majewsky <majewsky@gmx.net> | 2018-04-30 13:47:38 +0200 |
|---|---|---|
| committer | Stefan Majewsky <majewsky@gmx.net> | 2018-04-30 13:47:38 +0200 |
| commit | b698287d0655420713bf6edfbc8de53da7c5a236 (patch) | |
| tree | c352afca8cb528f552a3d909420ccb3c4e89603c /object.go | |
| parent | 0df55a731aa3330f82d22b010a7a2a4d66521972 (diff) | |
| download | go-schwift-b698287d0655420713bf6edfbc8de53da7c5a236.tar.gz | |
add DeleteOptions to Object.Delete()
Diffstat (limited to 'object.go')
| -rw-r--r-- | object.go | 40 |
1 files changed, 36 insertions, 4 deletions
@@ -292,22 +292,54 @@ func (o *Object) UploadWithWriter(opts *RequestOptions, callback func(io.Writer) return <-errChan } +//DeleteOptions invokes advanced behavior in the Object.Delete() method. +type DeleteOptions struct { + //When deleting a large object, also delete its segments. This will cause + //Delete() to call into BulkDelete(), so a BulkError may be returned. + DeleteSegments bool +} + //Delete deletes the object using a DELETE request. To add URL parameters, //pass a non-nil *RequestOptions. // //This operation fails with http.StatusNotFound if the object does not exist. // //A successful DELETE request implies Invalidate(). -func (o *Object) Delete(opts *RequestOptions) error { +func (o *Object) Delete(opts *DeleteOptions, ropts *RequestOptions) error { + if opts == nil { + opts = &DeleteOptions{} + } + if opts.DeleteSegments { + exists, err := o.Exists() + if err != nil { + return err + } + if exists { + lo, err := o.AsLargeObject() + switch err { + case nil: + //is large object - delete segments and the object itself in one step + _, _, err := o.c.a.BulkDelete(append(lo.segmentObjects(), o), nil, nil) + o.Invalidate() + return err + case ErrNotLarge: + //not a large object - use regular DELETE request + default: + //unexpected error + return err + } + } + } + _, err := Request{ Method: "DELETE", ContainerName: o.c.name, ObjectName: o.name, - Options: opts, + Options: ropts, ExpectStatusCodes: []int{204}, }.Do(o.c.a.backend) if err == nil { - o.c.Invalidate() + o.Invalidate() } return err } @@ -393,5 +425,5 @@ func (o *Object) MoveTo(target *Object, copyOpts *RequestOptions, deleteOpts *Re if err != nil { return err } - return o.Delete(deleteOpts) + return o.Delete(nil, deleteOpts) } |
