Skip to content

Commit 0455688

Browse files
authored
Merge pull request #490 from v3io/development
Development
2 parents 17286c1 + a43aabc commit 0455688

File tree

3 files changed

+57
-57
lines changed

3 files changed

+57
-57
lines changed

Diff for: pkg/tsdb/v3iotsdb.go

+2-1
Original file line numberDiff line numberDiff line change
@@ -478,10 +478,11 @@ func deleteEntirePartition(logger logger.Logger, container v3io.Container, parti
478478
err := utils.DeleteTable(logger, container, partitionPath, "", workers)
479479
if err != nil {
480480
errChannel <- errors.Wrapf(err, "Failed to delete partition '%s'.", partitionPath)
481+
return
481482
}
482483
// Delete the Directory object
483484
err = container.DeleteObjectSync(&v3io.DeleteObjectInput{Path: partitionPath})
484-
if err != nil {
485+
if err != nil && !utils.IsNotExistsError(err) {
485486
errChannel <- errors.Wrapf(err, "Failed to delete partition folder '%s'.", partitionPath)
486487
}
487488
}

Diff for: pkg/utils/container.go

+37-45
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@ package utils
2222

2323
import (
2424
"encoding/binary"
25-
"fmt"
2625
"net/url"
2726
"strings"
2827
"time"
@@ -124,18 +123,17 @@ func DeleteTable(logger logger.Logger, container v3io.Container, path, filter st
124123

125124
responseChan := make(chan *v3io.Response, 1000)
126125
commChan := make(chan int, 2)
127-
doneChan := respWaitLoop(commChan, responseChan, 10*time.Second)
128-
reqMap := map[uint64]bool{}
126+
doneChan := make(chan error, 1)
127+
go respWaitLoop(commChan, responseChan, doneChan, 10*time.Second)
129128

130129
i := 0
131130
for iter.Next() {
132131
name := iter.GetField(config.ObjectNameAttrName).(string)
133-
req, err := container.DeleteObject(&v3io.DeleteObjectInput{Path: path + "/" + name}, nil, responseChan)
132+
_, err := container.DeleteObject(&v3io.DeleteObjectInput{Path: path + "/" + name}, nil, responseChan)
134133
if err != nil {
135134
commChan <- i
136135
return errors.Wrapf(err, "Failed to delete object '%s'.", name)
137136
}
138-
reqMap[req.ID] = true
139137
i++
140138
}
141139

@@ -144,50 +142,44 @@ func DeleteTable(logger logger.Logger, container v3io.Container, path, filter st
144142
return errors.Wrap(iter.Err(), "Failed to delete object.")
145143
}
146144

147-
<-doneChan
148-
149-
return nil
145+
return <-doneChan
150146
}
151147

152-
func respWaitLoop(comm chan int, responseChan chan *v3io.Response, timeout time.Duration) chan bool {
148+
func respWaitLoop(comm <-chan int, responseChan <-chan *v3io.Response, doneChan chan<- error, timeout time.Duration) {
153149
responses := 0
154150
requests := -1
155-
done := make(chan bool)
156-
157-
go func() {
158-
active := false
159-
for {
160-
select {
161-
162-
case resp := <-responseChan:
163-
responses++
164-
active = true
165-
166-
if resp.Error != nil {
167-
fmt.Println(resp.Error, "Failed to receive a response to delete request.")
168-
}
169-
170-
if requests == responses {
171-
done <- true
172-
return
173-
}
174-
175-
case requests = <-comm:
176-
if requests <= responses {
177-
done <- true
178-
return
179-
}
180-
181-
case <-time.After(timeout):
182-
if !active {
183-
fmt.Println("\nResponse loop timed out.", requests, responses)
184-
done <- true
185-
return
186-
}
187-
active = false
151+
152+
active := false
153+
for {
154+
select {
155+
156+
case resp := <-responseChan:
157+
responses++
158+
active = true
159+
160+
if resp.Error != nil && !IsNotExistsError(resp.Error) {
161+
doneChan <- resp.Error
162+
return
163+
}
164+
165+
if requests == responses {
166+
doneChan <- nil
167+
return
168+
}
169+
170+
case requests = <-comm:
171+
if requests <= responses {
172+
doneChan <- nil
173+
return
188174
}
189-
}
190-
}()
191175

192-
return done
176+
case <-time.After(timeout):
177+
if !active {
178+
err := errors.Errorf("\nResponse loop timed out with request=%d, responses=%d", requests, responses)
179+
doneChan <- err
180+
return
181+
}
182+
active = false
183+
}
184+
}
193185
}

Diff for: pkg/utils/labels.go

+18-11
Original file line numberDiff line numberDiff line change
@@ -65,40 +65,47 @@ func (ls Labels) Filter(keep []string) LabelsIfc {
6565

6666
// convert Label set to a string in the form key1=v1,key2=v2.. + name + hash
6767
func (ls Labels) GetKey() (string, string, uint64) {
68-
key := ""
68+
var keyBuilder strings.Builder
6969
name := ""
7070
for _, lbl := range ls {
7171
if lbl.Name == MetricName {
7272
name = lbl.Value
7373
} else {
74-
key = key + lbl.Name + "=" + lbl.Value + ","
74+
keyBuilder.WriteString(lbl.Name)
75+
keyBuilder.WriteString("=")
76+
keyBuilder.WriteString(lbl.Value)
77+
keyBuilder.WriteString(",")
7578
}
7679
}
77-
if len(key) == 0 {
80+
if keyBuilder.Len() == 0 {
7881
return name, "", ls.Hash()
7982
}
80-
return name, key[:len(key)-1], ls.Hash()
83+
84+
// Discard last comma
85+
key := keyBuilder.String()[:keyBuilder.Len()-1]
86+
87+
return name, key, ls.Hash()
8188

8289
}
8390

8491
// create update expression
8592
func (ls Labels) GetExpr() string {
86-
lblexpr := ""
93+
var lblExprBuilder strings.Builder
8794
for _, lbl := range ls {
8895
if lbl.Name != MetricName {
89-
lblexpr = lblexpr + fmt.Sprintf("%s='%s'; ", lbl.Name, lbl.Value)
96+
fmt.Fprintf(&lblExprBuilder, "%s='%s'; ", lbl.Name, lbl.Value)
9097
} else {
91-
lblexpr = lblexpr + fmt.Sprintf("_name='%s'; ", lbl.Value)
98+
fmt.Fprintf(&lblExprBuilder, "_name='%s'; ", lbl.Value)
9299
}
93100
}
94101

95-
return lblexpr
102+
return lblExprBuilder.String()
96103
}
97104

98105
func (ls Labels) LabelNames() []string {
99-
var res []string
100-
for _, l := range ls {
101-
res = append(res, l.Name)
106+
res := make([]string, len(ls))
107+
for i, l := range ls {
108+
res[i] = l.Name
102109
}
103110
return res
104111
}

0 commit comments

Comments
 (0)