// Opens table. It returns a cache object, which should // be released after use. func (t *tOps) open(f *tFile) (c cache.Object, err error) { num := f.file.Num() c, ok := t.cacheNS.Get(num, func() (ok bool, value interface{}, charge int, fin cache.SetFin) { var r storage.Reader r, err = f.file.Open() if err != nil { return } o := t.s.o var cacheNS cache.Namespace if bc := o.GetBlockCache(); bc != nil { cacheNS = bc.GetNamespace(num) } ok = true value = table.NewReader(r, int64(f.size), cacheNS, o) charge = 1 fin = func() { r.Close() } return }) if !ok && err == nil { err = ErrClosed } return }
func (tc *stConstructor_Table) finish() (size int, err error) { err = tc.writer.Close() if err != nil { return } tc.t.Logf("table: contains %d entries and %d blocks", tc.writer.EntriesLen(), tc.writer.BlocksLen()) size = tc.buf.Len() if csize := int(tc.writer.BytesLen()); csize != size { tc.t.Errorf("table: invalid calculated size, calculated=%d actual=%d", csize, size) } tc.reader = table.NewReader(bytes.NewReader(tc.buf.Bytes()), int64(size), nil, tc.o) return }