Skip to content

Commit

Permalink
cherry pick tikv#2667 to release-3.0
Browse files Browse the repository at this point in the history
Signed-off-by: ti-srebot <[email protected]>
  • Loading branch information
howardlau1999 authored and ti-srebot committed Jul 22, 2020
1 parent 899e122 commit 861771b
Show file tree
Hide file tree
Showing 3 changed files with 1,154 additions and 1 deletion.
7 changes: 6 additions & 1 deletion server/core/basic_cluster.go
Original file line number Diff line number Diff line change
Expand Up @@ -137,9 +137,14 @@ func (bc *BasicCluster) PreCheckPutRegion(region *RegionInfo) (*RegionInfo, erro
}
r := region.GetRegionEpoch()
o := origin.GetRegionEpoch()

// TiKV reports term after v3.0
isTermBehind := region.GetTerm() > 0 && region.GetTerm() < origin.GetTerm()

// Region meta is stale, return an error.
if r.GetVersion() < o.GetVersion() || r.GetConfVer() < o.GetConfVer() {
if r.GetVersion() < o.GetVersion() || r.GetConfVer() < o.GetConfVer() || isTermBehind {
return origin, ErrRegionIsStale(region.GetMeta(), origin.GetMeta())
}

return origin, nil
}
55 changes: 55 additions & 0 deletions server/core/region.go
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ import (
// RegionInfo records detail region info.
// Read-Only once created.
type RegionInfo struct {
<<<<<<< HEAD
meta *metapb.Region
learners []*metapb.Peer
voters []*metapb.Peer
Expand All @@ -42,6 +43,23 @@ type RegionInfo struct {
readKeys uint64
approximateSize int64
approximateKeys int64
=======
term uint64
meta *metapb.Region
learners []*metapb.Peer
voters []*metapb.Peer
leader *metapb.Peer
downPeers []*pdpb.PeerStats
pendingPeers []*metapb.Peer
writtenBytes uint64
writtenKeys uint64
readBytes uint64
readKeys uint64
approximateSize int64
approximateKeys int64
interval *pdpb.TimeInterval
replicationStatus *replication_modepb.RegionReplicationStatus
>>>>>>> a9cdb2d... server/core: check region term before updating cache (#2667)
}

// NewRegionInfo creates RegionInfo with region's meta and leader peer.
Expand Down Expand Up @@ -87,6 +105,7 @@ func RegionFromHeartbeat(heartbeat *pdpb.RegionHeartbeatRequest) *RegionInfo {
}

region := &RegionInfo{
<<<<<<< HEAD
meta: heartbeat.GetRegion(),
leader: heartbeat.GetLeader(),
downPeers: heartbeat.GetDownPeers(),
Expand All @@ -97,6 +116,21 @@ func RegionFromHeartbeat(heartbeat *pdpb.RegionHeartbeatRequest) *RegionInfo {
readKeys: heartbeat.GetKeysRead(),
approximateSize: int64(regionSize),
approximateKeys: int64(heartbeat.GetApproximateKeys()),
=======
term: heartbeat.GetTerm(),
meta: heartbeat.GetRegion(),
leader: heartbeat.GetLeader(),
downPeers: heartbeat.GetDownPeers(),
pendingPeers: heartbeat.GetPendingPeers(),
writtenBytes: heartbeat.GetBytesWritten(),
writtenKeys: heartbeat.GetKeysWritten(),
readBytes: heartbeat.GetBytesRead(),
readKeys: heartbeat.GetKeysRead(),
approximateSize: int64(regionSize),
approximateKeys: int64(heartbeat.GetApproximateKeys()),
interval: heartbeat.GetInterval(),
replicationStatus: heartbeat.GetReplicationStatus(),
>>>>>>> a9cdb2d... server/core: check region term before updating cache (#2667)
}

classifyVoterAndLearner(region)
Expand All @@ -115,6 +149,7 @@ func (r *RegionInfo) Clone(opts ...RegionCreateOption) *RegionInfo {
}

region := &RegionInfo{
<<<<<<< HEAD
meta: proto.Clone(r.meta).(*metapb.Region),
leader: proto.Clone(r.leader).(*metapb.Peer),
downPeers: downPeers,
Expand All @@ -125,6 +160,21 @@ func (r *RegionInfo) Clone(opts ...RegionCreateOption) *RegionInfo {
readKeys: r.readKeys,
approximateSize: r.approximateSize,
approximateKeys: r.approximateKeys,
=======
term: r.term,
meta: proto.Clone(r.meta).(*metapb.Region),
leader: proto.Clone(r.leader).(*metapb.Peer),
downPeers: downPeers,
pendingPeers: pendingPeers,
writtenBytes: r.writtenBytes,
writtenKeys: r.writtenKeys,
readBytes: r.readBytes,
readKeys: r.readKeys,
approximateSize: r.approximateSize,
approximateKeys: r.approximateKeys,
interval: proto.Clone(r.interval).(*pdpb.TimeInterval),
replicationStatus: r.replicationStatus,
>>>>>>> a9cdb2d... server/core: check region term before updating cache (#2667)
}

for _, opt := range opts {
Expand All @@ -134,6 +184,11 @@ func (r *RegionInfo) Clone(opts ...RegionCreateOption) *RegionInfo {
return region
}

// GetTerm returns the current term of the region
func (r *RegionInfo) GetTerm() uint64 {
return r.term
}

// GetLearners returns the learners.
func (r *RegionInfo) GetLearners() []*metapb.Peer {
return r.learners
Expand Down
Loading

0 comments on commit 861771b

Please sign in to comment.