package tsm1 import ( "github.com/influxdata/influxdb/tsdb" ) {{range .}} // Read{{.Name}}BlockAt returns the {{.name}} values corresponding to the given index entry. func (t *TSMReader) Read{{.Name}}BlockAt(entry *IndexEntry, vals *[]{{.Name}}Value) ([]{{.Name}}Value, error) { t.mu.RLock() v, err := t.accessor.read{{.Name}}Block(entry, vals) t.mu.RUnlock() return v, err } // Read{{.Name}}ArrayBlockAt fills vals with the {{.name}} values corresponding to the given index entry. func (t *TSMReader) Read{{.Name}}ArrayBlockAt(entry *IndexEntry, vals *tsdb.{{.Name}}Array) error { t.mu.RLock() err := t.accessor.read{{.Name}}ArrayBlock(entry, vals) t.mu.RUnlock() return err } {{end}} // blockAccessor abstracts a method of accessing blocks from a // TSM file. type blockAccessor interface { init() (*indirectIndex, error) read(key []byte, timestamp int64) ([]Value, error) readAll(key []byte) ([]Value, error) readBlock(entry *IndexEntry, values []Value) ([]Value, error) {{- range .}} read{{.Name}}Block(entry *IndexEntry, values *[]{{.Name}}Value) ([]{{.Name}}Value, error) read{{.Name}}ArrayBlock(entry *IndexEntry, values *tsdb.{{.Name}}Array) error {{- end}} readBytes(entry *IndexEntry, buf []byte) (uint32, []byte, error) rename(path string) error path() string close() error free() error } {{range .}} func (m *mmapAccessor) read{{.Name}}Block(entry *IndexEntry, values *[]{{.Name}}Value) ([]{{.Name}}Value, error) { m.incAccess() m.mu.RLock() if int64(len(m.b)) < entry.Offset+int64(entry.Size) { m.mu.RUnlock() return nil, ErrTSMClosed } a, err := Decode{{.Name}}Block(m.b[entry.Offset+4:entry.Offset+int64(entry.Size)], values) m.mu.RUnlock() if err != nil { return nil, err } return a, nil } func (m *mmapAccessor) read{{.Name}}ArrayBlock(entry *IndexEntry, values *tsdb.{{.Name}}Array) error { m.incAccess() m.mu.RLock() if int64(len(m.b)) < entry.Offset+int64(entry.Size) { m.mu.RUnlock() return ErrTSMClosed } err := Decode{{.Name}}ArrayBlock(m.b[entry.Offset+4:entry.Offset+int64(entry.Size)], values) m.mu.RUnlock() return err } {{end}}