func (le *lessor) initAndRecover() { tx := le.b.BatchTx() tx.Lock() tx.UnsafeCreateBucket(leaseBucketName) _, vs := tx.UnsafeRange(leaseBucketName, int64ToBytes(0), int64ToBytes(math.MaxInt64), 0) // TODO: copy vs and do decoding outside tx lock if lock contention becomes an issue. for i := range vs { var lpb leasepb.Lease err := lpb.Unmarshal(vs[i]) if err != nil { tx.Unlock() panic("failed to unmarshal lease proto item") } ID := LeaseID(lpb.ID) le.leaseMap[ID] = &Lease{ ID: ID, TTL: lpb.TTL, // itemSet will be filled in when recover key-value pairs // set expiry to forever, refresh when promoted itemSet: make(map[LeaseItem]struct{}), expiry: forever, } } tx.Unlock() le.b.ForceCommit() }
func (le *lessor) initAndRecover() { tx := le.b.BatchTx() tx.Lock() tx.UnsafeCreateBucket(leaseBucketName) _, vs := tx.UnsafeRange(leaseBucketName, int64ToBytes(0), int64ToBytes(math.MaxInt64), 0) // TODO: copy vs and do decoding outside tx lock if lock contention becomes an issue. for i := range vs { var lpb leasepb.Lease err := lpb.Unmarshal(vs[i]) if err != nil { tx.Unlock() panic("failed to unmarshal lease proto item") } id := LeaseID(lpb.ID) le.leaseMap[id] = &lease{ id: id, ttl: lpb.TTL, // itemSet will be filled in when recover key-value pairs expiry: minExpiry(time.Now(), time.Now().Add(time.Second*time.Duration(lpb.TTL))), } } tx.Unlock() le.b.ForceCommit() }