mvcc/kvstore.go
func NewStore(lg *zap.Logger, b backend.Backend, le lease.Lessor, ig ConsistentIndexGetter) *store {
	s := &store{
		b:       b,
		ig:      ig,
		kvindex: newTreeIndex(lg),

		le: le,

		currentRev:     1,
		compactMainRev: -1,

		bytesBuf8: make([]byte, 8),
		fifoSched: schedule.NewFIFOScheduler(),

		stopc: make(chan struct{}),

		lg: lg,
	}
	s.ReadView = &readView{s}
	s.WriteView = &writeView{s}
	if s.le != nil {
		s.le.SetRangeDeleter(func() lease.TxnDelete { return s.Write() })
	}

	tx := s.b.BatchTx()
	tx.Lock()
	tx.UnsafeCreateBucket(keyBucketName)
	tx.UnsafeCreateBucket(metaBucketName)
	tx.Unlock()
	s.b.ForceCommit()

	s.mu.Lock()
	defer s.mu.Unlock()
	if err := s.restore(); err != nil {
		// TODO: return the error instead of panic here?
		panic("failed to recover store from backend")
	}

	return s
}
func NewStore(lg *zap.Logger, b backend.Backend, le lease.Lessor, ig ConsistentIndexGetter) *store {
	s := &store{
		b:       b,
		ig:      ig,
		kvindex: newTreeIndex(lg),

		le: le,

		currentRev:     1,
		compactMainRev: -1,

		bytesBuf8: make([]byte, 8),
		fifoSched: schedule.NewFIFOScheduler(),

		stopc: make(chan struct{}),

		lg: lg,
	}
	s.ReadView = &readView{s}
	s.WriteView = &writeView{s}
	if s.le != nil {
		s.le.SetRangeDeleter(func() lease.TxnDelete { return s.Write() })
	}

	tx := s.b.BatchTx()
	tx.Lock()
	tx.UnsafeCreateBucket(keyBucketName)
	tx.UnsafeCreateBucket(metaBucketName)
	tx.Unlock()
	s.b.ForceCommit()

	s.mu.Lock()
	defer s.mu.Unlock()
	if err := s.restore(); err != nil {
		// TODO: return the error instead of panic here?
		panic("failed to recover store from backend")
	}

	return s
}
func NewStore ( lg * zap . Logger , b backend . Backend , le lease . Lessor , ig ConsistentIndexGetter ) * store { s := & store { b : b , ig : ig , kvindex : newTreeIndex ( lg ) , le : le , currentRev : 1 , compactMainRev : - 1 , bytesBuf8 : make ( [ ] byte , 8 ) , fifoSched : schedule . NewFIFOScheduler ( ) , stopc : make ( chan struct { } ) , lg : lg , } s . ReadView = & readView { s } s . WriteView = & writeView { s } if s . le != nil { s . le . SetRangeDeleter ( func ( ) lease . TxnDelete { return s . Write ( ) } ) } tx := s . b . BatchTx ( ) tx . Lock ( ) tx . UnsafeCreateBucket ( keyBucketName ) tx . UnsafeCreateBucket ( metaBucketName ) tx . Unlock ( ) s . b . ForceCommit ( ) s . mu . Lock ( ) defer s . mu . Unlock ( ) if err := s . restore ( ) ; err != nil { // TODO: return the error instead of panic here? panic ( " " ) } return s }
// NewStore returns a new store. It is useful to create a store inside
// mvcc pkg. It should only be used for testing externally.
NewStore returns a new store . It is useful to create a store inside mvcc pkg . It should only be used for testing externally .