diff --git a/Makefile b/Makefile index 4aea8f3..f4f12ea 100644 --- a/Makefile +++ b/Makefile @@ -13,11 +13,11 @@ dev: build build: clean generate @go build \ -tags "netgo static_build" -installsuffix netgo \ - -ldflags "-w -X $(shell go list).Version=$(VERSION) -X $(shell go list).Commit=$(COMMIT)" \ + -ldflags "-w -X $(shell go list)/internal.Version=$(VERSION) -X $(shell go list)/internal.Commit=$(COMMIT)" \ ./cmd/bitcask/... @go build \ -tags "netgo static_build" -installsuffix netgo \ - -ldflags "-w -X $(shell go list).Version=$(VERSION) -X $(shell go list).Commit=$(COMMIT)" \ + -ldflags "-w -X $(shell go list)/internal.Version=$(VERSION) -X $(shell go list)/internal.Commit=$(COMMIT)" \ ./cmd/bitcaskd/... generate: diff --git a/bitcask.go b/bitcask.go index 5f3b61d..6d85889 100644 --- a/bitcask.go +++ b/bitcask.go @@ -11,6 +11,8 @@ import ( "github.com/gofrs/flock" "github.com/prologic/trie" + + "github.com/prologic/bitcask/internal" ) type Bitcask struct { @@ -18,9 +20,9 @@ type Bitcask struct { config *config path string - curr *Datafile - keydir *Keydir - datafiles []*Datafile + curr *internal.Datafile + keydir *internal.Keydir + datafiles []*internal.Datafile trie *trie.Trie maxDatafileSize int64 @@ -43,14 +45,14 @@ func (b *Bitcask) Sync() error { } func (b *Bitcask) Get(key string) ([]byte, error) { - var df *Datafile + var df *internal.Datafile item, ok := b.keydir.Get(key) if !ok { return nil, fmt.Errorf("error: key not found %s", key) } - if item.FileID == b.curr.id { + if item.FileID == b.curr.FileID() { df = b.curr } else { df = b.datafiles[item.FileID] @@ -82,7 +84,7 @@ func (b *Bitcask) Put(key string, value []byte) error { return err } - item := b.keydir.Add(key, b.curr.id, offset) + item := b.keydir.Add(key, b.curr.FileID(), offset) b.trie.Add(key, item) return nil @@ -131,22 +133,22 @@ func (b *Bitcask) put(key string, value []byte) (int64, error) { return -1, err } - df, err := NewDatafile(b.path, b.curr.id, true) + df, err := internal.NewDatafile(b.path, b.curr.FileID(), true) if err != nil { return -1, err } b.datafiles = append(b.datafiles, df) - id := b.curr.id + 1 - curr, err := NewDatafile(b.path, id, false) + id := b.curr.FileID() + 1 + curr, err := internal.NewDatafile(b.path, id, false) if err != nil { return -1, err } b.curr = curr } - e := NewEntry(key, value) + e := internal.NewEntry(key, value) return b.curr.Write(e) } @@ -156,12 +158,12 @@ func (b *Bitcask) setMaxDatafileSize(size int64) error { } func Merge(path string, force bool) error { - fns, err := getDatafiles(path) + fns, err := internal.GetDatafiles(path) if err != nil { return err } - ids, err := parseIds(fns) + ids, err := internal.ParseIds(fns) if err != nil { return err } @@ -191,9 +193,9 @@ func Merge(path string, force bool) error { id := ids[i] - keydir := NewKeydir() + keydir := internal.NewKeydir() - df, err := NewDatafile(path, id, true) + df, err := internal.NewDatafile(path, id, true) if err != nil { return err } @@ -217,7 +219,7 @@ func Merge(path string, force bool) error { keydir.Add(e.Key, ids[i], e.Offset) } - tempdf, err := NewDatafile(temp, id, false) + tempdf, err := internal.NewDatafile(temp, id, false) if err != nil { return err } @@ -271,23 +273,23 @@ func Open(path string, options ...option) (*Bitcask, error) { return nil, err } - fns, err := getDatafiles(path) + fns, err := internal.GetDatafiles(path) if err != nil { return nil, err } - ids, err := parseIds(fns) + ids, err := internal.ParseIds(fns) if err != nil { return nil, err } - var datafiles []*Datafile + var datafiles []*internal.Datafile - keydir := NewKeydir() + keydir := internal.NewKeydir() trie := trie.New() for i, fn := range fns { - df, err := NewDatafile(path, ids[i], true) + df, err := internal.NewDatafile(path, ids[i], true) if err != nil { return nil, err } @@ -300,7 +302,7 @@ func Open(path string, options ...option) (*Bitcask, error) { } defer f.Close() - hint, err := NewKeydirFromBytes(f) + hint, err := internal.NewKeydirFromBytes(f) if err != nil { return nil, err } @@ -337,7 +339,7 @@ func Open(path string, options ...option) (*Bitcask, error) { id = ids[(len(ids) - 1)] } - curr, err := NewDatafile(path, id, false) + curr, err := internal.NewDatafile(path, id, false) if err != nil { return nil, err } diff --git a/cmd/bitcask/root.go b/cmd/bitcask/root.go index 6fd1684..271e29f 100644 --- a/cmd/bitcask/root.go +++ b/cmd/bitcask/root.go @@ -8,13 +8,13 @@ import ( "github.com/spf13/cobra" "github.com/spf13/viper" - "github.com/prologic/bitcask" + "github.com/prologic/bitcask/internal" ) // RootCmd represents the base command when called without any subcommands var RootCmd = &cobra.Command{ Use: "bitcask", - Version: bitcask.FullVersion(), + Version: internal.FullVersion(), Short: "Command-line tools for bitcask", Long: `This is the command-line tool to interact with a bitcask database. diff --git a/cmd/bitcaskd/main.go b/cmd/bitcaskd/main.go index 4900a13..4a79d34 100644 --- a/cmd/bitcaskd/main.go +++ b/cmd/bitcaskd/main.go @@ -10,6 +10,7 @@ import ( "github.com/tidwall/redcon" "github.com/prologic/bitcask" + "github.com/prologic/bitcask/internal" ) var ( @@ -43,7 +44,7 @@ func main() { } if version { - fmt.Printf("bitcaskd version %s", bitcask.FullVersion()) + fmt.Printf("bitcaskd version %s", internal.FullVersion()) os.Exit(0) } @@ -60,7 +61,7 @@ func main() { os.Exit(1) } - log.WithField("bind", bind).WithField("path", path).Infof("starting bitcaskd v%s", bitcask.FullVersion()) + log.WithField("bind", bind).WithField("path", path).Infof("starting bitcaskd v%s", internal.FullVersion()) err = redcon.ListenAndServe(bind, func(conn redcon.Conn, cmd redcon.Command) { diff --git a/datafile.go b/internal/datafile.go similarity index 92% rename from datafile.go rename to internal/datafile.go index a0168f5..5d16785 100644 --- a/datafile.go +++ b/internal/datafile.go @@ -1,4 +1,4 @@ -package bitcask +package internal import ( "fmt" @@ -8,8 +8,8 @@ import ( "github.com/pkg/errors" - pb "github.com/prologic/bitcask/proto" - "github.com/prologic/bitcask/streampb" + pb "github.com/prologic/bitcask/internal/proto" + "github.com/prologic/bitcask/internal/streampb" ) const ( @@ -71,6 +71,10 @@ func NewDatafile(path string, id int, readonly bool) (*Datafile, error) { }, nil } +func (df *Datafile) FileID() int { + return df.id +} + func (df *Datafile) Name() string { return df.r.Name() } diff --git a/entry.go b/internal/entry.go similarity index 75% rename from entry.go rename to internal/entry.go index ad81d1d..8fa2292 100644 --- a/entry.go +++ b/internal/entry.go @@ -1,9 +1,9 @@ -package bitcask +package internal import ( "hash/crc32" - pb "github.com/prologic/bitcask/proto" + pb "github.com/prologic/bitcask/internal/proto" ) func NewEntry(key string, value []byte) pb.Entry { diff --git a/keydir.go b/internal/keydir.go similarity index 98% rename from keydir.go rename to internal/keydir.go index 308f951..31d41d9 100644 --- a/keydir.go +++ b/internal/keydir.go @@ -1,4 +1,4 @@ -package bitcask +package internal import ( "bytes" diff --git a/proto/doc.go b/internal/proto/doc.go similarity index 100% rename from proto/doc.go rename to internal/proto/doc.go diff --git a/proto/entry.pb.go b/internal/proto/entry.pb.go similarity index 100% rename from proto/entry.pb.go rename to internal/proto/entry.pb.go diff --git a/proto/entry.proto b/internal/proto/entry.proto similarity index 100% rename from proto/entry.proto rename to internal/proto/entry.proto diff --git a/streampb/stream.go b/internal/streampb/stream.go similarity index 100% rename from streampb/stream.go rename to internal/streampb/stream.go diff --git a/utils.go b/internal/utils.go similarity index 81% rename from utils.go rename to internal/utils.go index 4e086f2..f174715 100644 --- a/utils.go +++ b/internal/utils.go @@ -1,4 +1,4 @@ -package bitcask +package internal import ( "fmt" @@ -8,7 +8,7 @@ import ( "strings" ) -func getDatafiles(path string) ([]string, error) { +func GetDatafiles(path string) ([]string, error) { fns, err := filepath.Glob(fmt.Sprintf("%s/*.data", path)) if err != nil { return nil, err @@ -17,7 +17,7 @@ func getDatafiles(path string) ([]string, error) { return fns, nil } -func parseIds(fns []string) ([]int, error) { +func ParseIds(fns []string) ([]int, error) { var ids []int for _, fn := range fns { fn = filepath.Base(fn) diff --git a/version.go b/internal/version.go similarity index 94% rename from version.go rename to internal/version.go index d12297b..79a1bbf 100644 --- a/version.go +++ b/internal/version.go @@ -1,4 +1,4 @@ -package bitcask +package internal import ( "fmt" diff --git a/version_test.go b/internal/version_test.go similarity index 92% rename from version_test.go rename to internal/version_test.go index c263ffe..4d66e4e 100644 --- a/version_test.go +++ b/internal/version_test.go @@ -1,4 +1,4 @@ -package bitcask +package internal import ( "fmt"