From 755436f7808f8f7a4b0fdec24d9664e3d52bbceb Mon Sep 17 00:00:00 2001 From: disksing Date: Mon, 2 Sep 2019 20:11:24 +0800 Subject: [PATCH] checker: fix merge bug Signed-off-by: disksing --- server/schedule/merge_checker.go | 9 +++------ server/schedule/merge_checker_test.go | 12 ++++++++++++ 2 files changed, 15 insertions(+), 6 deletions(-) diff --git a/server/schedule/merge_checker.go b/server/schedule/merge_checker.go index 2a112b74c00..8526cd500dd 100644 --- a/server/schedule/merge_checker.go +++ b/server/schedule/merge_checker.go @@ -100,12 +100,9 @@ func (m *MergeChecker) Check(region *core.RegionInfo) []*Operator { prev, next := m.cluster.GetAdjacentRegions(region) - var target *core.RegionInfo - targetNext := m.checkTarget(region, next, target) - target = m.checkTarget(region, prev, target) - if target != targetNext && m.cluster.GetEnableOneWayMerge() { - checkerCounter.WithLabelValues("merge_checker", "skip_left").Inc() - target = targetNext + target := m.checkTarget(region, next, nil) + if !m.cluster.GetEnableOneWayMerge() { + target = m.checkTarget(region, prev, target) } if target == nil { diff --git a/server/schedule/merge_checker_test.go b/server/schedule/merge_checker_test.go index e60832f7e82..00b1bf77d0d 100644 --- a/server/schedule/merge_checker_test.go +++ b/server/schedule/merge_checker_test.go @@ -128,6 +128,9 @@ func (s *testMergeCheckerSuite) TestBasic(c *C) { op.startTime = op.startTime.Add(-RegionOperatorWaitTime - time.Second) c.Assert(op.IsTimeout(), IsTrue) } + // Check merge with previous region. + c.Assert(ops[0].RegionID(), Equals, s.regions[2].GetID()) + c.Assert(ops[1].RegionID(), Equals, s.regions[1].GetID()) // Enable one way merge s.cluster.EnableOneWayMerge = true @@ -135,6 +138,15 @@ func (s *testMergeCheckerSuite) TestBasic(c *C) { c.Assert(ops, IsNil) s.cluster.EnableOneWayMerge = false + // Make up peers for next region. + s.regions[3] = s.regions[3].Clone(core.WithAddPeer(&metapb.Peer{Id: 110, StoreId: 1}), core.WithAddPeer(&metapb.Peer{Id: 111, StoreId: 2})) + s.cluster.PutRegion(s.regions[3]) + ops = s.mc.Check(s.regions[2]) + c.Assert(ops, NotNil) + // Now it merges to next region. + c.Assert(ops[0].RegionID(), Equals, s.regions[2].GetID()) + c.Assert(ops[1].RegionID(), Equals, s.regions[3].GetID()) + // Skip recently split regions. s.mc.RecordRegionSplit(s.regions[2].GetID()) ops = s.mc.Check(s.regions[2])