Skip to content
This repository was archived by the owner on Jan 28, 2021. It is now read-only.

Commit 3ed80a0

Browse files
authored
Merge pull request #655 from kuba--/close-iterators
Close iterators
2 parents c95ad00 + 6c5987a commit 3ed80a0

File tree

7 files changed

+51
-30
lines changed

7 files changed

+51
-30
lines changed

sql/analyzer/pushdown.go

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -329,7 +329,10 @@ func (i *releaseIter) Next() (sql.Row, error) {
329329
return row, nil
330330
}
331331

332-
func (i *releaseIter) Close() error {
332+
func (i *releaseIter) Close() (err error) {
333333
i.once.Do(i.release)
334-
return nil
334+
if i.child != nil {
335+
err = i.child.Close()
336+
}
337+
return err
335338
}

sql/index/pilosa/driver.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -251,6 +251,7 @@ func (d *Driver) savePartition(
251251
}
252252

253253
idx.mapping.close()
254+
kviter.Close()
254255
}()
255256

256257
for colID = offset; err == nil; colID++ {
@@ -344,6 +345,7 @@ func (d *Driver) Save(
344345
return err
345346
}
346347

348+
defer iter.Close()
347349
pilosaIndex := idx.index
348350
var rows uint64
349351
for {

sql/plan/cross_join.go

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -155,17 +155,18 @@ func (i *crossJoinIterator) Next() (sql.Row, error) {
155155
}
156156
}
157157

158-
func (i *crossJoinIterator) Close() error {
159-
if err := i.l.Close(); err != nil {
160-
if i.r != nil {
161-
_ = i.r.Close()
162-
}
163-
return err
158+
func (i *crossJoinIterator) Close() (err error) {
159+
if i.l != nil {
160+
err = i.l.Close()
164161
}
165162

166163
if i.r != nil {
167-
return i.r.Close()
164+
if err == nil {
165+
err = i.r.Close()
166+
} else {
167+
i.r.Close()
168+
}
168169
}
169170

170-
return nil
171+
return err
171172
}

sql/plan/exchange.go

Lines changed: 17 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -183,10 +183,6 @@ func (it *exchangeRowIter) iterPartitions(ch chan<- sql.Partition) {
183183
}
184184

185185
close(ch)
186-
187-
if err := it.partitions.Close(); err != nil {
188-
it.err <- err
189-
}
190186
}()
191187

192188
for {
@@ -278,13 +274,25 @@ func (it *exchangeRowIter) Next() (sql.Row, error) {
278274
}
279275
}
280276

281-
func (it *exchangeRowIter) Close() error {
282-
if it.quit == nil {
283-
return nil
277+
func (it *exchangeRowIter) Close() (err error) {
278+
if it.quit != nil {
279+
close(it.quit)
280+
it.quit = nil
281+
}
282+
283+
// TODO(kuba): in my opinion we should close err channel here,
284+
// but becasue we use it in another go routine, I'll leave this block commented.
285+
//
286+
// if it.err != nil {
287+
// close(it.err)
288+
// it.err = nil
289+
// }
290+
291+
if it.partitions != nil {
292+
err = it.partitions.Close()
284293
}
285294

286-
close(it.quit)
287-
return nil
295+
return err
288296
}
289297

290298
type exchangePartition struct {

sql/plan/exchange_test.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,7 @@ func TestExchangePanicRecover(t *testing.T) {
9595
it := &partitionPanic{}
9696
ex := newExchangeRowIter(ctx, 1, it, nil)
9797
ex.start()
98+
it.Close()
9899

99100
require.True(t, it.closed)
100101
}

sql/plan/innerjoin.go

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -355,19 +355,22 @@ func (i *innerJoinIter) Next() (sql.Row, error) {
355355
}
356356
}
357357

358-
func (i *innerJoinIter) Close() error {
359-
if err := i.l.Close(); err != nil {
360-
if i.r != nil {
361-
_ = i.r.Close()
358+
func (i *innerJoinIter) Close() (err error) {
359+
i.right = nil
360+
361+
if i.l != nil {
362+
if err = i.l.Close(); err != nil {
363+
if i.r != nil {
364+
_ = i.r.Close()
365+
}
366+
return err
362367
}
363-
return err
368+
364369
}
365370

366371
if i.r != nil {
367-
return i.r.Close()
372+
err = i.r.Close()
368373
}
369374

370-
i.right = nil
371-
372-
return nil
375+
return err
373376
}

sql/plan/process.go

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -183,9 +183,12 @@ func (i *trackedIndexKeyValueIter) done() {
183183
}
184184
}
185185

186-
func (i *trackedIndexKeyValueIter) Close() error {
186+
func (i *trackedIndexKeyValueIter) Close() (err error) {
187187
i.done()
188-
return nil
188+
if i.iter != nil {
189+
err = i.iter.Close()
190+
}
191+
return err
189192
}
190193

191194
func (i *trackedIndexKeyValueIter) Next() ([]interface{}, []byte, error) {

0 commit comments

Comments
 (0)