Skip to content

Commit

Permalink
replace meta with RegionInfo
Browse files Browse the repository at this point in the history
  • Loading branch information
rleungx committed Sep 27, 2019
1 parent b36b2f8 commit 93d49b7
Show file tree
Hide file tree
Showing 9 changed files with 117 additions and 129 deletions.
12 changes: 6 additions & 6 deletions server/cluster.go
Original file line number Diff line number Diff line change
Expand Up @@ -331,7 +331,7 @@ func (c *RaftCluster) processRegionHeartbeat(region *core.RegionInfo) error {
for _, item := range c.core.GetOverlaps(region) {
if region.GetRegionEpoch().GetVersion() < item.GetRegionEpoch().GetVersion() {
c.RUnlock()
return ErrRegionIsStale(region.GetMeta(), item)
return ErrRegionIsStale(region.GetMeta(), item.GetMeta())
}
}
}
Expand Down Expand Up @@ -438,19 +438,19 @@ func (c *RaftCluster) processRegionHeartbeat(region *core.RegionInfo) error {
overlaps := c.core.PutRegion(region)
if c.storage != nil {
for _, item := range overlaps {
if err := c.storage.DeleteRegion(item); err != nil {
if err := c.storage.DeleteRegion(item.GetMeta()); err != nil {
log.Error("failed to delete region from storage",
zap.Uint64("region-id", item.GetId()),
zap.Stringer("region-meta", core.RegionToHexMeta(item)),
zap.Uint64("region-id", item.GetID()),
zap.Stringer("region-meta", core.RegionToHexMeta(item.GetMeta())),
zap.Error(err))
}
}
}
for _, item := range overlaps {
if c.regionStats != nil {
c.regionStats.ClearDefunctRegion(item.GetId())
c.regionStats.ClearDefunctRegion(item.GetID())
}
c.labelLevelStats.ClearDefunctRegion(item.GetId(), c.GetLocationLabels())
c.labelLevelStats.ClearDefunctRegion(item.GetID(), c.GetLocationLabels())
}

// Update related stores.
Expand Down
45 changes: 17 additions & 28 deletions server/cluster_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -1245,11 +1245,9 @@ func (s *testClusterInfoSuite) TestRegionHeartbeat(c *C) {
}
}

func heartbeatRegions(c *C, cluster *RaftCluster, regions []*metapb.Region) {
func heartbeatRegions(c *C, cluster *RaftCluster, regions []*core.RegionInfo) {
// Heartbeat and check region one by one.
for _, region := range regions {
r := core.NewRegionInfo(region, nil)

for _, r := range regions {
c.Assert(cluster.processRegionHeartbeat(r), IsNil)

checkRegion(c, cluster.GetRegion(r.GetID()), r)
Expand All @@ -1262,9 +1260,7 @@ func heartbeatRegions(c *C, cluster *RaftCluster, regions []*metapb.Region) {
}

// Check all regions after handling all heartbeats.
for _, region := range regions {
r := core.NewRegionInfo(region, nil)

for _, r := range regions {
checkRegion(c, cluster.GetRegion(r.GetID()), r)
checkRegion(c, cluster.GetRegionInfoByKey(r.GetStartKey()), r)

Expand Down Expand Up @@ -1321,14 +1317,7 @@ func (s *testClusterInfoSuite) TestRegionSplitAndMerge(c *C) {
c.Assert(err, IsNil)
cluster := createTestRaftCluster(mockid.NewIDAllocator(), opt, core.NewStorage(kv.NewMemoryKV()))

regions := []*metapb.Region{
{
Id: 1,
StartKey: []byte{},
EndKey: []byte{},
RegionEpoch: &metapb.RegionEpoch{},
},
}
regions := []*core.RegionInfo{core.NewTestRegionInfo([]byte{}, []byte{})}

// Byte will underflow/overflow if n > 7.
n := 7
Expand Down Expand Up @@ -1403,25 +1392,25 @@ type testClusterUtilSuite struct{}

func (s *testClusterUtilSuite) TestCheckStaleRegion(c *C) {
// (0, 0) v.s. (0, 0)
region := core.NewRegion([]byte{}, []byte{})
origin := core.NewRegion([]byte{}, []byte{})
c.Assert(checkStaleRegion(region, origin), IsNil)
c.Assert(checkStaleRegion(origin, region), IsNil)
region := core.NewTestRegionInfo([]byte{}, []byte{})
origin := core.NewTestRegionInfo([]byte{}, []byte{})
c.Assert(checkStaleRegion(region.GetMeta(), origin.GetMeta()), IsNil)
c.Assert(checkStaleRegion(origin.GetMeta(), region.GetMeta()), IsNil)

// (1, 0) v.s. (0, 0)
region.RegionEpoch.Version++
c.Assert(checkStaleRegion(origin, region), IsNil)
c.Assert(checkStaleRegion(region, origin), NotNil)
region.GetRegionEpoch().Version++
c.Assert(checkStaleRegion(origin.GetMeta(), region.GetMeta()), IsNil)
c.Assert(checkStaleRegion(region.GetMeta(), origin.GetMeta()), NotNil)

// (1, 1) v.s. (0, 0)
region.RegionEpoch.ConfVer++
c.Assert(checkStaleRegion(origin, region), IsNil)
c.Assert(checkStaleRegion(region, origin), NotNil)
region.GetRegionEpoch().ConfVer++
c.Assert(checkStaleRegion(origin.GetMeta(), region.GetMeta()), IsNil)
c.Assert(checkStaleRegion(region.GetMeta(), origin.GetMeta()), NotNil)

// (0, 1) v.s. (0, 0)
region.RegionEpoch.Version--
c.Assert(checkStaleRegion(origin, region), IsNil)
c.Assert(checkStaleRegion(region, origin), NotNil)
region.GetRegionEpoch().Version--
c.Assert(checkStaleRegion(origin.GetMeta(), region.GetMeta()), IsNil)
c.Assert(checkStaleRegion(region.GetMeta(), origin.GetMeta()), NotNil)
}

func mustSaveStores(c *C, s *core.Storage, n int) []*metapb.Store {
Expand Down
4 changes: 2 additions & 2 deletions server/core/basic_cluster.go
Original file line number Diff line number Diff line change
Expand Up @@ -257,7 +257,7 @@ func (bc *BasicCluster) TakeStore(storeID uint64) *StoreInfo {
}

// PutRegion put a region.
func (bc *BasicCluster) PutRegion(region *RegionInfo) []*metapb.Region {
func (bc *BasicCluster) PutRegion(region *RegionInfo) []*RegionInfo {
bc.Lock()
defer bc.Unlock()
return bc.Regions.SetRegion(region)
Expand Down Expand Up @@ -293,7 +293,7 @@ func (bc *BasicCluster) ScanRange(startKey, endKey []byte, limit int) []*RegionI
}

// GetOverlaps returns the regions which are overlapped with the specified region range.
func (bc *BasicCluster) GetOverlaps(region *RegionInfo) []*metapb.Region {
func (bc *BasicCluster) GetOverlaps(region *RegionInfo) []*RegionInfo {
bc.RLock()
defer bc.RUnlock()
return bc.Regions.GetOverlaps(region)
Expand Down
44 changes: 22 additions & 22 deletions server/core/region.go
Original file line number Diff line number Diff line change
Expand Up @@ -492,7 +492,7 @@ func (r *RegionsInfo) GetRegion(regionID uint64) *RegionInfo {
}

// SetRegion sets the RegionInfo with regionID
func (r *RegionsInfo) SetRegion(region *RegionInfo) []*metapb.Region {
func (r *RegionsInfo) SetRegion(region *RegionInfo) []*RegionInfo {
if origin := r.regions.Get(region.GetID()); origin != nil {
r.RemoveRegion(origin)
}
Expand All @@ -510,16 +510,16 @@ func (r *RegionsInfo) TreeLength() int {
}

// GetOverlaps returns the regions which are overlapped with the specified region range.
func (r *RegionsInfo) GetOverlaps(region *RegionInfo) []*metapb.Region {
return r.tree.getOverlaps(region.meta)
func (r *RegionsInfo) GetOverlaps(region *RegionInfo) []*RegionInfo {
return r.tree.getOverlaps(region)
}

// AddRegion adds RegionInfo to regionTree and regionMap, also update leaders and followers by region peers
func (r *RegionsInfo) AddRegion(region *RegionInfo) []*metapb.Region {
func (r *RegionsInfo) AddRegion(region *RegionInfo) []*RegionInfo {
// Add to tree and regions.
overlaps := r.tree.update(region.meta)
overlaps := r.tree.update(region)
for _, item := range overlaps {
r.RemoveRegion(r.GetRegion(item.Id))
r.RemoveRegion(r.GetRegion(item.GetID()))
}

r.regions.Put(region)
Expand Down Expand Up @@ -573,7 +573,7 @@ func (r *RegionsInfo) AddRegion(region *RegionInfo) []*metapb.Region {
// RemoveRegion removes RegionInfo from regionTree and regionMap
func (r *RegionsInfo) RemoveRegion(region *RegionInfo) {
// Remove from tree and regions.
r.tree.remove(region.meta)
r.tree.remove(region)
r.regions.Delete(region.GetID())
// Remove from leaders and followers.
for _, peer := range region.meta.GetPeers() {
Expand All @@ -587,20 +587,20 @@ func (r *RegionsInfo) RemoveRegion(region *RegionInfo) {

// SearchRegion searches RegionInfo from regionTree
func (r *RegionsInfo) SearchRegion(regionKey []byte) *RegionInfo {
metaRegion := r.tree.search(regionKey)
if metaRegion == nil {
region := r.tree.search(regionKey)
if region == nil {
return nil
}
return r.GetRegion(metaRegion.GetId())
return r.GetRegion(region.GetID())
}

// SearchPrevRegion searches previous RegionInfo from regionTree
func (r *RegionsInfo) SearchPrevRegion(regionKey []byte) *RegionInfo {
metaRegion := r.tree.searchPrev(regionKey)
if metaRegion == nil {
region := r.tree.searchPrev(regionKey)
if region == nil {
return nil
}
return r.GetRegion(metaRegion.GetId())
return r.GetRegion(region.GetID())
}

// GetRegions gets all RegionInfo from regionMap
Expand Down Expand Up @@ -721,35 +721,35 @@ func (r *RegionsInfo) GetFollower(storeID uint64, regionID uint64) *RegionInfo {
// `limit` regions. limit <= 0 means no limit.
func (r *RegionsInfo) ScanRange(startKey, endKey []byte, limit int) []*RegionInfo {
var res []*RegionInfo
r.tree.scanRange(startKey, func(meta *metapb.Region) bool {
if len(endKey) > 0 && bytes.Compare(meta.StartKey, endKey) >= 0 {
r.tree.scanRange(startKey, func(region *RegionInfo) bool {
if len(endKey) > 0 && bytes.Compare(region.GetStartKey(), endKey) >= 0 {
return false
}
if limit > 0 && len(res) >= limit {
return false
}
res = append(res, r.GetRegion(meta.GetId()))
res = append(res, r.GetRegion(region.GetID()))
return true
})
return res
}

// ScanRangeWithIterator scans from the first region containing or behind start key,
// until iterator returns false.
func (r *RegionsInfo) ScanRangeWithIterator(startKey []byte, iterator func(metaRegion *metapb.Region) bool) {
func (r *RegionsInfo) ScanRangeWithIterator(startKey []byte, iterator func(region *RegionInfo) bool) {
r.tree.scanRange(startKey, iterator)
}

// GetAdjacentRegions returns region's info that is adjacent with specific region
func (r *RegionsInfo) GetAdjacentRegions(region *RegionInfo) (*RegionInfo, *RegionInfo) {
metaPrev, metaNext := r.tree.getAdjacentRegions(region.meta)
p, n := r.tree.getAdjacentRegions(region)
var prev, next *RegionInfo
// check key to avoid key range hole
if metaPrev != nil && bytes.Equal(metaPrev.region.EndKey, region.meta.StartKey) {
prev = r.GetRegion(metaPrev.region.GetId())
if p != nil && bytes.Equal(p.region.GetEndKey(), region.GetStartKey()) {
prev = r.GetRegion(p.region.GetID())
}
if metaNext != nil && bytes.Equal(region.meta.EndKey, metaNext.region.StartKey) {
next = r.GetRegion(metaNext.region.GetId())
if n != nil && bytes.Equal(region.GetEndKey(), n.region.GetStartKey()) {
next = r.GetRegion(n.region.GetID())
}
return prev, next
}
Expand Down
4 changes: 2 additions & 2 deletions server/core/region_storage.go
Original file line number Diff line number Diff line change
Expand Up @@ -119,7 +119,7 @@ func deleteRegion(kv kv.Base, region *metapb.Region) error {
return kv.Remove(regionPath(region.GetId()))
}

func loadRegions(kv kv.Base, f func(region *RegionInfo) []*metapb.Region) error {
func loadRegions(kv kv.Base, f func(region *RegionInfo) []*RegionInfo) error {
nextID := uint64(0)
endKey := regionPath(math.MaxUint64)

Expand All @@ -146,7 +146,7 @@ func loadRegions(kv kv.Base, f func(region *RegionInfo) []*metapb.Region) error
nextID = region.GetId() + 1
overlaps := f(NewRegionInfo(region, nil))
for _, item := range overlaps {
if err := deleteRegion(kv, item); err != nil {
if err := deleteRegion(kv, item.GetMeta()); err != nil {
return err
}
}
Expand Down
Loading

0 comments on commit 93d49b7

Please sign in to comment.