0
0

fix issues identified by errcheck

This commit is contained in:
Marty Schoch 2015-11-24 14:32:33 -05:00
parent bbef1980d8
commit c93de9734e
12 changed files with 129 additions and 38 deletions

View File

@ -62,7 +62,10 @@ func TestAnalysis(t *testing.T) {
t.Fatal(err) t.Fatal(err)
} }
// warmup to load field cache and set maxRead correctly // warmup to load field cache and set maxRead correctly
f.(*Firestorm).warmup(kvreader) err = f.(*Firestorm).warmup(kvreader)
if err != nil {
t.Fatal(err)
}
tests := []struct { tests := []struct {
d *document.Document d *document.Document

View File

@ -94,7 +94,7 @@ func (d *DictUpdater) update() {
// open a writer // open a writer
writer, err := d.f.store.Writer() writer, err := d.f.store.Writer()
if err != nil { if err != nil {
writer.Close() _ = writer.Close()
logger.Printf("dict updater fatal: %v", err) logger.Printf("dict updater fatal: %v", err)
return return
} }
@ -110,7 +110,7 @@ func (d *DictUpdater) update() {
err = writer.ExecuteBatch(wb) err = writer.ExecuteBatch(wb)
if err != nil { if err != nil {
writer.Close() _ = writer.Close()
logger.Printf("dict updater fatal: %v", err) logger.Printf("dict updater fatal: %v", err)
return return
} }
@ -123,18 +123,19 @@ func (d *DictUpdater) update() {
// this is not intended to be used publicly, only for unit tests // this is not intended to be used publicly, only for unit tests
// which depend on consistency we no longer provide // which depend on consistency we no longer provide
func (d *DictUpdater) waitTasksDone(dur time.Duration) error { func (d *DictUpdater) waitTasksDone(dur time.Duration) error {
initial := atomic.LoadUint64(&d.batchesStarted)
timeout := time.After(dur) timeout := time.After(dur)
tick := time.Tick(100 * time.Millisecond) tick := time.Tick(100 * time.Millisecond)
for { for {
select { select {
// Got a timeout! fail with a timeout error // Got a timeout! fail with a timeout error
case <-timeout: case <-timeout:
return fmt.Errorf("timeout") flushed := atomic.LoadUint64(&d.batchesFlushed)
return fmt.Errorf("timeout, %d/%d", initial, flushed)
// Got a tick, we should check on doSomething() // Got a tick, we should check on doSomething()
case <-tick: case <-tick:
started := atomic.LoadUint64(&d.batchesStarted)
flushed := atomic.LoadUint64(&d.batchesFlushed) flushed := atomic.LoadUint64(&d.batchesFlushed)
if started == flushed { if flushed > initial {
return nil return nil
} }
} }

View File

@ -22,8 +22,8 @@ import (
// if your application relies on them, you're doing something wrong // if your application relies on them, you're doing something wrong
// they may change or be removed at any time // they may change or be removed at any time
func (f *Firestorm) dumpPrefix(kvreader store.KVReader, rv chan interface{}, prefix []byte) { func (f *Firestorm) dumpPrefix(kvreader store.KVReader, rv chan interface{}, prefix []byte) error {
visitPrefix(kvreader, prefix, func(key, val []byte) (bool, error) { return visitPrefix(kvreader, prefix, func(key, val []byte) (bool, error) {
row, err := parseFromKeyValue(key, val) row, err := parseFromKeyValue(key, val)
if err != nil { if err != nil {
rv <- err rv <- err
@ -34,11 +34,11 @@ func (f *Firestorm) dumpPrefix(kvreader store.KVReader, rv chan interface{}, pre
}) })
} }
func (f *Firestorm) dumpDoc(kvreader store.KVReader, rv chan interface{}, docID []byte) { func (f *Firestorm) dumpDoc(kvreader store.KVReader, rv chan interface{}, docID []byte) error {
// without a back index we have no choice but to walk the term freq and stored rows // without a back index we have no choice but to walk the term freq and stored rows
// walk the term freqs // walk the term freqs
visitPrefix(kvreader, TermFreqKeyPrefix, func(key, val []byte) (bool, error) { err := visitPrefix(kvreader, TermFreqKeyPrefix, func(key, val []byte) (bool, error) {
tfr, err := NewTermFreqRowKV(key, val) tfr, err := NewTermFreqRowKV(key, val)
if err != nil { if err != nil {
rv <- err rv <- err
@ -50,8 +50,12 @@ func (f *Firestorm) dumpDoc(kvreader store.KVReader, rv chan interface{}, docID
return true, nil return true, nil
}) })
if err != nil {
return err
}
// now walk the stored // now walk the stored
visitPrefix(kvreader, StoredKeyPrefix, func(key, val []byte) (bool, error) { err = visitPrefix(kvreader, StoredKeyPrefix, func(key, val []byte) (bool, error) {
sr, err := NewStoredRowKV(key, val) sr, err := NewStoredRowKV(key, val)
if err != nil { if err != nil {
rv <- err rv <- err
@ -62,6 +66,8 @@ func (f *Firestorm) dumpDoc(kvreader store.KVReader, rv chan interface{}, docID
} }
return true, nil return true, nil
}) })
return err
} }
func parseFromKeyValue(key, value []byte) (index.IndexRow, error) { func parseFromKeyValue(key, value []byte) (index.IndexRow, error) {

View File

@ -105,7 +105,10 @@ func TestDump(t *testing.T) {
t.Errorf("expected %d rows for document, got %d", expectedDocRowCount, docRowCount) t.Errorf("expected %d rows for document, got %d", expectedDocRowCount, docRowCount)
} }
idx.(*Firestorm).dictUpdater.waitTasksDone(dictWaitDuration) err = idx.(*Firestorm).dictUpdater.waitTasksDone(dictWaitDuration)
if err != nil {
t.Fatal(err)
}
// 1 version // 1 version
// fieldsCount field rows // fieldsCount field rows

View File

@ -90,7 +90,10 @@ func (f *Firestorm) Open() (err error) {
if !newIndex { if !newIndex {
// process existing index before opening // process existing index before opening
f.warmup(kvreader) err = f.warmup(kvreader)
if err != nil {
return
}
} }
err = kvreader.Close() err = kvreader.Close()
@ -100,7 +103,10 @@ func (f *Firestorm) Open() (err error) {
if newIndex { if newIndex {
// prepare a new index // prepare a new index
f.bootstrap() err = f.bootstrap()
if err != nil {
return
}
} }
// start the garbage collector // start the garbage collector
@ -384,7 +390,11 @@ func (f *Firestorm) DumpAll() chan interface{} {
} }
}() }()
f.dumpPrefix(kvreader, rv, nil) err = f.dumpPrefix(kvreader, rv, nil)
if err != nil {
rv <- err
return
}
}() }()
return rv return rv
} }
@ -407,7 +417,11 @@ func (f *Firestorm) DumpDoc(docID string) chan interface{} {
} }
}() }()
f.dumpDoc(kvreader, rv, []byte(docID)) err = f.dumpDoc(kvreader, rv, []byte(docID))
if err != nil {
rv <- err
return
}
}() }()
return rv return rv
} }
@ -430,7 +444,11 @@ func (f *Firestorm) DumpFields() chan interface{} {
} }
}() }()
f.dumpPrefix(kvreader, rv, FieldKeyPrefix) err = f.dumpPrefix(kvreader, rv, FieldKeyPrefix)
if err != nil {
rv <- err
return
}
}() }()
return rv return rv
} }

View File

@ -115,7 +115,10 @@ func TestIndexInsert(t *testing.T) {
} }
expectedCount++ expectedCount++
idx.(*Firestorm).lookuper.waitTasksDone(lookupWaitDuration) err = idx.(*Firestorm).lookuper.waitTasksDone(lookupWaitDuration)
if err != nil {
t.Fatal(err)
}
docCount, err = idx.DocCount() docCount, err = idx.DocCount()
if err != nil { if err != nil {
@ -168,7 +171,10 @@ func TestIndexInsertThenDelete(t *testing.T) {
} }
expectedCount++ expectedCount++
idx.(*Firestorm).lookuper.waitTasksDone(lookupWaitDuration) err = idx.(*Firestorm).lookuper.waitTasksDone(lookupWaitDuration)
if err != nil {
t.Fatal(err)
}
doc2 := document.NewDocument("2") doc2 := document.NewDocument("2")
doc2.AddField(document.NewTextField("name", []uint64{}, []byte("test"))) doc2.AddField(document.NewTextField("name", []uint64{}, []byte("test")))
@ -178,7 +184,10 @@ func TestIndexInsertThenDelete(t *testing.T) {
} }
expectedCount++ expectedCount++
idx.(*Firestorm).lookuper.waitTasksDone(lookupWaitDuration) err = idx.(*Firestorm).lookuper.waitTasksDone(lookupWaitDuration)
if err != nil {
t.Fatal(err)
}
docCount, err = idx.DocCount() docCount, err = idx.DocCount()
if err != nil { if err != nil {
@ -194,7 +203,10 @@ func TestIndexInsertThenDelete(t *testing.T) {
} }
expectedCount-- expectedCount--
idx.(*Firestorm).lookuper.waitTasksDone(lookupWaitDuration) err = idx.(*Firestorm).lookuper.waitTasksDone(lookupWaitDuration)
if err != nil {
t.Fatal(err)
}
docCount, err = idx.DocCount() docCount, err = idx.DocCount()
if err != nil { if err != nil {
@ -210,7 +222,10 @@ func TestIndexInsertThenDelete(t *testing.T) {
} }
expectedCount-- expectedCount--
idx.(*Firestorm).lookuper.waitTasksDone(lookupWaitDuration) err = idx.(*Firestorm).lookuper.waitTasksDone(lookupWaitDuration)
if err != nil {
t.Fatal(err)
}
docCount, err = idx.DocCount() docCount, err = idx.DocCount()
if err != nil { if err != nil {
@ -270,7 +285,10 @@ func TestIndexInsertThenUpdate(t *testing.T) {
t.Errorf("Error deleting entry from index: %v", err) t.Errorf("Error deleting entry from index: %v", err)
} }
idx.(*Firestorm).lookuper.waitTasksDone(lookupWaitDuration) err = idx.(*Firestorm).lookuper.waitTasksDone(lookupWaitDuration)
if err != nil {
t.Fatal(err)
}
docCount, err := idx.DocCount() docCount, err := idx.DocCount()
if err != nil { if err != nil {
@ -347,7 +365,10 @@ func TestIndexInsertMultiple(t *testing.T) {
} }
expectedCount++ expectedCount++
idx.(*Firestorm).lookuper.waitTasksDone(lookupWaitDuration) err = idx.(*Firestorm).lookuper.waitTasksDone(lookupWaitDuration)
if err != nil {
t.Fatal(err)
}
docCount, err := idx.DocCount() docCount, err := idx.DocCount()
if err != nil { if err != nil {
@ -399,7 +420,10 @@ func TestIndexInsertWithStore(t *testing.T) {
} }
expectedCount++ expectedCount++
idx.(*Firestorm).lookuper.waitTasksDone(lookupWaitDuration) err = idx.(*Firestorm).lookuper.waitTasksDone(lookupWaitDuration)
if err != nil {
t.Fatal(err)
}
docCount, err = idx.DocCount() docCount, err = idx.DocCount()
if err != nil { if err != nil {
@ -605,7 +629,10 @@ func TestIndexBatch(t *testing.T) {
} }
}() }()
idx.(*Firestorm).lookuper.waitTasksDone(lookupWaitDuration) err = idx.(*Firestorm).lookuper.waitTasksDone(lookupWaitDuration)
if err != nil {
t.Fatal(err)
}
docCount := indexReader.DocCount() docCount := indexReader.DocCount()
if docCount != expectedCount { if docCount != expectedCount {
@ -683,7 +710,10 @@ func TestIndexInsertUpdateDeleteWithMultipleTypesStored(t *testing.T) {
} }
expectedCount++ expectedCount++
idx.(*Firestorm).lookuper.waitTasksDone(lookupWaitDuration) err = idx.(*Firestorm).lookuper.waitTasksDone(lookupWaitDuration)
if err != nil {
t.Fatal(err)
}
docCount, err = idx.DocCount() docCount, err = idx.DocCount()
if err != nil { if err != nil {
@ -801,7 +831,10 @@ func TestIndexInsertUpdateDeleteWithMultipleTypesStored(t *testing.T) {
err = idx.Delete("1") err = idx.Delete("1")
expectedCount-- expectedCount--
idx.(*Firestorm).lookuper.waitTasksDone(lookupWaitDuration) err = idx.(*Firestorm).lookuper.waitTasksDone(lookupWaitDuration)
if err != nil {
t.Fatal(err)
}
// expected doc count shouldn't have changed // expected doc count shouldn't have changed
docCount, err = idx.DocCount() docCount, err = idx.DocCount()

View File

@ -122,7 +122,11 @@ func (gc *GarbageCollector) cleanup() {
logger.Printf("garbage collector fatal: %v", err) logger.Printf("garbage collector fatal: %v", err)
return return
} }
defer reader.Close() defer func() {
if cerr := reader.Close(); err == nil && cerr != nil {
err = cerr
}
}()
// walk all the term freq rows (where field > 0) // walk all the term freq rows (where field > 0)
termFreqStart := TermFreqIteratorStart(0, []byte{ByteSeparator}) termFreqStart := TermFreqIteratorStart(0, []byte{ByteSeparator})
@ -176,7 +180,7 @@ func (gc *GarbageCollector) cleanup() {
// open a writer // open a writer
writer, err := gc.f.store.Writer() writer, err := gc.f.store.Writer()
if err != nil { if err != nil {
writer.Close() _ = writer.Close()
logger.Printf("garbage collector fatal: %v", err) logger.Printf("garbage collector fatal: %v", err)
return return
} }
@ -190,7 +194,7 @@ func (gc *GarbageCollector) cleanup() {
err = writer.ExecuteBatch(wb) err = writer.ExecuteBatch(wb)
if err != nil { if err != nil {
writer.Close() _ = writer.Close()
logger.Printf("garbage collector fatal: %v", err) logger.Printf("garbage collector fatal: %v", err)
return return
} }
@ -212,7 +216,11 @@ func (gc *GarbageCollector) cleanup() {
logger.Printf("garbage collector fatal: %v", err) logger.Printf("garbage collector fatal: %v", err)
return return
} }
writer.Close() err = writer.Close()
if err != nil {
logger.Printf("garbage collector fatal: %v", err)
return
}
} }
// updating dictionary in one batch // updating dictionary in one batch

View File

@ -81,7 +81,11 @@ func (l *Lookuper) lookup(task *lookupTask) {
logger.Printf("lookuper fatal: %v", err) logger.Printf("lookuper fatal: %v", err)
return return
} }
defer reader.Close() defer func() {
if cerr := reader.Close(); err == nil && cerr != nil {
err = cerr
}
}()
prefix := TermFreqPrefixFieldTermDocId(0, nil, task.docID) prefix := TermFreqPrefixFieldTermDocId(0, nil, task.docID)
logger.Printf("lookuper prefix - % x", prefix) logger.Printf("lookuper prefix - % x", prefix)

View File

@ -150,7 +150,7 @@ func (r *firestormReader) DocumentFieldTerms(id string) (index.FieldTerms, error
rv := make(index.FieldTerms, 0) rv := make(index.FieldTerms, 0)
// walk the term freqs // walk the term freqs
visitPrefix(r.r, TermFreqKeyPrefix, func(key, val []byte) (bool, error) { err = visitPrefix(r.r, TermFreqKeyPrefix, func(key, val []byte) (bool, error) {
tfr, err := NewTermFreqRowKV(key, val) tfr, err := NewTermFreqRowKV(key, val)
if err != nil { if err != nil {
return false, err return false, err
@ -166,6 +166,9 @@ func (r *firestormReader) DocumentFieldTerms(id string) (index.FieldTerms, error
} }
return true, nil return true, nil
}) })
if err != nil {
return nil, err
}
return rv, nil return rv, nil
} }

View File

@ -67,7 +67,10 @@ func TestDictionaryReader(t *testing.T) {
t.Fatal(err) t.Fatal(err)
} }
f.(*Firestorm).warmup(kvreader) err = f.(*Firestorm).warmup(kvreader)
if err != nil {
t.Fatal(err)
}
err = kvreader.Close() err = kvreader.Close()
if err != nil { if err != nil {

View File

@ -83,7 +83,10 @@ func TestDocIDReaderSomeGarbage(t *testing.T) {
} }
// warmup to load field cache and set maxRead correctly // warmup to load field cache and set maxRead correctly
f.(*Firestorm).warmup(kvreader) err = f.(*Firestorm).warmup(kvreader)
if err != nil {
t.Fatal(err)
}
err = kvreader.Close() err = kvreader.Close()
if err != nil { if err != nil {

View File

@ -65,7 +65,10 @@ func TestTermReaderNoGarbage(t *testing.T) {
} }
// warmup to load field cache and set maxRead correctly // warmup to load field cache and set maxRead correctly
f.(*Firestorm).warmup(kvreader) err = f.(*Firestorm).warmup(kvreader)
if err != nil {
t.Fatal(err)
}
err = kvreader.Close() err = kvreader.Close()
if err != nil { if err != nil {
@ -173,7 +176,10 @@ func TestTermReaderSomeGarbage(t *testing.T) {
} }
// warmup to load field cache and set maxRead correctly // warmup to load field cache and set maxRead correctly
f.(*Firestorm).warmup(kvreader) err = f.(*Firestorm).warmup(kvreader)
if err != nil {
t.Fatal(err)
}
err = kvreader.Close() err = kvreader.Close()
if err != nil { if err != nil {