mirror of
https://github.com/featurebasedb/featurebase.git
synced 2026-08-28 02:44:59 +00:00
address lint concerns
Addressing various lint. incrementOpN no longer returns errors, because it no longer waits for the snapshot, so checking those errors is unnecessary. Several fields in a common embedded structure were "unused" according to a naive checker. Other tiny style things, and one actual unchecked error. Yay linters!
This commit is contained in:
parent
5e3d01febe
commit
17eb13702e
3 changed files with 30 additions and 18 deletions
29
fragment.go
29
fragment.go
|
|
@ -219,7 +219,7 @@ func (f *fragment) enqueueSnapshot() {
|
|||
// wait forever, but notice that we're waiting
|
||||
f.snapshotQueue <- f
|
||||
f.snapshotDelays++
|
||||
f.snapshotDelayTime += time.Now().Sub(before)
|
||||
f.snapshotDelayTime += time.Since(before)
|
||||
if f.snapshotDelays >= 10 {
|
||||
f.Logger.Printf("snapshotting %s: last ten delays took %v", f.path, f.snapshotDelayTime)
|
||||
f.snapshotDelays = 0
|
||||
|
|
@ -231,7 +231,10 @@ func (f *fragment) enqueueSnapshot() {
|
|||
} else {
|
||||
// in testing, for instance, there may be no holder, thus no one
|
||||
// to handle these snapshots.
|
||||
f.snapshot()
|
||||
err := f.snapshot()
|
||||
if err != nil {
|
||||
f.Logger.Printf("snapshot failed: %v", err)
|
||||
}
|
||||
f.snapshotting = false
|
||||
f.snapshotCond.Broadcast()
|
||||
}
|
||||
|
|
@ -517,9 +520,9 @@ func (f *fragment) awaitSnapshot() {
|
|||
}
|
||||
}
|
||||
|
||||
// protectedAwaitSnapshot assumes you already hold the lock, and waits for
|
||||
// unprotectedAwaitSnapshot assumes you already hold the lock, and waits for
|
||||
// the snapshot fairy to come along.
|
||||
func (f *fragment) protectedAwaitSnapshot() {
|
||||
func (f *fragment) unprotectedAwaitSnapshot() {
|
||||
for f.snapshotting {
|
||||
f.snapshotCond.Wait()
|
||||
}
|
||||
|
|
@ -698,9 +701,7 @@ func (f *fragment) unprotectedSetBit(rowID, columnID uint64) (changed bool, err
|
|||
delete(f.checksums, int(rowID/HashBlockSize))
|
||||
|
||||
// Increment number of operations until snapshot is required.
|
||||
if err := f.incrementOpN(1); err != nil {
|
||||
return false, errors.Wrap(err, "incrementing")
|
||||
}
|
||||
f.incrementOpN(1)
|
||||
|
||||
// If we're using a cache, update it. Otherwise skip the
|
||||
// possibly-expensive count operation.
|
||||
|
|
@ -762,9 +763,7 @@ func (f *fragment) unprotectedClearBit(rowID, columnID uint64) (changed bool, er
|
|||
delete(f.checksums, int(rowID/HashBlockSize))
|
||||
|
||||
// Increment number of operations until snapshot is required.
|
||||
if err := f.incrementOpN(1); err != nil {
|
||||
return false, errors.Wrap(err, "incrementing")
|
||||
}
|
||||
f.incrementOpN(1)
|
||||
|
||||
// If we're using a cache, update it. Otherwise skip the
|
||||
// possibly-expensive count operation.
|
||||
|
|
@ -2230,11 +2229,12 @@ func (f *fragment) importValue(columnIDs []uint64, values []int64, bitDepth uint
|
|||
}
|
||||
// We don't actually care, except we want our stats to be accurate.
|
||||
f.incrementOpN(totalChanges)
|
||||
|
||||
// in theory, this should probably have happened anyway, but if enough
|
||||
// of the bits matched existing bits, we'll be under our opN estimate, and
|
||||
// we want to ensure that the snapshot happens.
|
||||
f.enqueueSnapshot()
|
||||
f.protectedAwaitSnapshot()
|
||||
f.unprotectedAwaitSnapshot()
|
||||
|
||||
return nil
|
||||
}
|
||||
|
|
@ -2278,21 +2278,20 @@ func (f *fragment) importRoaring(ctx context.Context, data []byte, clear bool) e
|
|||
span, _ = tracing.StartSpanFromContext(ctx, "importRoaring.incrementOpN")
|
||||
f.incrementOpN(changed)
|
||||
span.Finish()
|
||||
return err
|
||||
return nil
|
||||
}
|
||||
|
||||
// incrementOpN increase the operation count by one.
|
||||
// If the count exceeds the maximum allowed then a snapshot is performed.
|
||||
func (f *fragment) incrementOpN(changed int) error {
|
||||
func (f *fragment) incrementOpN(changed int) {
|
||||
if changed <= 0 {
|
||||
return nil
|
||||
return
|
||||
}
|
||||
f.opN += changed
|
||||
f.ops++
|
||||
if f.opN > f.MaxOpN {
|
||||
f.enqueueSnapshot()
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// Snapshot writes the storage bitmap to disk and reopens it. This may
|
||||
|
|
|
|||
|
|
@ -2499,10 +2499,13 @@ func (f *fragment) sanityCheck(t testing.TB) {
|
|||
}
|
||||
defer file.Close()
|
||||
data, err := ioutil.ReadAll(file)
|
||||
err = newBM.UnmarshalBinary(data)
|
||||
if err != nil {
|
||||
t.Fatalf("sanityCheck couldn't read fragment %s: %v", f.path, err)
|
||||
}
|
||||
err = newBM.UnmarshalBinary(data)
|
||||
if err != nil {
|
||||
t.Fatalf("sanityCheck couldn't unmarshal fragment %s: %v", f.path, err)
|
||||
}
|
||||
if equal, reason := newBM.BitwiseEqual(f.storage); !equal {
|
||||
t.Fatalf("fragment %s: unmarshalled bitmap different: %v", f.path, reason)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1145,6 +1145,17 @@ type baseRoaringIterator struct {
|
|||
lastErr error
|
||||
}
|
||||
|
||||
// okay, then
|
||||
func (b *baseRoaringIterator) SilenceLint() {
|
||||
// these are actually used in pilosaRoaringIterator or officialRoaringIterator
|
||||
// but structcheck doesn't know that
|
||||
_ = b.data
|
||||
_ = b.keys
|
||||
_ = b.offsets
|
||||
_ = b.headers
|
||||
_ = b.currentIdx
|
||||
}
|
||||
|
||||
type pilosaRoaringIterator struct {
|
||||
baseRoaringIterator
|
||||
}
|
||||
|
|
@ -1416,8 +1427,7 @@ func (b *Bitmap) RemapRoaringStorage(data []byte) (mappedAny bool, returnErr err
|
|||
if oldC.frozen() {
|
||||
// we don't use Clone, because that would copy the
|
||||
// storage, and we don't need that.
|
||||
var halfCopy Container
|
||||
halfCopy = *oldC
|
||||
halfCopy := *oldC
|
||||
halfCopy.flags &^= flagFrozen
|
||||
newC = &halfCopy
|
||||
} else {
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue