mirror of
https://github.com/cubefs/cubefs.git
synced 2026-08-02 02:00:56 +00:00
fix(bssdk): fix update shard catalog suid info, when catalog change item is not leader
with: #23028809 Signed-off-by: mawei029 <mawei2@oppo.com>
This commit is contained in:
parent
c9ab48ba83
commit
f90f00efa6
@ -459,14 +459,9 @@ func (s *shardControllerImpl) setShardByID(shardID proto.ShardID, val *clustermg
|
||||
return false
|
||||
}
|
||||
|
||||
// update version, leaderDiskID, units
|
||||
info.version = val.RouteVersion
|
||||
info.leaderDiskID = val.Unit.LeaderDiskID
|
||||
for _, unit := range info.units {
|
||||
if info.leaderDiskID == unit.DiskID {
|
||||
info.leaderSuid = val.Unit.Suid
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
// info.rangeExt = val.Unit.Range // todo: will update range next version
|
||||
idx := val.Unit.Suid.Index()
|
||||
@ -475,6 +470,14 @@ func (s *shardControllerImpl) setShardByID(shardID proto.ShardID, val *clustermg
|
||||
DiskID: val.Unit.DiskID,
|
||||
Learner: val.Unit.Learner, // most time, $learner is false
|
||||
}
|
||||
|
||||
// update leader suid
|
||||
for _, unit := range info.units {
|
||||
if info.leaderDiskID == unit.DiskID {
|
||||
info.leaderSuid = unit.Suid
|
||||
break
|
||||
}
|
||||
}
|
||||
return true
|
||||
}
|
||||
|
||||
|
||||
@ -372,6 +372,60 @@ func TestShardUpdate(t *testing.T) {
|
||||
|
||||
require.Equal(t, 2, len(svr.shards))
|
||||
}
|
||||
|
||||
{
|
||||
rv := svr.version + 1
|
||||
shardID := proto.ShardID(9)
|
||||
oldShard, exist := svr.getShardNoLock(shardID)
|
||||
require.True(t, exist)
|
||||
|
||||
val := clustermgr.CatalogChangeShardUpdate{
|
||||
ShardID: shardID,
|
||||
RouteVersion: rv,
|
||||
Unit: clustermgr.ShardUnitInfo{
|
||||
Suid: proto.EncodeSuid(shardID, 2, 1),
|
||||
DiskID: 3,
|
||||
LeaderDiskID: 2,
|
||||
Range: *ranges[8],
|
||||
RouteVersion: rv,
|
||||
Host: "testHost3",
|
||||
Learner: false,
|
||||
},
|
||||
}
|
||||
data, err := val.Marshal()
|
||||
require.NoError(t, err)
|
||||
|
||||
item := clustermgr.CatalogChangeItem{
|
||||
RouteVersion: svr.version + 1,
|
||||
Type: proto.CatalogChangeItemUpdateShard,
|
||||
Item: &types.Any{
|
||||
TypeUrl: "",
|
||||
Value: data,
|
||||
},
|
||||
}
|
||||
svr.handleShardUpdate(ctx, item)
|
||||
|
||||
sd, exist := svr.getShardNoLock(shardID)
|
||||
require.True(t, exist)
|
||||
|
||||
expect := shard{
|
||||
shardID: oldShard.shardID,
|
||||
leaderDiskID: 2,
|
||||
leaderSuid: proto.EncodeSuid(shardID, 1, 0),
|
||||
version: rv,
|
||||
rangeExt: oldShard.rangeExt,
|
||||
units: oldShard.units,
|
||||
punishCtrl: oldShard.punishCtrl,
|
||||
}
|
||||
idx := val.Unit.Suid.Index()
|
||||
expect.units[idx] = clustermgr.ShardUnit{
|
||||
Suid: val.Unit.Suid,
|
||||
DiskID: val.Unit.DiskID,
|
||||
Learner: val.Unit.Learner,
|
||||
}
|
||||
|
||||
require.Equal(t, expect, *sd)
|
||||
}
|
||||
}
|
||||
|
||||
func TestShardGetShard(t *testing.T) {
|
||||
|
||||
Loading…
Reference in New Issue
Block a user