From b698287d0655420713bf6edfbc8de53da7c5a236 Mon Sep 17 00:00:00 2001 From: Stefan Majewsky Date: Mon, 30 Apr 2018 13:47:38 +0200 Subject: add DeleteOptions to Object.Delete() --- largeobject.go | 23 ++++++++++++++++++----- 1 file changed, 18 insertions(+), 5 deletions(-) (limited to 'largeobject.go') diff --git a/largeobject.go b/largeobject.go index 493671d..4175a70 100644 --- a/largeobject.go +++ b/largeobject.go @@ -349,11 +349,7 @@ func (lo *LargeObject) Open(mode LargeObjectOpenMode) (io.WriteCloser, error) { if mode&OpenAppend == 0 { if mode&OpenKeepSegments == 0 { - segmentObjects := make([]*Object, len(lo.segments)) - for idx, segment := range lo.segments { - segmentObjects[idx] = segment.Object - } - _, _, err := lo.Object.c.a.BulkDelete(segmentObjects, nil, nil) + _, _, err := lo.Object.c.a.BulkDelete(lo.segmentObjects(), nil, nil) if err != nil { return nil, err } @@ -371,6 +367,23 @@ func (lo *LargeObject) Segments() ([]SegmentInfo, error) { return lo.segments, nil } +func (lo *LargeObject) segmentObjects() []*Object { + seen := make(map[string]bool) + result := make([]*Object, 0, len(lo.segments)) + for _, segment := range lo.segments { + if segment.Object == nil { //can happen because of data segments + continue + } + fullName := segment.Object.FullName() + if !seen[fullName] { + result = append(result, segment.Object) + } + seen[fullName] = true + } + + return result +} + //NextSegmentObject suggests where to upload the next segment. // //WARNING: This is a low-level function. Most callers will want to use the -- cgit v1.2.3