Merge branch 'master' of github.com:umbel/pilosa

This commit is contained in:
Todd Gruben 2016-06-10 10:21:27 -05:00
commit 620a109046
2 changed files with 26 additions and 4 deletions

View file

@ -12,6 +12,7 @@ import (
"math/rand"
"net/http"
"net/url"
"sort"
"strconv"
"time"
@ -567,6 +568,16 @@ type Bit struct {
// Bits represents a slice of bits.
type Bits []Bit
func (p Bits) Swap(i, j int) { p[i], p[j] = p[j], p[i] }
func (p Bits) Len() int { return len(p) }
func (p Bits) Less(i, j int) bool {
if p[i].BitmapID == p[j].BitmapID {
return p[i].ProfileID < p[j].ProfileID
}
return p[i].BitmapID < p[j].BitmapID
}
// BitmapIDs returns a slice of all the bitmap IDs.
func (a Bits) BitmapIDs() []uint64 {
other := make([]uint64, len(a))
@ -592,5 +603,11 @@ func (a Bits) GroupBySlice() map[uint64][]Bit {
slice := bit.ProfileID / SliceWidth
m[slice] = append(m[slice], bit)
}
for slice, bits := range m {
sort.Sort(Bits(bits))
m[slice] = bits
}
return m
}

View file

@ -2,6 +2,7 @@ package pilosa
import (
"archive/tar"
"bufio"
"bytes"
"crypto/sha1"
"encoding/binary"
@ -848,13 +849,14 @@ func (f *Fragment) Import(bitmapIDs, profileIDs []uint64) error {
bmCounter = bitmap.Count()
lastID = bitmapID
}
// Invalidate block checksum.
delete(f.checksums, int(bitmapID/HashBlockSize))
if bitmap.SetBit(profileID) {
bmCounter += 1
}
// Invalidate block checksum.
delete(f.checksums, int(bitmapID/HashBlockSize))
}
f.cache.Invalidate()
return nil
}(); err != nil {
@ -905,8 +907,11 @@ func (f *Fragment) snapshot() error {
defer file.Close()
// Write storage to snapshot.
if _, err := f.storage.WriteTo(file); err != nil {
bw := bufio.NewWriter(file)
if _, err := f.storage.WriteTo(bw); err != nil {
return fmt.Errorf("snapshot write to: %s", err)
} else if err := bw.Flush(); err != nil {
return fmt.Errorf("flush: %s", err)
}
// Close current storage.