From cff01f46c2890e0a5776793eb802381a49775124 Mon Sep 17 00:00:00 2001 From: Matt Jaffee Date: Mon, 2 Jul 2018 14:50:33 -0500 Subject: [PATCH] unexport fragment.go stuff --- executor.go | 2 +- field.go | 1 + fragment.go | 128 +++++++++++++++++++------------------- fragment_internal_test.go | 30 ++++----- holder.go | 4 +- test/fragment.go | 28 --------- view.go | 22 +++---- 7 files changed, 94 insertions(+), 121 deletions(-) delete mode 100644 test/fragment.go diff --git a/executor.go b/executor.go index 5b4e12351..f8a5d6a46 100644 --- a/executor.go +++ b/executor.go @@ -635,7 +635,7 @@ func (e *executor) executeTopNShard(ctx context.Context, index string, c *pql.Ca if tanimotoThreshold > 100 { return nil, errors.New("Tanimoto Threshold is from 1 to 100 only") } - return f.top(TopOptions{ + return f.top(topOptions{ N: int(n), Src: src, RowIDs: rowIDs, diff --git a/field.go b/field.go index 090e5926d..dc40c1074 100644 --- a/field.go +++ b/field.go @@ -670,6 +670,7 @@ func (f *Field) Row(rowID uint64) (*Row, error) { // ViewRow returns a row for a view and shard. // TODO: unexport this with views (it's only used in tests). +// TODO we need some blessed interface to get rows directly off of time fields. Field.RowTime(rowID, timestamp, quantum), maybe func (f *Field) ViewRow(viewName string, rowID uint64) (*Row, error) { view := f.view(viewName) if view == nil { diff --git a/fragment.go b/fragment.go index 30fb67fca..e25956474 100644 --- a/fragment.go +++ b/fragment.go @@ -63,8 +63,8 @@ const ( defaultFragmentMaxOpN = 2000 ) -// Fragment represents the intersection of a field and shard in an index. -type Fragment struct { +// fragment represents the intersection of a field and shard in an index. +type fragment struct { mu sync.RWMutex // Composite identifiers @@ -109,9 +109,9 @@ type Fragment struct { stats StatsClient } -// NewFragment returns a new instance of Fragment. -func NewFragment(path, index, field, view string, shard uint64) *Fragment { - return &Fragment{ +// newFragment returns a new instance of Fragment. +func newFragment(path, index, field, view string, shard uint64) *fragment { + return &fragment{ path: path, index: index, field: field, @@ -128,10 +128,10 @@ func NewFragment(path, index, field, view string, shard uint64) *Fragment { } // cachePath returns the path to the fragment's cache data. -func (f *Fragment) cachePath() string { return f.path + cacheExt } +func (f *fragment) cachePath() string { return f.path + cacheExt } // Open opens the underlying storage. -func (f *Fragment) Open() error { +func (f *fragment) Open() error { f.mu.Lock() defer f.mu.Unlock() @@ -164,7 +164,7 @@ func (f *Fragment) Open() error { } // openStorage opens the storage bitmap. -func (f *Fragment) openStorage() error { +func (f *fragment) openStorage() error { // Create a roaring bitmap to serve as storage for the shard. if f.storage == nil { f.storage = roaring.NewFileBitmap() @@ -224,7 +224,7 @@ func (f *Fragment) openStorage() error { } // openCache initializes the cache from row ids persisted to disk. -func (f *Fragment) openCache() error { +func (f *fragment) openCache() error { // Determine cache type from field name. switch f.CacheType { case CacheTypeRanked: @@ -266,13 +266,13 @@ func (f *Fragment) openCache() error { } // Close flushes the underlying storage, closes the file and unlocks it. -func (f *Fragment) Close() error { +func (f *fragment) Close() error { f.mu.Lock() defer f.mu.Unlock() return f.close() } -func (f *Fragment) close() error { +func (f *fragment) close() error { // Flush cache if closing gracefully. if err := f.flushCache(); err != nil { f.Logger.Printf("fragment: error flushing cache on close: err=%s, path=%s", err, f.path) @@ -291,7 +291,7 @@ func (f *Fragment) close() error { return nil } -func (f *Fragment) closeStorage() error { +func (f *fragment) closeStorage() error { // Clear the storage bitmap so it doesn't access the closed mmap. //f.storage = roaring.NewBitmap() @@ -321,13 +321,13 @@ func (f *Fragment) closeStorage() error { } // row returns a row by ID. -func (f *Fragment) row(rowID uint64) *Row { +func (f *fragment) row(rowID uint64) *Row { f.mu.Lock() defer f.mu.Unlock() return f.unprotectedRow(rowID, true, true) } -func (f *Fragment) unprotectedRow(rowID uint64, checkRowCache bool, updateRowCache bool) *Row { +func (f *fragment) unprotectedRow(rowID uint64, checkRowCache bool, updateRowCache bool) *Row { if checkRowCache { r, ok := f.rowCache.Fetch(rowID) if ok && r != nil { @@ -360,13 +360,13 @@ func (f *Fragment) unprotectedRow(rowID uint64, checkRowCache bool, updateRowCac // setBit sets a bit for a given column & row within the fragment. // This updates both the on-disk storage and the in-cache bitmap. -func (f *Fragment) setBit(rowID, columnID uint64) (changed bool, err error) { +func (f *fragment) setBit(rowID, columnID uint64) (changed bool, err error) { f.mu.Lock() defer f.mu.Unlock() return f.unprotectedSetBit(rowID, columnID) } -func (f *Fragment) unprotectedSetBit(rowID, columnID uint64) (changed bool, err error) { +func (f *fragment) unprotectedSetBit(rowID, columnID uint64) (changed bool, err error) { changed = false // Determine the position of the bit in the storage. pos, err := f.pos(rowID, columnID) @@ -412,13 +412,13 @@ func (f *Fragment) unprotectedSetBit(rowID, columnID uint64) (changed bool, err // clearBit clears a bit for a given column & row within the fragment. // This updates both the on-disk storage and the in-cache bitmap. -func (f *Fragment) clearBit(rowID, columnID uint64) (bool, error) { +func (f *fragment) clearBit(rowID, columnID uint64) (bool, error) { f.mu.Lock() defer f.mu.Unlock() return f.unprotectedClearBit(rowID, columnID) } -func (f *Fragment) unprotectedClearBit(rowID, columnID uint64) (changed bool, err error) { +func (f *fragment) unprotectedClearBit(rowID, columnID uint64) (changed bool, err error) { changed = false // Determine the position of the bit in the storage. pos, err := f.pos(rowID, columnID) @@ -456,7 +456,7 @@ func (f *Fragment) unprotectedClearBit(rowID, columnID uint64) (changed bool, er return changed, nil } -func (f *Fragment) bit(rowID, columnID uint64) (bool, error) { +func (f *fragment) bit(rowID, columnID uint64) (bool, error) { pos, err := f.pos(rowID, columnID) if err != nil { return false, err @@ -465,7 +465,7 @@ func (f *Fragment) bit(rowID, columnID uint64) (bool, error) { } // value uses a column of bits to read a multi-bit value. -func (f *Fragment) value(columnID uint64, bitDepth uint) (value uint64, exists bool, err error) { +func (f *fragment) value(columnID uint64, bitDepth uint) (value uint64, exists bool, err error) { f.mu.Lock() defer f.mu.Unlock() @@ -489,7 +489,7 @@ func (f *Fragment) value(columnID uint64, bitDepth uint) (value uint64, exists b } // setValue uses a column of bits to set a multi-bit value. -func (f *Fragment) setValue(columnID uint64, bitDepth uint, value uint64) (changed bool, err error) { +func (f *fragment) setValue(columnID uint64, bitDepth uint, value uint64) (changed bool, err error) { f.mu.Lock() defer f.mu.Unlock() @@ -520,7 +520,7 @@ func (f *Fragment) setValue(columnID uint64, bitDepth uint, value uint64) (chang } // importSetValue is a more efficient SetValue just for imports. -func (f *Fragment) importSetValue(columnID uint64, bitDepth uint, value uint64) (changed bool, err error) { +func (f *fragment) importSetValue(columnID uint64, bitDepth uint, value uint64) (changed bool, err error) { for i := uint(0); i < bitDepth; i++ { if value&(1<= minColumnID+ShardWidth { @@ -847,7 +847,7 @@ func (f *Fragment) pos(rowID, columnID uint64) (uint64, error) { // forEachBit executes fn for every bit set in the fragment. // Errors returned from fn are passed through. -func (f *Fragment) forEachBit(fn func(rowID, columnID uint64) error) error { +func (f *fragment) forEachBit(fn func(rowID, columnID uint64) error) error { f.mu.Lock() defer f.mu.Unlock() @@ -867,7 +867,7 @@ func (f *Fragment) forEachBit(fn func(rowID, columnID uint64) error) error { // top returns the top rows from the fragment. // If opt.Src is specified then only rows which intersect src are returned. // If opt.FilterValues exist then the row attribute specified by field is matched. -func (f *Fragment) top(opt TopOptions) ([]Pair, error) { +func (f *fragment) top(opt topOptions) ([]Pair, error) { // Retrieve pairs. If no row ids specified then return from cache. pairs := f.topBitmapPairs(opt.RowIDs) @@ -1001,7 +1001,7 @@ func (f *Fragment) top(opt TopOptions) ([]Pair, error) { return r, nil } -func (f *Fragment) topBitmapPairs(rowIDs []uint64) []BitmapPair { +func (f *fragment) topBitmapPairs(rowIDs []uint64) []BitmapPair { // Don't retrieve from storage if CacheTypeNone. if f.CacheType == CacheTypeNone { return f.cache.Top() @@ -1039,8 +1039,8 @@ func (f *Fragment) topBitmapPairs(rowIDs []uint64) []BitmapPair { return pairs } -// TopOptions represents options passed into the Top() function. -type TopOptions struct { +// topOptions represents options passed into the Top() function. +type topOptions struct { // Number of rows to return. N int @@ -1059,7 +1059,7 @@ type TopOptions struct { // Checksum returns a checksum for the entire fragment. // If two fragments have the same checksum then they have the same data. -func (f *Fragment) Checksum() []byte { +func (f *fragment) Checksum() []byte { h := xxhash.New() for _, block := range f.Blocks() { h.Write(block.Checksum) @@ -1068,14 +1068,14 @@ func (f *Fragment) Checksum() []byte { } // InvalidateChecksums clears all cached block checksums. -func (f *Fragment) InvalidateChecksums() { +func (f *fragment) InvalidateChecksums() { f.mu.Lock() f.checksums = make(map[int][]byte) f.mu.Unlock() } // Blocks returns info for all blocks containing data. -func (f *Fragment) Blocks() []FragmentBlock { +func (f *fragment) Blocks() []FragmentBlock { f.mu.Lock() defer f.mu.Unlock() @@ -1141,7 +1141,7 @@ func (f *Fragment) Blocks() []FragmentBlock { } // readContiguousChecksums appends multiple checksums in a row and returns the count added. -func (f *Fragment) readContiguousChecksums(a *[]FragmentBlock, blockID int) (n int) { +func (f *fragment) readContiguousChecksums(a *[]FragmentBlock, blockID int) (n int) { for i := 0; ; i++ { chksum := f.checksums[blockID+i] if chksum == nil { @@ -1156,7 +1156,7 @@ func (f *Fragment) readContiguousChecksums(a *[]FragmentBlock, blockID int) (n i } // blockData returns bits in a block as row & column ID pairs. -func (f *Fragment) blockData(id int) (rowIDs, columnIDs []uint64) { +func (f *fragment) blockData(id int) (rowIDs, columnIDs []uint64) { f.mu.Lock() defer f.mu.Unlock() @@ -1173,7 +1173,7 @@ func (f *Fragment) blockData(id int) (rowIDs, columnIDs []uint64) { // For example, if 3 blocks are compared and two have a set bit and one has a // cleared bit then the bit is considered cleared. The function returns the // diff per incoming block so that all can be in sync. -func (f *Fragment) mergeBlock(id int, data []pairSet) (sets, clears []pairSet, err error) { +func (f *fragment) mergeBlock(id int, data []pairSet) (sets, clears []pairSet, err error) { // Ensure that all pair sets are of equal length. for i := range data { if len(data[i].rowIDs) != len(data[i].columnIDs) { @@ -1295,7 +1295,7 @@ func (f *Fragment) mergeBlock(id int, data []pairSet) (sets, clears []pairSet, e // bulkImport bulk imports a set of bits and then snapshots the storage. // This does not affect the fragment's cache. -func (f *Fragment) bulkImport(rowIDs, columnIDs []uint64) error { +func (f *fragment) bulkImport(rowIDs, columnIDs []uint64) error { f.mu.Lock() defer f.mu.Unlock() // Verify that there are an equal number of row ids and column ids. @@ -1364,7 +1364,7 @@ func (f *Fragment) bulkImport(rowIDs, columnIDs []uint64) error { } // importValue bulk imports a set of range-encoded values. -func (f *Fragment) importValue(columnIDs, values []uint64, bitDepth uint) error { +func (f *fragment) importValue(columnIDs, values []uint64, bitDepth uint) error { f.mu.Lock() defer f.mu.Unlock() // Verify that there are an equal number of column ids and values. @@ -1398,7 +1398,7 @@ func (f *Fragment) importValue(columnIDs, values []uint64, bitDepth uint) error // incrementOpN increase the operation count by one. // If the count exceeds the maximum allowed then a snapshot is performed. -func (f *Fragment) incrementOpN() error { +func (f *fragment) incrementOpN() error { f.opN++ if f.opN <= f.MaxOpN { return nil @@ -1411,7 +1411,7 @@ func (f *Fragment) incrementOpN() error { } // Snapshot writes the storage bitmap to disk and reopens it. -func (f *Fragment) Snapshot() error { +func (f *fragment) Snapshot() error { f.mu.Lock() defer f.mu.Unlock() return f.snapshot() @@ -1422,7 +1422,7 @@ func track(start time.Time, message string, stats StatsClient, logger Logger) { stats.Histogram("snapshot", elapsed.Seconds(), 1.0) } -func (f *Fragment) snapshot() error { +func (f *fragment) snapshot() error { f.Logger.Printf("fragment: snapshotting %s/%s/%s/%d", f.index, f.field, f.view, f.shard) completeMessage := fmt.Sprintf("fragment: snapshot complete %s/%s/%s/%d", f.index, f.field, f.view, f.shard) start := time.Now() @@ -1468,20 +1468,20 @@ func (f *Fragment) snapshot() error { } // RecalculateCache rebuilds the cache regardless of invalidate time delay. -func (f *Fragment) RecalculateCache() { +func (f *fragment) RecalculateCache() { f.mu.Lock() f.cache.Recalculate() f.mu.Unlock() } // FlushCache writes the cache data to disk. -func (f *Fragment) FlushCache() error { +func (f *fragment) FlushCache() error { f.mu.Lock() defer f.mu.Unlock() return f.flushCache() } -func (f *Fragment) flushCache() error { +func (f *fragment) flushCache() error { if f.cache == nil { return nil } @@ -1508,7 +1508,7 @@ func (f *Fragment) flushCache() error { } // WriteTo writes the fragment's data to w. -func (f *Fragment) WriteTo(w io.Writer) (n int64, err error) { +func (f *fragment) WriteTo(w io.Writer) (n int64, err error) { // Force cache flush. if err := f.FlushCache(); err != nil { return 0, errors.Wrap(err, "flushing cache") @@ -1525,7 +1525,7 @@ func (f *Fragment) WriteTo(w io.Writer) (n int64, err error) { return 0, nil } -func (f *Fragment) writeStorageToArchive(tw *tar.Writer) error { +func (f *fragment) writeStorageToArchive(tw *tar.Writer) error { // Open separate file descriptor to read from. file, err := os.Open(f.path) if err != nil { @@ -1569,7 +1569,7 @@ func (f *Fragment) writeStorageToArchive(tw *tar.Writer) error { return nil } -func (f *Fragment) writeCacheToArchive(tw *tar.Writer) error { +func (f *fragment) writeCacheToArchive(tw *tar.Writer) error { f.mu.Lock() defer f.mu.Unlock() @@ -1599,7 +1599,7 @@ func (f *Fragment) writeCacheToArchive(tw *tar.Writer) error { } // ReadFrom reads a data file from r and loads it into the fragment. -func (f *Fragment) ReadFrom(r io.Reader) (n int64, err error) { +func (f *fragment) ReadFrom(r io.Reader) (n int64, err error) { f.mu.Lock() defer f.mu.Unlock() @@ -1631,7 +1631,7 @@ func (f *Fragment) ReadFrom(r io.Reader) (n int64, err error) { return 0, nil } -func (f *Fragment) readStorageFromArchive(r io.Reader) error { +func (f *fragment) readStorageFromArchive(r io.Reader) error { // Create a temporary file to copy into. path := f.path + copyExt file, err := os.Create(path) @@ -1663,7 +1663,7 @@ func (f *Fragment) readStorageFromArchive(r io.Reader) error { return nil } -func (f *Fragment) readCacheFromArchive(r io.Reader) error { +func (f *fragment) readCacheFromArchive(r io.Reader) error { // Slurp data from reader and write to disk. buf, err := ioutil.ReadAll(r) if err != nil { @@ -1712,9 +1712,9 @@ func (h *blockHasher) WriteValue(v uint64) { h.hash.Write(h.buf[:]) } -// FragmentSyncer syncs a local fragment to one on a remote host. -type FragmentSyncer struct { - Fragment *Fragment +// fragmentSyncer syncs a local fragment to one on a remote host. +type fragmentSyncer struct { + Fragment *fragment Node *Node Cluster *cluster @@ -1723,7 +1723,7 @@ type FragmentSyncer struct { } // isClosing returns true if the closing channel is closed. -func (s *FragmentSyncer) isClosing() bool { +func (s *fragmentSyncer) isClosing() bool { select { case <-s.Closing: return true @@ -1734,7 +1734,7 @@ func (s *FragmentSyncer) isClosing() bool { // syncFragment compares checksums for the local and remote fragments and // then merges any blocks which have differences. -func (s *FragmentSyncer) syncFragment() error { +func (s *fragmentSyncer) syncFragment() error { // Determine replica set. nodes := s.Cluster.shardNodes(s.Fragment.index, s.Fragment.shard) if len(nodes) == 1 { @@ -1811,7 +1811,7 @@ func (s *FragmentSyncer) syncFragment() error { // syncBlock sends and receives all rows for a given block. // Returns an error if any remote hosts are unreachable. -func (s *FragmentSyncer) syncBlock(id int) error { +func (s *fragmentSyncer) syncBlock(id int) error { f := s.Fragment // Read pairs from each remote block. diff --git a/fragment_internal_test.go b/fragment_internal_test.go index c73889698..601cc57ff 100644 --- a/fragment_internal_test.go +++ b/fragment_internal_test.go @@ -591,7 +591,7 @@ func TestFragment_Top(t *testing.T) { f.RecalculateCache() // Retrieve top rows. - if pairs, err := f.top(TopOptions{N: 2}); err != nil { + if pairs, err := f.top(topOptions{N: 2}); err != nil { t.Fatal(err) } else if len(pairs) != 2 { t.Fatalf("unexpected count: %d", len(pairs)) @@ -617,7 +617,7 @@ func TestFragment_Top_Filter(t *testing.T) { f.RowAttrStore.SetAttrs(102, map[string]interface{}{"x": int64(20)}) // Retrieve top rows. - if pairs, err := f.top(TopOptions{ + if pairs, err := f.top(topOptions{ N: 2, FilterName: "x", FilterValues: []interface{}{int64(10), int64(15), int64(20)}, @@ -648,7 +648,7 @@ func TestFragment_TopN_Intersect(t *testing.T) { f.RecalculateCache() // Retrieve top rows. - if pairs, err := f.top(TopOptions{N: 3, Src: src}); err != nil { + if pairs, err := f.top(topOptions{N: 3, Src: src}); err != nil { t.Fatal(err) } else if !reflect.DeepEqual(pairs, []Pair{ {ID: 101, Count: 3}, @@ -683,7 +683,7 @@ func TestFragment_TopN_Intersect_Large(t *testing.T) { f.RecalculateCache() // Retrieve top rows. - if pairs, err := f.top(TopOptions{N: 10, Src: src}); err != nil { + if pairs, err := f.top(topOptions{N: 10, Src: src}); err != nil { t.Fatal(err) } else if !reflect.DeepEqual(pairs, []Pair{ {ID: 999, Count: 19}, @@ -712,7 +712,7 @@ func TestFragment_TopN_IDs(t *testing.T) { f.mustSetBits(102, 8, 9, 10, 11, 12) // Retrieve top rows. - if pairs, err := f.top(TopOptions{RowIDs: []uint64{100, 101, 200}}); err != nil { + if pairs, err := f.top(topOptions{RowIDs: []uint64{100, 101, 200}}); err != nil { t.Fatal(err) } else if !reflect.DeepEqual(pairs, []Pair{ {ID: 101, Count: 4}, @@ -733,7 +733,7 @@ func TestFragment_TopN_NopCache(t *testing.T) { f.mustSetBits(102, 8, 9, 10, 11, 12) // Retrieve top rows. - if pairs, err := f.top(TopOptions{RowIDs: []uint64{100, 101, 200}}); err != nil { + if pairs, err := f.top(topOptions{RowIDs: []uint64{100, 101, 200}}); err != nil { t.Fatal(err) } else if !reflect.DeepEqual(pairs, []Pair{}) { t.Fatalf("unexpected pairs: %s", spew.Sdump(pairs)) @@ -792,7 +792,7 @@ func TestFragment_TopN_CacheSize(t *testing.T) { } // Retrieve top rows. - if pairs, err := f.top(TopOptions{N: 5}); err != nil { + if pairs, err := f.top(topOptions{N: 5}); err != nil { t.Fatal(err) } else if len(pairs) > int(cacheSize) { t.Fatalf("TopN count cannot exceed cache size: %d", cacheSize) @@ -1023,7 +1023,7 @@ func BenchmarkFragment_Blocks(b *testing.B) { } // Open the fragment specified by the path. - f := NewFragment(*FragmentPath, "i", "f", ViewStandard, 0) + f := newFragment(*FragmentPath, "i", "f", ViewStandard, 0) if err := f.Open(); err != nil { b.Fatal(err) } @@ -1081,7 +1081,7 @@ func TestFragment_Tanimoto(t *testing.T) { f.mustSetBits(102, 1, 2, 10, 12) f.RecalculateCache() - if pairs, err := f.top(TopOptions{TanimotoThreshold: 50, Src: src}); err != nil { + if pairs, err := f.top(topOptions{TanimotoThreshold: 50, Src: src}); err != nil { t.Fatal(err) } else if len(pairs) != 2 { t.Fatalf("unexpected count: %d", len(pairs)) @@ -1104,7 +1104,7 @@ func TestFragment_Zero_Tanimoto(t *testing.T) { f.mustSetBits(102, 1, 2, 10, 12) f.RecalculateCache() - if pairs, err := f.top(TopOptions{TanimotoThreshold: 0, Src: src}); err != nil { + if pairs, err := f.top(topOptions{TanimotoThreshold: 0, Src: src}); err != nil { t.Fatal(err) } else if len(pairs) != 3 { t.Fatalf("unexpected count: %d", len(pairs)) @@ -1150,7 +1150,7 @@ func BenchmarkFragment_Snapshot(b *testing.B) { b.ReportAllocs() // Open the fragment specified by the path. - f := NewFragment(*FragmentPath, "i", "f", ViewStandard, 0) + f := newFragment(*FragmentPath, "i", "f", ViewStandard, 0) if err := f.Open(); err != nil { b.Fatal(err) } @@ -1237,7 +1237,7 @@ func BenchmarkFragment_Import(b *testing.B) { ///////////////////////////////////////////////////////////////////// // mustOpenFragment returns a new instance of Fragment with a temporary path. -func mustOpenFragment(index, field, view string, shard uint64, cacheType string) *Fragment { +func mustOpenFragment(index, field, view string, shard uint64, cacheType string) *fragment { file, err := ioutil.TempFile("", "pilosa-fragment-") if err != nil { panic(err) @@ -1248,7 +1248,7 @@ func mustOpenFragment(index, field, view string, shard uint64, cacheType string) cacheType = DefaultCacheType } - f := NewFragment(file.Name(), index, field, view, shard) + f := newFragment(file.Name(), index, field, view, shard) f.CacheType = cacheType f.RowAttrStore = newMemAttrStore() @@ -1259,7 +1259,7 @@ func mustOpenFragment(index, field, view string, shard uint64, cacheType string) } // Reopen closes the fragment and reopens it as a new instance. -func (f *Fragment) reopen() error { +func (f *fragment) reopen() error { if err := f.Close(); err != nil { return err } @@ -1271,7 +1271,7 @@ func (f *Fragment) reopen() error { // mustSetBits sets columns on a row. Panic on error. // This function does not accept a timestamp or quantum. -func (f *Fragment) mustSetBits(rowID uint64, columnIDs ...uint64) { +func (f *fragment) mustSetBits(rowID uint64, columnIDs ...uint64) { for _, columnID := range columnIDs { if _, err := f.setBit(rowID, columnID); err != nil { panic(err) diff --git a/holder.go b/holder.go index 8cf830a84..1f4c88c23 100644 --- a/holder.go +++ b/holder.go @@ -412,7 +412,7 @@ func (h *Holder) view(index, field, name string) *View { } // fragment returns the fragment for an index, field & shard. -func (h *Holder) fragment(index, field, view string, shard uint64) *Fragment { +func (h *Holder) fragment(index, field, view string, shard uint64) *fragment { v := h.view(index, field, view) if v == nil { return nil @@ -760,7 +760,7 @@ func (s *holderSyncer) syncFragment(index, field, view string, shard uint64) err } // Sync fragments together. - fs := FragmentSyncer{ + fs := fragmentSyncer{ Fragment: frag, Node: s.Node, Cluster: s.Cluster, diff --git a/test/fragment.go b/test/fragment.go deleted file mode 100644 index 90d2fa291..000000000 --- a/test/fragment.go +++ /dev/null @@ -1,28 +0,0 @@ -// Copyright 2017 Pilosa Corp. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package test - -import ( - "github.com/pilosa/pilosa" -) - -// ShardWidth is a helper reference to use when testing. -const ShardWidth = pilosa.ShardWidth - -// Fragment is a test wrapper for pilosa.Fragment. -type Fragment struct { - *pilosa.Fragment - RowAttrStore pilosa.AttrStore -} diff --git a/view.go b/view.go index c2ee45ea8..0f3deaa7f 100644 --- a/view.go +++ b/view.go @@ -46,7 +46,7 @@ type View struct { // Fragments by shard. cacheType string // passed in by field - fragments map[uint64]*Fragment + fragments map[uint64]*fragment // maxShard maintains this view's max shard in order to // prevent sending multiple `CreateShardMessage` messages @@ -68,7 +68,7 @@ func NewView(path, index, field, name string, cacheSize uint32) *View { cacheSize: cacheSize, cacheType: DefaultCacheType, - fragments: make(map[uint64]*Fragment), + fragments: make(map[uint64]*fragment), broadcaster: NopBroadcaster, stats: NopStatsClient, @@ -153,7 +153,7 @@ func (v *View) close() error { return errors.Wrap(err, "closing fragment") } } - v.fragments = make(map[uint64]*Fragment) + v.fragments = make(map[uint64]*fragment) return nil } @@ -179,20 +179,20 @@ func (v *View) fragmentPath(shard uint64) string { } // Fragment returns a fragment in the view by shard. -func (v *View) Fragment(shard uint64) *Fragment { +func (v *View) Fragment(shard uint64) *fragment { v.mu.RLock() defer v.mu.RUnlock() return v.fragment(shard) } -func (v *View) fragment(shard uint64) *Fragment { return v.fragments[shard] } +func (v *View) fragment(shard uint64) *fragment { return v.fragments[shard] } // allFragments returns a list of all fragments in the view. -func (v *View) allFragments() []*Fragment { +func (v *View) allFragments() []*fragment { v.mu.Lock() defer v.mu.Unlock() - other := make([]*Fragment, 0, len(v.fragments)) + other := make([]*fragment, 0, len(v.fragments)) for _, fragment := range v.fragments { other = append(other, fragment) } @@ -207,13 +207,13 @@ func (v *View) recalculateCaches() { } // CreateFragmentIfNotExists returns a fragment in the view by shard. -func (v *View) CreateFragmentIfNotExists(shard uint64) (*Fragment, error) { +func (v *View) CreateFragmentIfNotExists(shard uint64) (*fragment, error) { v.mu.Lock() defer v.mu.Unlock() return v.createFragmentIfNotExists(shard) } -func (v *View) createFragmentIfNotExists(shard uint64) (*Fragment, error) { +func (v *View) createFragmentIfNotExists(shard uint64) (*fragment, error) { // Find fragment in cache first. if frag := v.fragments[shard]; frag != nil { return frag, nil @@ -246,8 +246,8 @@ func (v *View) createFragmentIfNotExists(shard uint64) (*Fragment, error) { return frag, nil } -func (v *View) newFragment(path string, shard uint64) *Fragment { - frag := NewFragment(path, v.index, v.field, v.name, shard) +func (v *View) newFragment(path string, shard uint64) *fragment { + frag := newFragment(path, v.index, v.field, v.name, shard) frag.CacheType = v.cacheType frag.CacheSize = v.cacheSize frag.Logger = v.Logger