Skip to content

Commit

Permalink
move find entry to segment
Browse files Browse the repository at this point in the history
  • Loading branch information
travisjeffery committed Oct 13, 2016
1 parent 93eca0a commit 7c3b7c7
Show file tree
Hide file tree
Showing 3 changed files with 17 additions and 18 deletions.
2 changes: 1 addition & 1 deletion commitlog/reader.go
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ func (r *Reader) Read(p []byte) (n int, err error) {

func (l *CommitLog) NewReader(offset int64) (r *Reader, err error) {
segment, idx := findSegment(l.segments, offset)
entry, _ := findEntry(segment, offset)
entry, _ := segment.findEntry(offset)
offset = int64(entry.Position)

if segment == nil {
Expand Down
16 changes: 15 additions & 1 deletion commitlog/segment.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import (
"io"
"os"
"path/filepath"
"sort"

"github.com/pkg/errors"
)
Expand Down Expand Up @@ -39,7 +40,8 @@ func NewSegment(path string, baseOffset int64, maxBytes int64) (*segment, error)

indexPath := filepath.Join(path, fmt.Sprintf(indexNameFormat, baseOffset))
index, err := newIndex(options{
path: indexPath,
path: indexPath,
baseOffset: baseOffset,
})
if err != nil {
return nil, err
Expand Down Expand Up @@ -106,3 +108,15 @@ func (s *segment) Close() error {
}
return s.index.Close()
}

func (s *segment) findEntry(offset int64) (e *entry, err error) {
e = &entry{}
idx := sort.Search(int(s.index.bytes/entryWidth), func(i int) bool {
_ = s.index.ReadEntry(e, int64(i*entryWidth))
return int64(e.Offset) > offset || e.Offset == 0
})
if idx == -1 {
return nil, errors.New("entry not found")
}
return e, nil
}
17 changes: 1 addition & 16 deletions commitlog/util.go
Original file line number Diff line number Diff line change
@@ -1,9 +1,6 @@
package commitlog

import (
"errors"
"sort"
)
import "sort"

func findSegment(segments []*segment, offset int64) (*segment, int) {
idx := sort.Search(len(segments), func(i int) bool {
Expand All @@ -16,15 +13,3 @@ func findSegment(segments []*segment, offset int64) (*segment, int) {

return segments[idx], idx
}

func findEntry(segment *segment, offset int64) (e *entry, err error) {
e = &entry{}
idx := sort.Search(int(segment.index.bytes/entryWidth), func(i int) bool {
_ = segment.index.ReadEntry(e, int64(i*entryWidth))
return int64(e.Offset) > offset || e.Offset == 0
})
if idx == -1 {
return nil, errors.New("entry not found")
}
return e, nil
}

0 comments on commit 7c3b7c7

Please sign in to comment.