mirror of
https://github.com/featurebasedb/featurebase.git
synced 2026-08-28 10:54:59 +00:00
remove some calls to Field.saveMeta()
This commit is contained in:
parent
d639e228ae
commit
4e857e8de4
3 changed files with 9 additions and 132 deletions
65
field.go
65
field.go
|
|
@ -543,26 +543,6 @@ func (f *Field) Type() string {
|
|||
return f.options.Type
|
||||
}
|
||||
|
||||
// SetCacheSize sets the cache size for ranked fames. Persists to meta file on update.
|
||||
// defaults to DefaultCacheSize 50000
|
||||
func (f *Field) SetCacheSize(v uint32) error {
|
||||
f.mu.Lock()
|
||||
defer f.mu.Unlock()
|
||||
|
||||
// Ignore if no change occurred.
|
||||
if v == 0 || f.options.CacheSize == v {
|
||||
return nil
|
||||
}
|
||||
|
||||
// Persist meta data to disk on change.
|
||||
f.options.CacheSize = v
|
||||
if err := f.saveMeta(); err != nil {
|
||||
return errors.Wrap(err, "saving")
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// CacheSize returns the ranked field cache size.
|
||||
func (f *Field) CacheSize() uint32 {
|
||||
f.mu.RLock()
|
||||
|
|
@ -902,10 +882,7 @@ func (f *Field) applyOptions(opt FieldOptions) error {
|
|||
Scale: opt.Scale,
|
||||
BitDepth: opt.BitDepth,
|
||||
}
|
||||
// Validate bsiGroup.
|
||||
if err := bsig.validate(); err != nil {
|
||||
return err
|
||||
}
|
||||
// Validate and create bsiGroup.
|
||||
if err := f.createBSIGroup(bsig); err != nil {
|
||||
return errors.Wrap(err, "creating bsigroup")
|
||||
}
|
||||
|
|
@ -919,11 +896,11 @@ func (f *Field) applyOptions(opt FieldOptions) error {
|
|||
f.options.BitDepth = 0
|
||||
f.options.Keys = opt.Keys
|
||||
f.options.NoStandardView = opt.NoStandardView
|
||||
// Set the time quantum.
|
||||
if err := f.setTimeQuantum(opt.TimeQuantum); err != nil {
|
||||
f.Close()
|
||||
return errors.Wrap(err, "setting time quantum")
|
||||
// Validate the time quantum.
|
||||
if !opt.TimeQuantum.Valid() {
|
||||
return ErrInvalidTimeQuantum
|
||||
}
|
||||
f.options.TimeQuantum = opt.TimeQuantum
|
||||
f.options.ForeignIndex = opt.ForeignIndex
|
||||
case FieldTypeBool:
|
||||
f.options.Type = FieldTypeBool
|
||||
|
|
@ -1016,17 +993,6 @@ func (f *Field) createBSIGroup(bsig *bsiGroup) error {
|
|||
defer f.mu.Unlock()
|
||||
|
||||
// Append bsiGroup.
|
||||
if err := f.addBSIGroup(bsig); err != nil {
|
||||
return err
|
||||
}
|
||||
if err := f.saveMeta(); err != nil {
|
||||
return errors.Wrap(err, "saving")
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// addBSIGroup adds a single bsiGroup to bsiGroups.
|
||||
func (f *Field) addBSIGroup(bsig *bsiGroup) error {
|
||||
if err := bsig.validate(); err != nil {
|
||||
return errors.Wrap(err, "validating bsigroup")
|
||||
} else if f.hasBSIGroup(bsig.Name) {
|
||||
|
|
@ -1051,27 +1017,6 @@ func (f *Field) TimeQuantum() TimeQuantum {
|
|||
return f.options.TimeQuantum
|
||||
}
|
||||
|
||||
// setTimeQuantum sets the time quantum for the field.
|
||||
func (f *Field) setTimeQuantum(q TimeQuantum) error {
|
||||
f.mu.Lock()
|
||||
defer f.mu.Unlock()
|
||||
|
||||
// Validate input.
|
||||
if !q.Valid() {
|
||||
return ErrInvalidTimeQuantum
|
||||
}
|
||||
|
||||
// Update value on field.
|
||||
f.options.TimeQuantum = q
|
||||
|
||||
// Persist meta data to disk.
|
||||
if err := f.saveMeta(); err != nil {
|
||||
return errors.Wrap(err, "saving meta")
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// RowTime gets the row at the particular time with the granularity specified by
|
||||
// the quantum.
|
||||
func (f *Field) RowTime(tx Tx, rowID uint64, time time.Time, quantum string) (*Row, error) {
|
||||
|
|
|
|||
|
|
@ -297,13 +297,11 @@ func TestField_CreateViewIfNotExists(t *testing.T) {
|
|||
}
|
||||
|
||||
func TestField_SetTimeQuantum(t *testing.T) {
|
||||
f := OpenField(t, OptFieldTypeTime(TimeQuantum("")))
|
||||
f := OpenField(t, OptFieldTypeTime(TimeQuantum("YMDH")))
|
||||
defer f.Close()
|
||||
|
||||
// Set & retrieve time quantum.
|
||||
if err := f.setTimeQuantum(TimeQuantum("YMDH")); err != nil {
|
||||
t.Fatal(err)
|
||||
} else if q := f.TimeQuantum(); q != TimeQuantum("YMDH") {
|
||||
// Retrieve time quantum.
|
||||
if q := f.TimeQuantum(); q != TimeQuantum("YMDH") {
|
||||
t.Fatalf("unexpected quantum: %s", q)
|
||||
}
|
||||
|
||||
|
|
@ -316,17 +314,13 @@ func TestField_SetTimeQuantum(t *testing.T) {
|
|||
}
|
||||
|
||||
func TestField_RowTime(t *testing.T) {
|
||||
f := OpenField(t, OptFieldTypeTime(TimeQuantum("")))
|
||||
f := OpenField(t, OptFieldTypeTime(TimeQuantum("YMDH")))
|
||||
defer f.Close()
|
||||
|
||||
// Obtain transaction.
|
||||
tx := f.idx.holder.txf.NewTx(Txo{Write: writable, Index: f.idx, Field: f.Field, Shard: 0})
|
||||
defer tx.Rollback()
|
||||
|
||||
if err := f.setTimeQuantum(TimeQuantum("YMDH")); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
f.MustSetBit(tx, 1, 1, time.Date(2010, time.January, 5, 12, 0, 0, 0, time.UTC))
|
||||
f.MustSetBit(tx, 1, 2, time.Date(2011, time.January, 5, 12, 0, 0, 0, time.UTC))
|
||||
f.MustSetBit(tx, 1, 3, time.Date(2010, time.February, 5, 12, 0, 0, 0, time.UTC))
|
||||
|
|
|
|||
|
|
@ -15,72 +15,10 @@
|
|||
package test
|
||||
|
||||
import (
|
||||
"os"
|
||||
"testing"
|
||||
|
||||
"github.com/pilosa/pilosa/v2"
|
||||
"github.com/pilosa/pilosa/v2/testhook"
|
||||
)
|
||||
|
||||
// Field represents a test wrapper for pilosa.Field.
|
||||
type Field struct {
|
||||
*pilosa.Field
|
||||
}
|
||||
|
||||
// newField returns a new instance of Field.
|
||||
func newField(tb testing.TB, opts pilosa.FieldOption) *Field {
|
||||
path, err := testhook.TempDir(tb, "pilosa-field-")
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
// This path is probably wrong, but we don't care much because it's a scratch holder anyway.
|
||||
field, err := pilosa.NewField(pilosa.NewHolder(path, nil), path, "i", "f", opts)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
return &Field{Field: field}
|
||||
}
|
||||
|
||||
// mustOpenField returns a new, opened field at a temporary path. Panic on error.
|
||||
func mustOpenField(tb testing.TB, opts pilosa.FieldOption) *Field {
|
||||
f := newField(tb, opts)
|
||||
if err := f.Open(); err != nil {
|
||||
panic(err)
|
||||
}
|
||||
return f
|
||||
}
|
||||
|
||||
// close closes the field and removes the underlying data.
|
||||
func (f *Field) close() error { // nolint: unparam
|
||||
defer os.RemoveAll(f.Path())
|
||||
return f.Field.Close()
|
||||
}
|
||||
|
||||
// reopen closes the index and reopens it.
|
||||
func (f *Field) reopen() error {
|
||||
if err := f.Field.Close(); err != nil {
|
||||
return err
|
||||
}
|
||||
return f.Field.Open()
|
||||
}
|
||||
|
||||
// Ensure field can set its cache
|
||||
func TestField_SetCacheSize(t *testing.T) {
|
||||
f := mustOpenField(t, pilosa.OptFieldTypeDefault())
|
||||
defer f.close()
|
||||
cacheSize := uint32(100)
|
||||
|
||||
// Set & retrieve field cache size.
|
||||
if err := f.SetCacheSize(cacheSize); err != nil {
|
||||
t.Fatal(err)
|
||||
} else if q := f.CacheSize(); q != cacheSize {
|
||||
t.Fatalf("unexpected field cache size: %d", q)
|
||||
}
|
||||
|
||||
// Reload field and verify that it is persisted.
|
||||
if err := f.reopen(); err != nil {
|
||||
t.Fatal(err)
|
||||
} else if q := f.CacheSize(); q != cacheSize {
|
||||
t.Fatalf("unexpected field cache size (reopen): %d", q)
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue