chore(common): codemode tactic valid with replicated

@formatter:off

Signed-off-by: slasher <shenjie1@oppo.com>
This commit is contained in:
slasher 2024-06-17 10:32:19 +08:00 committed by 梁曟風
parent dc9b760635
commit bcc476d639
7 changed files with 43 additions and 19 deletions

View File

@ -23,7 +23,7 @@ import (
)
func TestEncoderPool(t *testing.T) {
modes := codemode.GetAllCodeModes()
modes := codemode.GetECCodeModes()
for _, mode := range modes {
_, err := GetEncoder(mode)
require.NoError(t, err)

View File

@ -39,7 +39,7 @@ var (
)
func testWithAllMode(t *testing.T, testFunc func(t *testing.T, mode codemode.CodeMode)) {
for _, mode := range codemode.GetAllCodeModes() {
for _, mode := range codemode.GetECCodeModes() {
testFunc(t, mode)
}
}

View File

@ -38,7 +38,7 @@ func showECbuffer(c *grumble.Context) error {
}
var modes, all []codemode.CodeMode
all = codemode.GetAllCodeModes()
all = codemode.GetECCodeModes()
mode := c.Flags.Int("codemode")
for _, m := range all {
if m == codemode.CodeMode(mode) {

View File

@ -85,8 +85,7 @@ var constCodeModeTactic = map[CodeMode]Tactic{
EC6P8L10: {N: 6, M: 8, L: 10, AZCount: 2, PutQuorum: 13, GetQuorum: 0, MinShardSize: alignSize0B},
// for replicate
Replica3: {N: 3, M: 0, L: 0, AZCount: 3, PutQuorum: 3},
Replica3: {N: 3, M: 0, L: 0, AZCount: 3, PutQuorum: 3},
Replica3OneAZ: {N: 3, M: 0, L: 0, AZCount: 1, PutQuorum: 3},
}
@ -104,11 +103,13 @@ var constName2CodeMode = map[CodeModeName]CodeMode{
"EC3P3": EC3P3,
"EC10P4": EC10P4,
"EC6P3": EC6P3,
"EC6P6L9": EC6P6L9,
"EC6P8L10": EC6P8L10,
"EC12P9": EC12P9,
"Replica3": Replica3,
"Replica3OneAZ": Replica3OneAZ,
"EC6P6L9": EC6P6L9,
"EC6P8L10": EC6P8L10,
}
var constCodeMode2Name = map[CodeMode]CodeModeName{
@ -125,11 +126,13 @@ var constCodeMode2Name = map[CodeMode]CodeModeName{
EC3P3: "EC3P3",
EC10P4: "EC10P4",
EC6P3: "EC6P3",
EC6P6L9: "EC6P6L9",
EC6P8L10: "EC6P8L10",
EC12P9: "EC12P9",
Replica3: "Replica3",
Replica3OneAZ: "Replica3OneAZ",
EC6P6L9: "EC6P6L9",
EC6P8L10: "EC6P8L10",
}
//vol layout ep:EC6P10L2
@ -252,10 +255,8 @@ func (c CodeMode) String() string {
// IsValid check the CodeMode is valid
func (c CodeMode) IsValid() bool {
if _, ok := constCodeMode2Name[c]; ok {
return ok
}
return false
_, ok := constCodeMode2Name[c]
return ok
}
// GetCodeMode get the code mode by name
@ -268,10 +269,8 @@ func (cn CodeModeName) GetCodeMode() CodeMode {
// IsValid check the CodeMode is valid by Name
func (cn CodeModeName) IsValid() bool {
if _, ok := constName2CodeMode[cn]; ok {
return ok
}
return false
_, ok := constName2CodeMode[cn]
return ok
}
// Tactic get tactic by code mode name
@ -281,6 +280,10 @@ func (cn CodeModeName) Tactic() Tactic {
// IsValid ec tactic valid or not
func (c *Tactic) IsValid() bool {
if c.IsReplicateMode() {
return c.N > 0 && c.AZCount > 0 && c.N%c.AZCount == 0 &&
c.PutQuorum > 0 && c.GetQuorum >= 0
}
return c.N > 0 && c.M > 0 && c.L >= 0 && c.AZCount > 0 &&
c.PutQuorum > 0 && c.GetQuorum >= 0 && c.MinShardSize >= 0 &&
c.N%c.AZCount == 0 && c.M%c.AZCount == 0 && c.L%c.AZCount == 0
@ -365,6 +368,17 @@ func (c *Tactic) IsReplicateMode() bool {
return c.M == 0 && c.L == 0
}
// GetECCodeModes get all available ec CodeModes
func GetECCodeModes() []CodeMode {
modes := make([]CodeMode, 0)
for _, mode := range GetAllCodeModes() {
if !mode.T().IsReplicateMode() {
modes = append(modes, mode)
}
}
return modes
}
// GetAllCodeModes get all the available CodeModes
func GetAllCodeModes() []CodeMode {
return []CodeMode{
@ -381,6 +395,11 @@ func GetAllCodeModes() []CodeMode {
EC3P3,
EC10P4,
EC6P3,
EC12P9,
Replica3,
Replica3OneAZ,
EC6P6L9,
EC6P8L10,
}

View File

@ -52,11 +52,16 @@ func TestCodeModeBase(t *testing.T) {
for _, cm := range GetAllCodeModes() {
require.True(t, cm.IsValid())
require.True(t, cm.T().IsValid())
require.True(t, cm.Name().IsValid())
require.Equal(t, cm.String(), string(cm.Name()))
require.Equal(t, cm, cm.Name().GetCodeMode())
require.Equal(t, cm.Tactic(), cm.Name().Tactic())
}
for _, cm := range GetECCodeModes() {
require.True(t, cm.IsValid())
require.False(t, cm.T().IsReplicateMode())
}
name := CodeModeName("xxx")
require.False(t, name.IsValid())

View File

@ -247,7 +247,7 @@ func TestLrcEncoder(t *testing.T) {
}
func TestLrcReconstruct(t *testing.T) {
for _, cm := range codemode.GetAllCodeModes() {
for _, cm := range codemode.GetECCodeModes() {
testLrcReconstruct(t, cm)
}
}

View File

@ -428,7 +428,7 @@ func TestAllocVolumeRetry(t *testing.T) {
cmcli := mock.ProxyMockClusterMgrCli(t)
v := volumeMgr{clusterMgr: cmcli}
codemodes := codemode.GetAllCodeModes()
codemodes := codemode.GetECCodeModes()
args := &cm.AllocVolumeArgs{
CodeMode: codemode.CodeMode(len(codemodes) + 1),
}