mirror of
https://github.com/featurebasedb/featurebase.git
synced 2026-10-07 19:37:51 +00:00
Merge pull request #9 from benbjohnson/flatten
Move index package to root package
This commit is contained in:
commit
6b2b2672d7
36 changed files with 169 additions and 301 deletions
|
|
@ -1,4 +1,4 @@
|
|||
package index
|
||||
package pilosa
|
||||
|
||||
import (
|
||||
"math/rand"
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
package index
|
||||
package pilosa
|
||||
|
||||
// #cgo CFLAGS:-mpopcnt
|
||||
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
package index
|
||||
package pilosa
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
package index
|
||||
package pilosa
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
|
|
@ -1,18 +1,18 @@
|
|||
package index_test
|
||||
package pilosa_test
|
||||
|
||||
import (
|
||||
"math/rand"
|
||||
"testing"
|
||||
|
||||
"github.com/umbel/pilosa/index"
|
||||
"github.com/umbel/pilosa/index/storage/mem"
|
||||
"github.com/umbel/pilosa"
|
||||
"github.com/umbel/pilosa/storage/mem"
|
||||
"github.com/umbel/pilosa/util"
|
||||
)
|
||||
|
||||
var (
|
||||
size int
|
||||
membrand *index.Brand
|
||||
cassbrand *index.Brand
|
||||
membrand *pilosa.Brand
|
||||
cassbrand *pilosa.Brand
|
||||
)
|
||||
|
||||
func init() {
|
||||
|
|
@ -21,7 +21,7 @@ func init() {
|
|||
util.SetupStatsd()
|
||||
// SetupCassandra()
|
||||
|
||||
membrand = index.NewBrand("db", "frame", 0, mem.NewStorage(), size, size, 0)
|
||||
membrand = pilosa.NewBrand("db", "frame", 0, mem.NewStorage(), size, size, 0)
|
||||
for i := uint64(0); i < uint64(size); i++ {
|
||||
membrand.SetBit(i, 0, 1)
|
||||
}
|
||||
|
|
@ -31,7 +31,7 @@ func init() {
|
|||
// }
|
||||
}
|
||||
|
||||
func benchmarkBrand(b *testing.B, size int, fill int, brand *index.Brand) {
|
||||
func benchmarkBrand(b *testing.B, size int, fill int, brand *pilosa.Brand) {
|
||||
println(b.N)
|
||||
for i := 0; i < b.N; i++ {
|
||||
bid := rand.Int() % size
|
||||
|
|
@ -3,9 +3,9 @@ package main
|
|||
import (
|
||||
"time"
|
||||
|
||||
"github.com/umbel/pilosa/index"
|
||||
_ "github.com/umbel/pilosa/index/storage"
|
||||
"github.com/umbel/pilosa/index/storage/cassandra"
|
||||
"github.com/umbel/pilosa"
|
||||
_ "github.com/umbel/pilosa/storage"
|
||||
"github.com/umbel/pilosa/storage/cassandra"
|
||||
"github.com/umbel/pilosa/transport"
|
||||
"github.com/umbel/pilosa/util"
|
||||
)
|
||||
|
|
@ -92,7 +92,7 @@ func NewConfig() Config {
|
|||
c.TCP.Port = transport.DefaultTCPPort
|
||||
c.HTTP.Port = transport.DefaultHTTPPort
|
||||
c.Log.Path = DefaultLogPath
|
||||
c.Storage.Backend = index.DefaultBackend
|
||||
c.Storage.Backend = pilosa.DefaultBackend
|
||||
c.Storage.Hosts = cassandra.DefaultHosts
|
||||
c.Storage.Keyspace = cassandra.DefaultKeyspace
|
||||
c.Storage.FragmentBase = DefaultFragmentBase
|
||||
|
|
|
|||
|
|
@ -13,12 +13,12 @@ import (
|
|||
"github.com/coreos/go-etcd/etcd"
|
||||
"github.com/kr/s3/s3util"
|
||||
"github.com/mitchellh/panicwrap"
|
||||
"github.com/umbel/pilosa"
|
||||
"github.com/umbel/pilosa/core"
|
||||
"github.com/umbel/pilosa/db"
|
||||
"github.com/umbel/pilosa/dispatch"
|
||||
"github.com/umbel/pilosa/executor"
|
||||
"github.com/umbel/pilosa/hold"
|
||||
"github.com/umbel/pilosa/index"
|
||||
"github.com/umbel/pilosa/transport"
|
||||
"github.com/umbel/pilosa/util"
|
||||
)
|
||||
|
|
@ -96,9 +96,9 @@ func (m *Main) Run(args ...string) error {
|
|||
// Pass configuration to packages.
|
||||
// NOTE: This is temporary. These config options should be encapsulated in the types.
|
||||
db.SupportedFrames = config.Storage.SupportedFrames
|
||||
index.FragmentBase = config.Storage.FragmentBase
|
||||
index.Backend = config.Storage.Backend
|
||||
index.LevelDBPath = config.LevelDB.Path
|
||||
pilosa.FragmentBase = config.Storage.FragmentBase
|
||||
pilosa.Backend = config.Storage.Backend
|
||||
pilosa.LevelDBPath = config.LevelDB.Path
|
||||
|
||||
// Initialize AWS storage.
|
||||
s3util.DefaultConfig.AccessKey = config.AWS.AccessKeyID
|
||||
|
|
@ -119,7 +119,7 @@ func (m *Main) Run(args ...string) error {
|
|||
cluster := db.NewCluster()
|
||||
|
||||
// Create index.
|
||||
idx := index.NewFragmentContainer()
|
||||
idx := pilosa.NewFragmentContainer()
|
||||
|
||||
// Initialize the holder.
|
||||
hold := hold.NewHolder()
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
package index
|
||||
package pilosa
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
16
core/http.go
16
core/http.go
|
|
@ -20,8 +20,8 @@ import (
|
|||
log "github.com/cihub/seelog"
|
||||
"github.com/davecgh/go-spew/spew"
|
||||
"github.com/gorilla/websocket"
|
||||
"github.com/umbel/pilosa"
|
||||
"github.com/umbel/pilosa/db"
|
||||
"github.com/umbel/pilosa/index"
|
||||
"github.com/umbel/pilosa/util"
|
||||
)
|
||||
|
||||
|
|
@ -401,7 +401,7 @@ func (self *WebService) HandleQuery(w http.ResponseWriter, r *http.Request) {
|
|||
return
|
||||
}
|
||||
switch r := results.(type) { //a hack to handle empty sets
|
||||
case []index.Pair:
|
||||
case []pilosa.Pair:
|
||||
if len(r) == 0 {
|
||||
results = []int{}
|
||||
|
||||
|
|
@ -410,7 +410,7 @@ func (self *WebService) HandleQuery(w http.ResponseWriter, r *http.Request) {
|
|||
if bits {
|
||||
reader, _ := gzip.NewReader(bytes.NewReader(r))
|
||||
b, _ := ioutil.ReadAll(reader)
|
||||
result := index.NewBitmap()
|
||||
result := pilosa.NewBitmap()
|
||||
result.FromBytes(b)
|
||||
results = result.Bits()
|
||||
}
|
||||
|
|
@ -460,15 +460,15 @@ func bitmaps(frame string, obj JsonObject) chan uint64 {
|
|||
if !present || timestamp == "2014-01-01 00:00:00" { //skip the default timestamp
|
||||
c <- base_id
|
||||
} else {
|
||||
quantum := index.YMDH
|
||||
quantum := pilosa.YMDH
|
||||
if val, ok := obj["time_granularity"]; ok {
|
||||
switch val {
|
||||
case "Y":
|
||||
quantum = index.Y
|
||||
quantum = pilosa.Y
|
||||
case "M":
|
||||
quantum = index.YM
|
||||
quantum = pilosa.YM
|
||||
case "D":
|
||||
quantum = index.YMD
|
||||
quantum = pilosa.YMD
|
||||
}
|
||||
}
|
||||
shortForm := shortFormS
|
||||
|
|
@ -477,7 +477,7 @@ func bitmaps(frame string, obj JsonObject) chan uint64 {
|
|||
}
|
||||
atime, _ := time.Parse(shortForm, timestamp)
|
||||
|
||||
for i, id := range index.GetTimeIds(base_id, atime, quantum) {
|
||||
for i, id := range pilosa.GetTimeIds(base_id, atime, quantum) {
|
||||
c <- id
|
||||
if i > 10 {
|
||||
log.Warn("TO MANY TIMEIDS", base_id, atime, quantum)
|
||||
|
|
|
|||
16
core/load.go
16
core/load.go
|
|
@ -10,17 +10,17 @@ import (
|
|||
"errors"
|
||||
|
||||
log "github.com/cihub/seelog"
|
||||
"github.com/umbel/pilosa/index"
|
||||
"github.com/umbel/pilosa"
|
||||
)
|
||||
|
||||
func copy_raw(src [32]uint64) index.Blocks {
|
||||
o := make(index.Blocks, 32)
|
||||
func copy_raw(src [32]uint64) pilosa.Blocks {
|
||||
o := make(pilosa.Blocks, 32)
|
||||
for k, v := range src {
|
||||
o[k] = v
|
||||
}
|
||||
return o
|
||||
}
|
||||
func sendBitmap(batcher *Batcher, bitmap *index.Bitmap, db string, frame string, bitmap_id, filter uint64, slice int, finish chan error) {
|
||||
func sendBitmap(batcher *Batcher, bitmap *pilosa.Bitmap, db string, frame string, bitmap_id, filter uint64, slice int, finish chan error) {
|
||||
if slice < 0 {
|
||||
log.Warn("Bad split", db, frame, slice, bitmap_id)
|
||||
finish <- errors.New("BadSplit")
|
||||
|
|
@ -57,8 +57,8 @@ func FromApiString(batcher *Batcher, db string, frame string, api_string string,
|
|||
return "Bad"
|
||||
}
|
||||
first := true
|
||||
bitmap := index.NewBitmap()
|
||||
last_slice := index.CounterMask
|
||||
bitmap := pilosa.NewBitmap()
|
||||
last_slice := pilosa.CounterMask
|
||||
sent_count := 0
|
||||
finish := make(chan error)
|
||||
|
||||
|
|
@ -76,12 +76,12 @@ func FromApiString(batcher *Batcher, db string, frame string, api_string string,
|
|||
//make async later
|
||||
sent_count += 1
|
||||
go sendBitmap(batcher, bitmap, db, frame, bitmap_id, filter, int(last_slice), finish)
|
||||
bitmap = index.NewBitmap()
|
||||
bitmap = pilosa.NewBitmap()
|
||||
}
|
||||
last_slice = slice
|
||||
}
|
||||
o := copy_raw(raw.Block)
|
||||
chunk := &index.Chunk{Key: raw.Key, Value: o}
|
||||
chunk := &pilosa.Chunk{Key: raw.Key, Value: o}
|
||||
bitmap.AddChunk(chunk)
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -3,10 +3,10 @@ package dispatch
|
|||
import (
|
||||
log "github.com/cihub/seelog"
|
||||
"github.com/davecgh/go-spew/spew"
|
||||
"github.com/umbel/pilosa"
|
||||
"github.com/umbel/pilosa/core"
|
||||
"github.com/umbel/pilosa/db"
|
||||
"github.com/umbel/pilosa/executor"
|
||||
"github.com/umbel/pilosa/index"
|
||||
"github.com/umbel/pilosa/query"
|
||||
"github.com/umbel/pilosa/util"
|
||||
)
|
||||
|
|
@ -24,7 +24,7 @@ type Dispatch struct {
|
|||
ClearBit(fragID util.SUUID, bitmapID uint64, pos uint64) (bool, error)
|
||||
LoadBitmap(fragID util.SUUID, bitmapID uint64, compressedBitmap string, filter uint64)
|
||||
SetBit(fragID util.SUUID, bitmapID uint64, pos uint64, category uint64) (bool, error)
|
||||
TopFillBatch(args []index.FillArgs) ([]index.Pair, error)
|
||||
TopFillBatch(args []pilosa.FillArgs) ([]pilosa.Pair, error)
|
||||
}
|
||||
|
||||
Transport interface {
|
||||
|
|
|
|||
|
|
@ -7,9 +7,9 @@ import (
|
|||
|
||||
log "github.com/cihub/seelog"
|
||||
"github.com/davecgh/go-spew/spew"
|
||||
"github.com/umbel/pilosa"
|
||||
"github.com/umbel/pilosa/core"
|
||||
"github.com/umbel/pilosa/db"
|
||||
"github.com/umbel/pilosa/index"
|
||||
"github.com/umbel/pilosa/query"
|
||||
"github.com/umbel/pilosa/util"
|
||||
)
|
||||
|
|
@ -29,17 +29,17 @@ type Executor struct {
|
|||
|
||||
Index interface {
|
||||
ClearBit(frag_id util.SUUID, bitmap_id uint64, pos uint64) (bool, error)
|
||||
Count(frag_id util.SUUID, bitmap index.BitmapHandle) (uint64, error)
|
||||
Difference(frag_id util.SUUID, bh []index.BitmapHandle) (index.BitmapHandle, error)
|
||||
FromBytes(frag_id util.SUUID, bytes []byte) (index.BitmapHandle, error)
|
||||
Get(frag_id util.SUUID, bitmap_id uint64) (index.BitmapHandle, error)
|
||||
GetBytes(frag_id util.SUUID, bh index.BitmapHandle) ([]byte, error)
|
||||
Intersect(frag_id util.SUUID, bh []index.BitmapHandle) (index.BitmapHandle, error)
|
||||
Range(frag_id util.SUUID, bitmap_id uint64, start, end time.Time) (index.BitmapHandle, error)
|
||||
Count(frag_id util.SUUID, bitmap pilosa.BitmapHandle) (uint64, error)
|
||||
Difference(frag_id util.SUUID, bh []pilosa.BitmapHandle) (pilosa.BitmapHandle, error)
|
||||
FromBytes(frag_id util.SUUID, bytes []byte) (pilosa.BitmapHandle, error)
|
||||
Get(frag_id util.SUUID, bitmap_id uint64) (pilosa.BitmapHandle, error)
|
||||
GetBytes(frag_id util.SUUID, bh pilosa.BitmapHandle) ([]byte, error)
|
||||
Intersect(frag_id util.SUUID, bh []pilosa.BitmapHandle) (pilosa.BitmapHandle, error)
|
||||
Range(frag_id util.SUUID, bitmap_id uint64, start, end time.Time) (pilosa.BitmapHandle, error)
|
||||
SetBit(frag_id util.SUUID, bitmap_id uint64, pos uint64, category uint64) (bool, error)
|
||||
TopN(frag_id util.SUUID, bh index.BitmapHandle, n int, categories []uint64) ([]index.Pair, error)
|
||||
TopNAll(frag_id util.SUUID, n int, categories []uint64) ([]index.Pair, error)
|
||||
Union(frag_id util.SUUID, bh []index.BitmapHandle) (index.BitmapHandle, error)
|
||||
TopN(frag_id util.SUUID, bh pilosa.BitmapHandle, n int, categories []uint64) ([]pilosa.Pair, error)
|
||||
TopNAll(frag_id util.SUUID, n int, categories []uint64) ([]pilosa.Pair, error)
|
||||
Union(frag_id util.SUUID, bh []pilosa.BitmapHandle) (pilosa.BitmapHandle, error)
|
||||
}
|
||||
|
||||
TopologyMapper interface {
|
||||
|
|
@ -102,9 +102,9 @@ func (self *Executor) CountQueryStepHandler(msg *db.Message) {
|
|||
qs := msg.Data.(query.CountQueryStep)
|
||||
input := qs.Input
|
||||
value, _ := self.Hold.Get(input, util.TimeOut)
|
||||
var bh index.BitmapHandle
|
||||
var bh pilosa.BitmapHandle
|
||||
switch val := value.(type) {
|
||||
case index.BitmapHandle:
|
||||
case pilosa.BitmapHandle:
|
||||
bh = val
|
||||
case []byte:
|
||||
bh, _ = self.Index.FromBytes(qs.Location.FragmentId, val)
|
||||
|
|
@ -124,7 +124,7 @@ func (self *Executor) CountQueryStepHandler(msg *db.Message) {
|
|||
|
||||
func (self *Executor) TopNQueryStepHandler(msg *db.Message) {
|
||||
qs := msg.Data.(query.TopNQueryStep)
|
||||
var bh index.BitmapHandle
|
||||
var bh pilosa.BitmapHandle
|
||||
var topnPackage TopNPackage
|
||||
|
||||
// if we have an input, hold for it. if we don't, we assume an all() query
|
||||
|
|
@ -137,9 +137,9 @@ func (self *Executor) TopNQueryStepHandler(msg *db.Message) {
|
|||
} else {
|
||||
input := qs.Input
|
||||
value, _ := self.Hold.Get(input, 10)
|
||||
//var bh index.BitmapHandle
|
||||
//var bh pilosa.BitmapHandle
|
||||
switch val := value.(type) {
|
||||
case index.BitmapHandle:
|
||||
case pilosa.BitmapHandle:
|
||||
bh = val
|
||||
case []byte:
|
||||
bh, _ = self.Index.FromBytes(qs.Location.FragmentId, val)
|
||||
|
|
@ -165,12 +165,12 @@ func (self *Executor) UnionQueryStepHandler(msg *db.Message) {
|
|||
//spew.Dump("UNION QUERYSTEP")
|
||||
|
||||
qs := msg.Data.(query.UnionQueryStep)
|
||||
var handles []index.BitmapHandle
|
||||
var handles []pilosa.BitmapHandle
|
||||
// create a list of bitmap handles
|
||||
for _, input := range qs.Inputs {
|
||||
value, _ := self.Hold.Get(input, util.TimeOut)
|
||||
switch val := value.(type) {
|
||||
case index.BitmapHandle:
|
||||
case pilosa.BitmapHandle:
|
||||
handles = append(handles, val)
|
||||
case []byte:
|
||||
bh, _ := self.Index.FromBytes(qs.Location.FragmentId, val)
|
||||
|
|
@ -205,12 +205,12 @@ func (self *Executor) IntersectQueryStepHandler(msg *db.Message) {
|
|||
log.Trace("IntersectQueryStepHandler")
|
||||
//spew.Dump("INTERSECT QUERYSTEP")
|
||||
qs := msg.Data.(query.IntersectQueryStep)
|
||||
var handles []index.BitmapHandle
|
||||
var handles []pilosa.BitmapHandle
|
||||
// create a list of bitmap handles
|
||||
for _, input := range qs.Inputs {
|
||||
value, _ := self.Hold.Get(input, util.TimeOut)
|
||||
switch val := value.(type) {
|
||||
case index.BitmapHandle:
|
||||
case pilosa.BitmapHandle:
|
||||
handles = append(handles, val)
|
||||
case []byte:
|
||||
bh, _ := self.Index.FromBytes(qs.Location.FragmentId, val)
|
||||
|
|
@ -245,12 +245,12 @@ func (self *Executor) DifferenceQueryStepHandler(msg *db.Message) {
|
|||
log.Trace("DifferenceQueryStepHandler")
|
||||
//spew.Dump("DIFFERENCE QUERYSTEP")
|
||||
qs := msg.Data.(query.DifferenceQueryStep)
|
||||
var handles []index.BitmapHandle
|
||||
var handles []pilosa.BitmapHandle
|
||||
// create a list of bitmap handles
|
||||
for _, input := range qs.Inputs {
|
||||
value, _ := self.Hold.Get(input, util.TimeOut)
|
||||
switch val := value.(type) {
|
||||
case index.BitmapHandle:
|
||||
case pilosa.BitmapHandle:
|
||||
handles = append(handles, val)
|
||||
case []byte:
|
||||
bh, _ := self.Index.FromBytes(qs.Location.FragmentId, val)
|
||||
|
|
@ -284,14 +284,14 @@ func (self *Executor) DifferenceQueryStepHandler(msg *db.Message) {
|
|||
func (self *Executor) CatQueryStepHandler(msg *db.Message) {
|
||||
log.Trace("CatQueryStepHandler")
|
||||
qs := msg.Data.(query.CatQueryStep)
|
||||
var handles []index.BitmapHandle
|
||||
var handles []pilosa.BitmapHandle
|
||||
return_type := "bitmap-handles"
|
||||
var sum uint64
|
||||
merge_map := make(map[uint64]uint64)
|
||||
slice_map := make(map[uint64]map[util.SUUID]struct{})
|
||||
all_slice := make(map[util.SUUID]struct {
|
||||
process util.GUID
|
||||
handle index.BitmapHandle
|
||||
handle pilosa.BitmapHandle
|
||||
})
|
||||
|
||||
// either create a list of bitmap handles to cat (i.e. union), or sum the integer values
|
||||
|
|
@ -311,7 +311,7 @@ func (self *Executor) CatQueryStepHandler(msg *db.Message) {
|
|||
value := <-part
|
||||
|
||||
switch val := value.(type) {
|
||||
case index.BitmapHandle:
|
||||
case pilosa.BitmapHandle:
|
||||
handles = append(handles, val)
|
||||
case []byte:
|
||||
bh, _ := self.Index.FromBytes(qs.Location.FragmentId, val)
|
||||
|
|
@ -338,7 +338,7 @@ func (self *Executor) CatQueryStepHandler(msg *db.Message) {
|
|||
}
|
||||
all_slice[val.FragmentId] = struct {
|
||||
process util.GUID
|
||||
handle index.BitmapHandle
|
||||
handle pilosa.BitmapHandle
|
||||
}{val.ProcessId, val.HBitmap}
|
||||
check_pair = true
|
||||
}
|
||||
|
|
@ -362,18 +362,18 @@ func (self *Executor) CatQueryStepHandler(msg *db.Message) {
|
|||
spew.Dump(err)
|
||||
}
|
||||
} else if return_type == "pair-list" {
|
||||
rank_list := make(index.RankList, 0, len(merge_map))
|
||||
rank_list := make(pilosa.RankList, 0, len(merge_map))
|
||||
for k, v := range merge_map {
|
||||
if k == 0 || v == 0 {
|
||||
continue //shouldn't be getting 0 keys or values anyway
|
||||
}
|
||||
rank := new(index.Rank)
|
||||
rank.Pair = &index.Pair{Key: k, Count: v}
|
||||
rank := new(pilosa.Rank)
|
||||
rank.Pair = &pilosa.Pair{Key: k, Count: v}
|
||||
rank_list = append(rank_list, rank)
|
||||
}
|
||||
sort.Sort(rank_list) // kinda seems like this copy is wasteful..i'll ponder
|
||||
items_size := min(len(merge_map), qs.N)
|
||||
pair_list := make([]index.Pair, 0, items_size+1)
|
||||
pair_list := make([]pilosa.Pair, 0, items_size+1)
|
||||
for i, r := range rank_list {
|
||||
if i < items_size {
|
||||
pair_list = append(pair_list, *r.Pair)
|
||||
|
|
@ -394,7 +394,7 @@ func (self *Executor) CatQueryStepHandler(msg *db.Message) {
|
|||
}
|
||||
|
||||
func (self *Executor) SendRequest(process_id util.GUID, t *Task) {
|
||||
args := make([]index.FillArgs, len(t.f), len(t.f))
|
||||
args := make([]pilosa.FillArgs, len(t.f), len(t.f))
|
||||
for _, v := range t.f {
|
||||
args = append(args, v)
|
||||
}
|
||||
|
|
@ -412,17 +412,17 @@ func (self *Executor) FetchMissing(tasks map[util.GUID]*Task) {
|
|||
|
||||
func (self *Executor) GatherResults(tasks map[util.GUID]*Task) map[uint64]uint64 {
|
||||
results := make(map[uint64]uint64)
|
||||
answers := make(chan []index.Pair)
|
||||
answers := make(chan []pilosa.Pair)
|
||||
for _, task := range tasks {
|
||||
go func(id util.GUID) {
|
||||
value, err := self.Hold.Get(&id, 10) //eiher need to be the frame process or the handler process?
|
||||
if value == nil {
|
||||
log.Warn("Bad TopN Result:", err)
|
||||
empty := make([]index.Pair, 0, 0)
|
||||
empty := make([]pilosa.Pair, 0, 0)
|
||||
answers <- empty
|
||||
|
||||
} else {
|
||||
answers <- value.([]index.Pair)
|
||||
answers <- value.([]pilosa.Pair)
|
||||
}
|
||||
}(task.hold_id)
|
||||
}
|
||||
|
|
@ -539,7 +539,7 @@ func (self *Executor) StashQueryStepHandler(msg *db.Message) {
|
|||
value := <-part
|
||||
|
||||
switch val := value.(type) {
|
||||
case index.BitmapHandle:
|
||||
case pilosa.BitmapHandle:
|
||||
log.Info("STASH ADDING HANDLE", val)
|
||||
//not sure what to do here....
|
||||
//result.Handles = append(result.Handles, val)
|
||||
|
|
@ -687,12 +687,12 @@ func init() {
|
|||
type TopNPackage struct {
|
||||
ProcessId util.GUID
|
||||
FragmentId util.SUUID
|
||||
Pairs []index.Pair
|
||||
HBitmap index.BitmapHandle
|
||||
Pairs []pilosa.Pair
|
||||
HBitmap pilosa.BitmapHandle
|
||||
}
|
||||
|
||||
type TopFill struct {
|
||||
Args []index.FillArgs
|
||||
Args []pilosa.FillArgs
|
||||
ReturnProcessId util.GUID
|
||||
QueryId util.GUID
|
||||
DestProcessId util.GUID
|
||||
|
|
@ -700,22 +700,22 @@ type TopFill struct {
|
|||
|
||||
type Task struct {
|
||||
processid util.GUID
|
||||
f map[util.SUUID]index.FillArgs
|
||||
f map[util.SUUID]pilosa.FillArgs
|
||||
hold_id util.GUID
|
||||
}
|
||||
|
||||
func newtask(p util.GUID) *Task {
|
||||
result := new(Task)
|
||||
result.processid = p
|
||||
result.f = make(map[util.SUUID]index.FillArgs)
|
||||
result.f = make(map[util.SUUID]pilosa.FillArgs)
|
||||
result.hold_id = util.RandomUUID()
|
||||
return result
|
||||
}
|
||||
|
||||
func (t *Task) Add(frag util.SUUID, bitmap_id uint64, handle index.BitmapHandle) {
|
||||
func (t *Task) Add(frag util.SUUID, bitmap_id uint64, handle pilosa.BitmapHandle) {
|
||||
fa, ok := t.f[frag]
|
||||
if !ok {
|
||||
fa = index.FillArgs{Frag_id: frag, Handle: handle, Bitmaps: make([]uint64, 0, 0)}
|
||||
fa = pilosa.FillArgs{Frag_id: frag, Handle: handle, Bitmaps: make([]uint64, 0, 0)}
|
||||
}
|
||||
fa.Bitmaps = append(fa.Bitmaps, bitmap_id)
|
||||
t.f[frag] = fa
|
||||
|
|
@ -725,7 +725,7 @@ func BuildTask(merge_map map[uint64]uint64,
|
|||
slice_map map[uint64]map[util.SUUID]struct{},
|
||||
total_fragments map[util.SUUID]struct {
|
||||
process util.GUID
|
||||
handle index.BitmapHandle
|
||||
handle pilosa.BitmapHandle
|
||||
}) map[util.GUID]*Task {
|
||||
|
||||
tasks := make(map[util.GUID]*Task)
|
||||
|
|
@ -750,13 +750,13 @@ func BuildTask(merge_map map[uint64]uint64,
|
|||
|
||||
type hole struct {
|
||||
process util.GUID
|
||||
handle index.BitmapHandle
|
||||
handle pilosa.BitmapHandle
|
||||
fragment util.SUUID
|
||||
}
|
||||
|
||||
func missing(fids map[util.SUUID]struct{}, all map[util.SUUID]struct {
|
||||
process util.GUID
|
||||
handle index.BitmapHandle
|
||||
handle pilosa.BitmapHandle
|
||||
}) []hole {
|
||||
results := make([]hole, 0, 0)
|
||||
|
||||
|
|
|
|||
|
|
@ -1,7 +1,6 @@
|
|||
package index
|
||||
package pilosa
|
||||
|
||||
import (
|
||||
"database/sql"
|
||||
"encoding/gob"
|
||||
"errors"
|
||||
"fmt"
|
||||
|
|
@ -11,7 +10,6 @@ import (
|
|||
"time"
|
||||
|
||||
log "github.com/cihub/seelog"
|
||||
_ "github.com/go-sql-driver/mysql"
|
||||
"github.com/golang/groupcache/lru"
|
||||
"github.com/umbel/pilosa/util"
|
||||
)
|
||||
|
|
@ -28,17 +26,6 @@ type FragmentContainer struct {
|
|||
mutex *sync.Mutex
|
||||
}
|
||||
|
||||
func lookup(stmt *sql.Stmt, tile_id uint64) int {
|
||||
var category int
|
||||
err := stmt.QueryRow(tile_id).Scan(&category) // WHERE number = 13
|
||||
if err != nil {
|
||||
log.Warn(err.Error())
|
||||
return 0
|
||||
}
|
||||
return category
|
||||
|
||||
}
|
||||
|
||||
func NewFragmentContainer() *FragmentContainer {
|
||||
f := new(FragmentContainer)
|
||||
f.fragments = make(map[util.SUUID]*Fragment)
|
||||
|
|
@ -1,15 +1,15 @@
|
|||
package index_test
|
||||
package pilosa_test
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"github.com/umbel/pilosa/index"
|
||||
_ "github.com/umbel/pilosa/index/storage"
|
||||
"github.com/umbel/pilosa"
|
||||
_ "github.com/umbel/pilosa/storage"
|
||||
"github.com/umbel/pilosa/util"
|
||||
)
|
||||
|
||||
func init() {
|
||||
index.Backend = "memory"
|
||||
pilosa.Backend = "memory"
|
||||
}
|
||||
|
||||
// Ensure a fragment can be retrieved from the container.
|
||||
|
|
@ -77,7 +77,7 @@ func TestFragmentContainer_Union(t *testing.T) {
|
|||
fc.MustSetBit(1, 4321, 65537, 0)
|
||||
|
||||
// Union the handles together.
|
||||
if result, err := fc.Union(1, []index.BitmapHandle{fc.MustGet(1, 1234), fc.MustGet(1, 4321)}); err != nil {
|
||||
if result, err := fc.Union(1, []pilosa.BitmapHandle{fc.MustGet(1, 1234), fc.MustGet(1, 4321)}); err != nil {
|
||||
t.Fatal(err)
|
||||
} else if n := fc.MustCount(1, result); n != 2 {
|
||||
t.Fatalf("unexpected union bit count: %d", n)
|
||||
|
|
@ -91,7 +91,7 @@ func TestFragmentContainer_Union_Empty(t *testing.T) {
|
|||
fc.MustSetBit(1, 1234, 1, 0)
|
||||
|
||||
// Union the handles together.
|
||||
if result, err := fc.Union(1, []index.BitmapHandle{fc.MustGet(1, 1234), fc.MustGet(1, 4321)}); err != nil {
|
||||
if result, err := fc.Union(1, []pilosa.BitmapHandle{fc.MustGet(1, 1234), fc.MustGet(1, 4321)}); err != nil {
|
||||
t.Fatal(err)
|
||||
} else if n := fc.MustCount(1, result); n != 1 {
|
||||
t.Fatalf("unexpected empty union bit count: %d", n)
|
||||
|
|
@ -106,7 +106,7 @@ func TestFragmentContainer_Intersect(t *testing.T) {
|
|||
fc.MustSetBit(1, 4321, 65537, 0)
|
||||
|
||||
// Intersect the handles together.
|
||||
if result, err := fc.Intersect(1, []index.BitmapHandle{fc.MustGet(1, 1234), fc.MustGet(1, 4321)}); err != nil {
|
||||
if result, err := fc.Intersect(1, []pilosa.BitmapHandle{fc.MustGet(1, 1234), fc.MustGet(1, 4321)}); err != nil {
|
||||
t.Fatal(err)
|
||||
} else if n := fc.MustCount(1, result); n != 0 {
|
||||
t.Fatalf("unexpected intersect bit count: %d", n)
|
||||
|
|
@ -121,7 +121,7 @@ func TestFragmentContainer_Difference(t *testing.T) {
|
|||
fc.MustSetBit(1, 4321, 65537, 0)
|
||||
|
||||
// Compute the difference between the handles.
|
||||
if result, err := fc.Difference(1, []index.BitmapHandle{fc.MustGet(1, 1234), fc.MustGet(1, 4321)}); err != nil {
|
||||
if result, err := fc.Difference(1, []pilosa.BitmapHandle{fc.MustGet(1, 1234), fc.MustGet(1, 4321)}); err != nil {
|
||||
t.Fatal(err)
|
||||
} else if n := fc.MustCount(1, result); n != 1 {
|
||||
t.Fatalf("unexpected difference bit count: %s", err)
|
||||
|
|
@ -262,18 +262,18 @@ func TestFragmentContainer_FromBytes(t *testing.T) {
|
|||
}
|
||||
}
|
||||
|
||||
// FragementContainer is a test wrapper for index.FragmentContainer.
|
||||
// FragementContainer is a test wrapper for pilosa.FragmentContainer.
|
||||
type FragmentContainer struct {
|
||||
*index.FragmentContainer
|
||||
*pilosa.FragmentContainer
|
||||
}
|
||||
|
||||
// NewFragmentContainer returns a new instance of FragmentContainer.
|
||||
func NewFragmentContainer() *FragmentContainer {
|
||||
return &FragmentContainer{index.NewFragmentContainer()}
|
||||
return &FragmentContainer{pilosa.NewFragmentContainer()}
|
||||
}
|
||||
|
||||
// MustGet retrieves a bitmap by id. Panic on error.
|
||||
func (fc *FragmentContainer) MustGet(frag_id util.SUUID, bitmap_id uint64) index.BitmapHandle {
|
||||
func (fc *FragmentContainer) MustGet(frag_id util.SUUID, bitmap_id uint64) pilosa.BitmapHandle {
|
||||
bh, err := fc.Get(frag_id, bitmap_id)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
|
|
@ -300,7 +300,7 @@ func (fc *FragmentContainer) MustClear(fragmentID util.SUUID) bool {
|
|||
}
|
||||
|
||||
// MustCount returns the number of set bits in a bitmap. Panic on error.
|
||||
func (fc *FragmentContainer) MustCount(frag_id util.SUUID, bitmap index.BitmapHandle) uint64 {
|
||||
func (fc *FragmentContainer) MustCount(frag_id util.SUUID, bitmap pilosa.BitmapHandle) uint64 {
|
||||
v, err := fc.Count(frag_id, bitmap)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
package index
|
||||
package pilosa
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
|
|
@ -1,7 +0,0 @@
|
|||
package storage
|
||||
|
||||
import (
|
||||
_ "github.com/umbel/pilosa/index/storage/cassandra"
|
||||
_ "github.com/umbel/pilosa/index/storage/leveldb"
|
||||
_ "github.com/umbel/pilosa/index/storage/mem"
|
||||
)
|
||||
|
|
@ -1,68 +0,0 @@
|
|||
package index
|
||||
|
||||
/*
|
||||
import (
|
||||
"fmt"
|
||||
"net"
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
)
|
||||
|
||||
func TestStorage(t *testing.T) {
|
||||
if true {
|
||||
return
|
||||
}
|
||||
db := "db"
|
||||
frame := "main"
|
||||
slice := 0
|
||||
filter := 10
|
||||
bitmap_id := uint64(999999)
|
||||
|
||||
c, err := net.DialTimeout("tcp", "127.0.0.1:9042", 100*time.Millisecond)
|
||||
if err != nil {
|
||||
fmt.Println("NO cassandra. Skipping test.")
|
||||
} else {
|
||||
c.Close()
|
||||
Convey("cassandra", t, func() {
|
||||
fmt.Println("GO")
|
||||
//storage := NewCassStorage("127.0.0.1", "pilosa")
|
||||
storage := NewCassStorage()
|
||||
|
||||
fmt.Println("FETCH")
|
||||
bm, _ := storage.Fetch(bitmap_id, db, frame, slice)
|
||||
for i := uint64(0); i < 256; i++ {
|
||||
SetBit(bm, i)
|
||||
}
|
||||
fmt.Println("STORE")
|
||||
storage.Store(uint64(bitmap_id), db, frame, slice, uint64(filter), bm.(*Bitmap))
|
||||
fmt.Println("FETCH")
|
||||
bm2, _ := storage.Fetch(bitmap_id, db, frame, slice)
|
||||
So(BitCount(bm), ShouldEqual, BitCount(bm2))
|
||||
So(BitCount(bm), ShouldEqual, bm.Count())
|
||||
So(BitCount(bm), ShouldEqual, 256)
|
||||
|
||||
})
|
||||
}
|
||||
|
||||
// Convey("leveldb", t, func() {
|
||||
// storage := NewLevelDBStorage("./basic/one")
|
||||
|
||||
// fmt.Println("FETCH")
|
||||
// bm, _ := storage.Fetch(bitmap_id, db, frame, slice)
|
||||
// //spew.Dump(bm)
|
||||
// SetBit(bm, 0)
|
||||
// SetBit(bm, 1)
|
||||
// SetBit(bm, 2)
|
||||
// fmt.Println("STORE")
|
||||
// storage.Store(int64(bitmap_id), db, frame, slice, uint64(filter), bm.(*Bitmap))
|
||||
// //storage.Flush()
|
||||
// fmt.Println("FETCH")
|
||||
// bm2, _ := storage.Fetch(bitmap_id, db, frame, slice)
|
||||
// So(BitCount(bm), ShouldEqual, BitCount(bm2))
|
||||
// So(BitCount(bm), ShouldEqual, bm.Count())
|
||||
// So(BitCount(bm), ShouldEqual, 3)
|
||||
// storage.Close()
|
||||
// })
|
||||
}
|
||||
*/
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
package index
|
||||
package pilosa
|
||||
|
||||
// bit population count, take from
|
||||
// https://code.google.com/p/go/issues/detail?id=4988#c11
|
||||
|
|
@ -1,6 +1,6 @@
|
|||
// +build amd64
|
||||
|
||||
package index
|
||||
package pilosa
|
||||
|
||||
//go:noescape
|
||||
|
||||
|
|
@ -1,6 +1,6 @@
|
|||
// +build !amd64
|
||||
|
||||
package index
|
||||
package pilosa
|
||||
|
||||
func popcntSlice(s []uint64) uint64 {
|
||||
return popcntSliceGo(s)
|
||||
|
|
@ -8,7 +8,7 @@ import (
|
|||
|
||||
log "github.com/cihub/seelog"
|
||||
"github.com/davecgh/go-spew/spew"
|
||||
"github.com/umbel/pilosa/index"
|
||||
"github.com/umbel/pilosa"
|
||||
"github.com/umbel/pilosa/util"
|
||||
)
|
||||
|
||||
|
|
@ -221,7 +221,7 @@ ArgLoop:
|
|||
if err != nil {
|
||||
return nil, fmt.Errorf("Expecting handle! (%v)", err)
|
||||
}
|
||||
recallArgs.Assign(index.BitmapHandle(i)) //sets the value of the last created arg
|
||||
recallArgs.Assign(pilosa.BitmapHandle(i)) //sets the value of the last created arg
|
||||
}
|
||||
default:
|
||||
spew.Dump("UNPROCESSED VALUE", token)
|
||||
|
|
|
|||
|
|
@ -9,8 +9,8 @@ import (
|
|||
|
||||
log "github.com/cihub/seelog"
|
||||
"github.com/davecgh/go-spew/spew"
|
||||
"github.com/umbel/pilosa"
|
||||
"github.com/umbel/pilosa/db"
|
||||
"github.com/umbel/pilosa/index"
|
||||
"github.com/umbel/pilosa/util"
|
||||
)
|
||||
|
||||
|
|
@ -845,11 +845,11 @@ type FillResult struct {
|
|||
|
||||
type CacheItem struct {
|
||||
FragmentId util.SUUID
|
||||
Handle index.BitmapHandle
|
||||
Handle pilosa.BitmapHandle
|
||||
}
|
||||
|
||||
type Stash struct {
|
||||
Stash []CacheItem //index.BitmapHandle //probably need to make the a struct with fragment_id and handle
|
||||
Stash []CacheItem //pilosa.BitmapHandle //probably need to make the a struct with fragment_id and handle
|
||||
incomplete bool
|
||||
}
|
||||
|
||||
|
|
@ -863,7 +863,7 @@ func (st *Stash) Add(i util.SUUID) {
|
|||
st.incomplete = true
|
||||
}
|
||||
|
||||
func (st *Stash) Assign(i index.BitmapHandle) {
|
||||
func (st *Stash) Assign(i pilosa.BitmapHandle) {
|
||||
st.Stash[len(st.Stash)-1].Handle = i //big assumption that item already exists
|
||||
st.incomplete = false
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
package index
|
||||
package pilosa
|
||||
|
||||
import (
|
||||
"github.com/umbel/pilosa/util"
|
||||
|
|
@ -5,13 +5,13 @@ import (
|
|||
|
||||
log "github.com/cihub/seelog"
|
||||
"github.com/gocql/gocql"
|
||||
"github.com/umbel/pilosa/index"
|
||||
"github.com/umbel/pilosa"
|
||||
"github.com/umbel/pilosa/util"
|
||||
)
|
||||
|
||||
func init() {
|
||||
index.RegisterStorage("cassandra",
|
||||
func(opt index.StorageOptions) index.Storage {
|
||||
pilosa.RegisterStorage("cassandra",
|
||||
func(opt pilosa.StorageOptions) pilosa.Storage {
|
||||
return NewStorage(opt)
|
||||
},
|
||||
)
|
||||
|
|
@ -52,7 +52,7 @@ type Storage struct {
|
|||
}
|
||||
|
||||
// NewStorage returns a new, uninitialized instance of Storage.
|
||||
func NewStorage(opt index.StorageOptions) *Storage {
|
||||
func NewStorage(opt pilosa.StorageOptions) *Storage {
|
||||
return &Storage{
|
||||
batchTime: time.Now(),
|
||||
|
||||
|
|
@ -94,8 +94,8 @@ func (s *Storage) Close() error {
|
|||
}
|
||||
|
||||
// Fetch returns a bitmap by ID.
|
||||
func (s *Storage) Fetch(bitmapID uint64, db string, frame string, slice int) (*index.Bitmap, uint64) {
|
||||
bm := index.NewBitmap()
|
||||
func (s *Storage) Fetch(bitmapID uint64, db string, frame string, slice int) (*pilosa.Bitmap, uint64) {
|
||||
bm := pilosa.NewBitmap()
|
||||
|
||||
// Start benchmark.
|
||||
start := time.Now()
|
||||
|
|
@ -105,7 +105,7 @@ func (s *Storage) Fetch(bitmapID uint64, db string, frame string, slice int) (*i
|
|||
u64toi64(bitmapID), db, frame, slice).Iter()
|
||||
|
||||
// Iterate over chunks and materialize bitmap object.
|
||||
var chunk *index.Chunk
|
||||
var chunk *pilosa.Chunk
|
||||
var chunkKey, block, count int64
|
||||
var blockIndex uint32
|
||||
var filter int
|
||||
|
|
@ -114,7 +114,7 @@ func (s *Storage) Fetch(bitmapID uint64, db string, frame string, slice int) (*i
|
|||
for itr.Scan(&filter, &chunkKey, &blockIndex, &block) {
|
||||
if chunkKey != int64(-1) {
|
||||
if chunkKey != lastKey {
|
||||
chunk = &index.Chunk{uint64(chunkKey), index.NewBlocks()}
|
||||
chunk = &pilosa.Chunk{uint64(chunkKey), pilosa.NewBlocks()}
|
||||
bm.AddChunk(chunk)
|
||||
}
|
||||
chunk.Value[uint8(blockIndex)] = uint64(block)
|
||||
|
|
@ -172,7 +172,7 @@ func (s *Storage) Flush() {
|
|||
}
|
||||
|
||||
// Store saves a bitmap to storage.
|
||||
func (s *Storage) Store(id uint64, db string, frame string, slice int, filter uint64, bm *index.Bitmap) error {
|
||||
func (s *Storage) Store(id uint64, db string, frame string, slice int, filter uint64, bm *pilosa.Bitmap) error {
|
||||
s.beginBatch()
|
||||
|
||||
for i := bm.ChunkIterator(); !i.Limit(); i = i.Next() {
|
||||
|
|
@ -184,7 +184,7 @@ func (s *Storage) Store(id uint64, db string, frame string, slice int, filter ui
|
|||
}
|
||||
}
|
||||
|
||||
s.StoreBlock(id, db, frame, slice, filter, index.CounterMask, 0, bm.BitCount())
|
||||
s.StoreBlock(id, db, frame, slice, filter, pilosa.CounterMask, 0, bm.BitCount())
|
||||
s.endBatch()
|
||||
return nil
|
||||
}
|
||||
|
|
@ -229,7 +229,7 @@ func (s *Storage) RemoveBlock(bid uint64, db string, frame string, slice int, bc
|
|||
func (s *Storage) StoreBit(bid uint64, db string, frame string, slice int, filter uint64, chunk uint64, blockIndex int32, val, count uint64) {
|
||||
s.beginBatch()
|
||||
s.StoreBlock(bid, db, frame, slice, filter, chunk, blockIndex, val)
|
||||
s.StoreBlock(bid, db, frame, slice, filter, index.CounterMask, 0, count)
|
||||
s.StoreBlock(bid, db, frame, slice, filter, pilosa.CounterMask, 0, count)
|
||||
s.endBatch()
|
||||
}
|
||||
|
||||
|
|
@ -237,7 +237,7 @@ func (s *Storage) RemoveBit(id uint64, db string, frame string, slice int, filte
|
|||
log.Trace("RemoveBit", id, db, frame, slice, chunk, blockIndex)
|
||||
s.beginBatch()
|
||||
s.RemoveBlock(id, db, frame, slice, chunk, blockIndex)
|
||||
s.StoreBlock(id, db, frame, slice, filter, index.CounterMask, 0, count)
|
||||
s.StoreBlock(id, db, frame, slice, filter, pilosa.CounterMask, 0, count)
|
||||
s.endBatch()
|
||||
}
|
||||
|
||||
|
|
@ -9,13 +9,13 @@ import (
|
|||
|
||||
"github.com/syndtr/goleveldb/leveldb"
|
||||
. "github.com/syndtr/goleveldb/leveldb/util"
|
||||
"github.com/umbel/pilosa/index"
|
||||
"github.com/umbel/pilosa"
|
||||
"github.com/umbel/pilosa/util"
|
||||
)
|
||||
|
||||
func init() {
|
||||
index.RegisterStorage("leveldb",
|
||||
func(opt index.StorageOptions) index.Storage {
|
||||
pilosa.RegisterStorage("leveldb",
|
||||
func(opt pilosa.StorageOptions) pilosa.Storage {
|
||||
return NewStorage(opt)
|
||||
},
|
||||
)
|
||||
|
|
@ -34,7 +34,7 @@ type Storage struct {
|
|||
}
|
||||
|
||||
// NewStorage returns a new instance of Storage.
|
||||
func NewStorage(opt index.StorageOptions) *Storage {
|
||||
func NewStorage(opt pilosa.StorageOptions) *Storage {
|
||||
path := filepath.Join(
|
||||
opt.LevelDBPath,
|
||||
opt.DB,
|
||||
|
|
@ -67,8 +67,8 @@ func (s *Storage) Close() error {
|
|||
return s.db.Close()
|
||||
}
|
||||
|
||||
func (s *Storage) Fetch(bitmapID uint64, db string, frame string, slice int) (*index.Bitmap, uint64) {
|
||||
bm := index.NewBitmap()
|
||||
func (s *Storage) Fetch(bitmapID uint64, db string, frame string, slice int) (*pilosa.Bitmap, uint64) {
|
||||
bm := pilosa.NewBitmap()
|
||||
|
||||
// Begin benchmark.
|
||||
start := time.Now()
|
||||
|
|
@ -81,16 +81,16 @@ func (s *Storage) Fetch(bitmapID uint64, db string, frame string, slice int) (*i
|
|||
defer iter.Release()
|
||||
|
||||
// Iterate over blocks in database and create bitmap.
|
||||
var chunk *index.Chunk
|
||||
var chunk *pilosa.Chunk
|
||||
var filter, block, count uint64
|
||||
lastKey := uint64(index.CounterMask)
|
||||
lastKey := uint64(pilosa.CounterMask)
|
||||
|
||||
for iter.Next() {
|
||||
_, key, idx := unmarshalKey(iter.Key())
|
||||
block, filter = unmarshalValue(iter.Value())
|
||||
if key != index.CounterMask {
|
||||
if key != pilosa.CounterMask {
|
||||
if key != lastKey {
|
||||
chunk = &index.Chunk{key, index.NewBlocks()}
|
||||
chunk = &pilosa.Chunk{key, pilosa.NewBlocks()}
|
||||
bm.AddChunk(chunk)
|
||||
}
|
||||
chunk.Value[idx] = block
|
||||
|
|
@ -146,7 +146,7 @@ func (s *Storage) Flush() {
|
|||
}
|
||||
|
||||
// Store saves a bitmap to storage.
|
||||
func (s *Storage) Store(bitmapID uint64, db string, frame string, slice int, filter uint64, bm *index.Bitmap) error {
|
||||
func (s *Storage) Store(bitmapID uint64, db string, frame string, slice int, filter uint64, bm *pilosa.Bitmap) error {
|
||||
s.beginBatch()
|
||||
|
||||
for itr := bm.ChunkIterator(); !itr.Limit(); itr = itr.Next() {
|
||||
|
|
@ -157,7 +157,7 @@ func (s *Storage) Store(bitmapID uint64, db string, frame string, slice int, fil
|
|||
}
|
||||
}
|
||||
|
||||
s.StoreBlock(bitmapID, db, frame, slice, filter, index.CounterMask, 0, bm.BitCount())
|
||||
s.StoreBlock(bitmapID, db, frame, slice, filter, pilosa.CounterMask, 0, bm.BitCount())
|
||||
|
||||
s.endBatch()
|
||||
return nil
|
||||
|
|
@ -179,7 +179,7 @@ func (s *Storage) RemoveBlock(bitmapID uint64, db string, frame string, slice in
|
|||
func (s *Storage) StoreBit(bitmapID uint64, db string, frame string, slice int, filter uint64, bchunk uint64, blockIndex int32, bblock, count uint64) {
|
||||
s.beginBatch()
|
||||
s.StoreBlock(bitmapID, db, frame, slice, filter, bchunk, blockIndex, bblock)
|
||||
s.StoreBlock(bitmapID, db, frame, slice, filter, index.CounterMask, 0, count)
|
||||
s.StoreBlock(bitmapID, db, frame, slice, filter, pilosa.CounterMask, 0, count)
|
||||
s.endBatch()
|
||||
}
|
||||
|
||||
|
|
@ -5,8 +5,8 @@ import (
|
|||
"os"
|
||||
"testing"
|
||||
|
||||
"github.com/umbel/pilosa/index"
|
||||
"github.com/umbel/pilosa/index/storage/leveldb"
|
||||
"github.com/umbel/pilosa"
|
||||
"github.com/umbel/pilosa/storage/leveldb"
|
||||
"github.com/umbel/pilosa/util"
|
||||
)
|
||||
|
||||
|
|
@ -34,7 +34,7 @@ func NewStorage() *Storage {
|
|||
f.Close()
|
||||
os.Remove(f.Name())
|
||||
|
||||
return &Storage{leveldb.NewStorage(index.StorageOptions{
|
||||
return &Storage{leveldb.NewStorage(pilosa.StorageOptions{
|
||||
LevelDBPath: f.Name(),
|
||||
})}
|
||||
}
|
||||
|
|
@ -3,12 +3,12 @@ package mem
|
|||
import (
|
||||
"fmt"
|
||||
|
||||
"github.com/umbel/pilosa/index"
|
||||
"github.com/umbel/pilosa"
|
||||
)
|
||||
|
||||
func init() {
|
||||
index.RegisterStorage("memory",
|
||||
func(opt index.StorageOptions) index.Storage {
|
||||
pilosa.RegisterStorage("memory",
|
||||
func(opt pilosa.StorageOptions) pilosa.Storage {
|
||||
return NewStorage()
|
||||
},
|
||||
)
|
||||
|
|
@ -16,13 +16,13 @@ func init() {
|
|||
|
||||
// Storage represents in-memory bitmap storage.
|
||||
type Storage struct {
|
||||
db map[string]*index.Bitmap
|
||||
db map[string]*pilosa.Bitmap
|
||||
}
|
||||
|
||||
// NewStorage returns a new instance of Storage.
|
||||
func NewStorage() *Storage {
|
||||
return &Storage{
|
||||
db: make(map[string]*index.Bitmap),
|
||||
db: make(map[string]*pilosa.Bitmap),
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -36,7 +36,7 @@ func (c *Storage) Close() error { return nil }
|
|||
func (c *Storage) Flush() {}
|
||||
|
||||
// Fetch retrieves a bitmap by id.
|
||||
func (c *Storage) Fetch(id uint64, db, frame string, slice int) (*index.Bitmap, uint64) {
|
||||
func (c *Storage) Fetch(id uint64, db, frame string, slice int) (*pilosa.Bitmap, uint64) {
|
||||
key := fmt.Sprintf("%d:%s:%s:%d", id, db, frame, slice)
|
||||
|
||||
// Find bitmap by key.
|
||||
|
|
@ -46,14 +46,14 @@ func (c *Storage) Fetch(id uint64, db, frame string, slice int) (*index.Bitmap,
|
|||
}
|
||||
|
||||
// If the bitmap doesn't exist then create a new one.
|
||||
b = index.NewBitmap()
|
||||
b = pilosa.NewBitmap()
|
||||
c.db[key] = b
|
||||
return b, 0
|
||||
}
|
||||
|
||||
// Store saves a bitmap to storage.
|
||||
// This is a no-op for in-memory storage because changes are stored in the cache.
|
||||
func (c *Storage) Store(id uint64, db, frame string, slice int, filter uint64, b *index.Bitmap) error {
|
||||
func (c *Storage) Store(id uint64, db, frame string, slice int, filter uint64, b *pilosa.Bitmap) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
|
|
@ -3,7 +3,7 @@ package mem_test
|
|||
import (
|
||||
"testing"
|
||||
|
||||
"github.com/umbel/pilosa/index/storage/mem"
|
||||
"github.com/umbel/pilosa/storage/mem"
|
||||
)
|
||||
|
||||
// Ensure a bitmap can be retrieved from storage.
|
||||
7
storage/storage.go
Normal file
7
storage/storage.go
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
package storage
|
||||
|
||||
import (
|
||||
_ "github.com/umbel/pilosa/storage/cassandra"
|
||||
_ "github.com/umbel/pilosa/storage/leveldb"
|
||||
_ "github.com/umbel/pilosa/storage/mem"
|
||||
)
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
package index
|
||||
package pilosa
|
||||
|
||||
import (
|
||||
"time"
|
||||
|
|
@ -1,14 +1,14 @@
|
|||
package index_test
|
||||
package pilosa_test
|
||||
|
||||
import (
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
"github.com/umbel/pilosa/index"
|
||||
"github.com/umbel/pilosa"
|
||||
)
|
||||
|
||||
func TestGetRange_1h_0(t *testing.T) {
|
||||
if m := index.GetRange(
|
||||
if m := pilosa.GetRange(
|
||||
MustParseTime("2014-08-11 14:00"),
|
||||
MustParseTime("2014-08-11 16:00"),
|
||||
uint64(1),
|
||||
|
|
@ -18,7 +18,7 @@ func TestGetRange_1h_0(t *testing.T) {
|
|||
}
|
||||
|
||||
func TestGetRange_1h_1(t *testing.T) {
|
||||
if m := index.GetRange(
|
||||
if m := pilosa.GetRange(
|
||||
MustParseTime("2014-01-02 10:03"),
|
||||
MustParseTime("2014-01-02 11:03"),
|
||||
uint64(1),
|
||||
|
|
@ -28,7 +28,7 @@ func TestGetRange_1h_1(t *testing.T) {
|
|||
}
|
||||
|
||||
func TestGetRange_2h(t *testing.T) {
|
||||
if m := index.GetRange(
|
||||
if m := pilosa.GetRange(
|
||||
MustParseTime("2014-01-02 10:03"),
|
||||
MustParseTime("2014-01-02 12:03"),
|
||||
uint64(1),
|
||||
|
|
@ -38,7 +38,7 @@ func TestGetRange_2h(t *testing.T) {
|
|||
}
|
||||
|
||||
func TestGetRange_24h(t *testing.T) {
|
||||
if m := index.GetRange(
|
||||
if m := pilosa.GetRange(
|
||||
MustParseTime("2014-01-02 12:03"),
|
||||
MustParseTime("2014-01-03 12:03"),
|
||||
uint64(1),
|
||||
|
|
@ -48,7 +48,7 @@ func TestGetRange_24h(t *testing.T) {
|
|||
}
|
||||
|
||||
func TestGetRange_1d(t *testing.T) {
|
||||
if m := index.GetRange(
|
||||
if m := pilosa.GetRange(
|
||||
MustParseTime("2014-01-02 00:00"),
|
||||
MustParseTime("2014-01-03 00:00"),
|
||||
uint64(1),
|
||||
|
|
@ -58,7 +58,7 @@ func TestGetRange_1d(t *testing.T) {
|
|||
}
|
||||
|
||||
func TestGetRange_1d1h(t *testing.T) {
|
||||
if m := index.GetRange(
|
||||
if m := pilosa.GetRange(
|
||||
MustParseTime("2014-01-02 00:00"),
|
||||
MustParseTime("2014-01-03 01:00"),
|
||||
uint64(1),
|
||||
|
|
@ -68,7 +68,7 @@ func TestGetRange_1d1h(t *testing.T) {
|
|||
}
|
||||
|
||||
func TestGetRange_1h1d(t *testing.T) {
|
||||
if m := index.GetRange(
|
||||
if m := pilosa.GetRange(
|
||||
MustParseTime("2014-01-02 23:00"),
|
||||
MustParseTime("2014-01-04 00:00"),
|
||||
uint64(1),
|
||||
|
|
@ -78,7 +78,7 @@ func TestGetRange_1h1d(t *testing.T) {
|
|||
}
|
||||
|
||||
func TestGetRange_1h1d1h(t *testing.T) {
|
||||
if m := index.GetRange(
|
||||
if m := pilosa.GetRange(
|
||||
MustParseTime("2014-01-02 23:00"),
|
||||
MustParseTime("2014-01-04 01:00"),
|
||||
uint64(1),
|
||||
|
|
@ -88,7 +88,7 @@ func TestGetRange_1h1d1h(t *testing.T) {
|
|||
}
|
||||
|
||||
func TestGetRange_1y(t *testing.T) {
|
||||
if m := index.GetRange(
|
||||
if m := pilosa.GetRange(
|
||||
MustParseTime("2014-01-01 00:00"),
|
||||
MustParseTime("2015-01-01 00:00"),
|
||||
uint64(1),
|
||||
|
|
@ -98,7 +98,7 @@ func TestGetRange_1y(t *testing.T) {
|
|||
}
|
||||
|
||||
func TestGetRange_1h1d1m(t *testing.T) {
|
||||
if m := index.GetRange(
|
||||
if m := pilosa.GetRange(
|
||||
MustParseTime("2014-01-30 23:00"),
|
||||
MustParseTime("2014-03-01 00:00"),
|
||||
uint64(1),
|
||||
|
|
@ -108,7 +108,7 @@ func TestGetRange_1h1d1m(t *testing.T) {
|
|||
}
|
||||
|
||||
func TestGetRange_1h1d1m1d1h(t *testing.T) {
|
||||
if m := index.GetRange(
|
||||
if m := pilosa.GetRange(
|
||||
MustParseTime("2014-01-30 23:00"),
|
||||
MustParseTime("2014-03-02 01:00"),
|
||||
uint64(1),
|
||||
|
|
@ -118,7 +118,7 @@ func TestGetRange_1h1d1m1d1h(t *testing.T) {
|
|||
}
|
||||
|
||||
func TestGetTimeIds(t *testing.T) {
|
||||
_ = index.GetTimeIds(uint64(15027), MustParseTime("1970-01-01 00:00"), index.YMD)
|
||||
_ = pilosa.GetTimeIds(uint64(15027), MustParseTime("1970-01-01 00:00"), pilosa.YMD)
|
||||
}
|
||||
|
||||
// DefaultTimeLayout is the time layout used by the tests.
|
||||
|
|
@ -1,31 +1,3 @@
|
|||
package util
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"encoding/binary"
|
||||
)
|
||||
|
||||
const TimeOut = 30
|
||||
|
||||
func Int64ToByte(data int64) []byte {
|
||||
buf := new(bytes.Buffer)
|
||||
binary.Write(buf, binary.BigEndian, data)
|
||||
return buf.Bytes()
|
||||
}
|
||||
func Uint64ToByte(data uint64) []byte {
|
||||
buf := new(bytes.Buffer)
|
||||
binary.Write(buf, binary.BigEndian, data)
|
||||
return buf.Bytes()
|
||||
}
|
||||
func ByteToUint64(data []byte) uint64 {
|
||||
var value uint64
|
||||
buf := bytes.NewReader(data)
|
||||
binary.Read(buf, binary.BigEndian, &value)
|
||||
return value
|
||||
}
|
||||
func ByteToInt64(data []byte) int64 {
|
||||
var value int64
|
||||
buf := bytes.NewReader(data)
|
||||
binary.Read(buf, binary.BigEndian, &value)
|
||||
return value
|
||||
}
|
||||
|
|
|
|||
25
util/id.go
25
util/id.go
|
|
@ -30,9 +30,6 @@ func init() {
|
|||
|
||||
type SUUID uint64
|
||||
|
||||
func leftPad(s string, padStr string, pLen int) string {
|
||||
return strings.Repeat(padStr, pLen) + s
|
||||
}
|
||||
func Id() SUUID {
|
||||
millis := uint64(time.Now().UTC().UnixNano())
|
||||
id := millis << (64 - 41)
|
||||
|
|
@ -51,7 +48,7 @@ func Hex_to_SUUID(str string) SUUID {
|
|||
l := len(str)
|
||||
var m string
|
||||
if l < 16 {
|
||||
m = leftPad(str, "0", 16-l)
|
||||
m = strings.Repeat("0", 16-l) + str
|
||||
} else {
|
||||
m = str
|
||||
}
|
||||
|
|
@ -130,23 +127,3 @@ func ParseGUID(input string) (GUID, error) {
|
|||
}
|
||||
return u, nil
|
||||
}
|
||||
|
||||
func In(val int, list []int) bool {
|
||||
for _, v := range list {
|
||||
if val == v {
|
||||
return true
|
||||
}
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
func Difference(a, b []int) []int {
|
||||
results := make([]int, 0, len(a))
|
||||
for _, v := range a {
|
||||
if !In(v, b) {
|
||||
results = append(results, v)
|
||||
}
|
||||
|
||||
}
|
||||
return results
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue