Merge pull request #12335 from zexi/adaptec-raid-mode

fix(baremetal): adjust adaptec raid logical volume order
This commit is contained in:
Zexi Li
2021-09-29 17:35:40 +08:00
committed by GitHub
6 changed files with 50 additions and 41 deletions
+4 -10
View File
@@ -2448,9 +2448,7 @@ func (s *SBaremetalServer) DoDiskConfig(term *ssh.Client) error {
}
}
tool := disktool.NewSSHPartitionTool(term)
tool.FetchDiskConfs(baremetal.GetDiskConfigurations(layouts))
err = tool.RetrieveDiskInfo()
tool, err := disktool.NewSSHPartitionTool(term, layouts)
if err != nil {
return err
}
@@ -2529,11 +2527,9 @@ func (s *SBaremetalServer) DoPartitionDisk(term *ssh.Client) ([]*disktool.Partit
return nil, errors.Wrapf(err, "CalculateLayout")
}
tool := disktool.NewSSHPartitionTool(term)
tool.FetchDiskConfs(baremetal.GetDiskConfigurations(layouts))
err = tool.RetrieveDiskInfo()
tool, err := disktool.NewSSHPartitionTool(term, layouts)
if err != nil {
return nil, errors.Wrapf(err, "RetrieveDiskInfo")
return nil, errors.Wrapf(err, "NewSSHPartitionTool")
}
disks, _ := s.desc.GetArray("disks")
@@ -2606,9 +2602,7 @@ func (s *SBaremetalServer) DoRebuildRootDisk(term *ssh.Client) ([]*disktool.Part
return nil, err
}
tool := disktool.NewSSHPartitionTool(term)
tool.FetchDiskConfs(baremetal.GetDiskConfigurations(layouts))
err = tool.RetrieveDiskInfo()
tool, err := disktool.NewSSHPartitionTool(term, layouts)
if err != nil {
return nil, err
}
+10 -1
View File
@@ -753,7 +753,7 @@ type SSHPartitionTool struct {
term *ssh.Client
}
func NewSSHPartitionTool(term *ssh.Client) *SSHPartitionTool {
func newSSHPartitionTool(term *ssh.Client) *SSHPartitionTool {
tool := &SSHPartitionTool{
term: term,
}
@@ -761,6 +761,15 @@ func NewSSHPartitionTool(term *ssh.Client) *SSHPartitionTool {
return tool
}
func NewSSHPartitionTool(term *ssh.Client, layouts []baremetal.Layout) (*SSHPartitionTool, error) {
tool := newSSHPartitionTool(term)
tool.FetchDiskConfs(baremetal.GetDiskConfigurations(layouts))
if err := tool.RetrieveDiskInfo(); err != nil {
return nil, errors.Wrapf(err, "RetrieveDiskInfo")
}
return tool, nil
}
func (tool *SSHPartitionTool) Run(cmds ...string) ([]string, error) {
return tool.term.Run(cmds...)
}
+29 -24
View File
@@ -58,7 +58,7 @@ func GetCommand(args ...string) string {
return raid.GetCommand(bin, args...)
}
func (raid *AdaptecRaid) GetName() string {
func (r *AdaptecRaid) GetName() string {
return baremetal.DISK_DRIVER_ADAPTECRAID
}
@@ -77,8 +77,8 @@ func (r *AdaptecRaid) ParsePhyDevs() error {
return nil
}
func (raid *AdaptecRaid) CleanRaid() error {
for _, ada := range raid.adapters {
func (r *AdaptecRaid) CleanRaid() error {
for _, ada := range r.adapters {
ada.removeJBODDisks()
ada.RemoveLogicVolumes()
}
@@ -114,17 +114,17 @@ func getAdaptorIndex(line string) int {
return adapInt
}
func (raid *AdaptecRaid) parsePhyDevs(lines []string) error {
func (r *AdaptecRaid) parsePhyDevs(lines []string) error {
for _, line := range lines {
index := getAdaptorIndex(line)
if index == -1 {
continue
}
ada, err := NewAdaptecRaidAdaptor(index, raid)
ada, err := NewAdaptecRaidAdaptor(index, r)
if err != nil {
return errors.Wrapf(err, "New raid adaptor %d", index)
}
raid.adapters = append(raid.adapters, ada)
r.adapters = append(r.adapters, ada)
}
return nil
}
@@ -167,24 +167,9 @@ func (ada *AdaptecRaidAdaptor) GetIndex() int {
}
func (ada *AdaptecRaidAdaptor) PreBuildRaid(confs []*api.BaremetalDiskConfig) error {
// set to raid expose raw mode or mixed mode
if !ada.isRaidExposeRawMode() && !ada.isMixedMode() {
err := func() error {
errs := []error{}
if err := ada.setControllerModeRaidExposeRaw(); err != nil {
errs = append(errs, err)
} else {
return nil
}
if err := ada.setControllerModeMixed(); err != nil {
errs = append(errs, err)
} else {
return nil
}
return errors.NewAggregate(errs)
}()
if err != nil {
return errors.Wrap(err, "set raid to expose raw or mixed mode")
if !ada.isRaidHideRawMode() {
if err := ada.setControllerModeRaidHideRaw(); err != nil {
return errors.Wrapf(err, "set controller mode to raid hide raw mode")
}
}
if err := ada.removeJBODDisks(); err != nil {
@@ -365,6 +350,26 @@ func (ada *AdaptecRaidAdaptor) buildJBOD(dev *baremetal.BaremetalStorage) error
}
func (ada *AdaptecRaidAdaptor) buildNonRaid(dev *baremetal.BaremetalStorage) error {
// set to raid expose raw mode or mixed mode
if !ada.isRaidExposeRawMode() && !ada.isMixedMode() {
err := func() error {
errs := []error{}
if err := ada.setControllerModeRaidExposeRaw(); err != nil {
errs = append(errs, err)
} else {
return nil
}
if err := ada.setControllerModeMixed(); err != nil {
errs = append(errs, err)
} else {
return nil
}
return errors.NewAggregate(errs)
}()
if err != nil {
return errors.Wrap(err, "set raid to expose raw or mixed mode")
}
}
// try build JBOD firstly
if err := ada.buildJBOD(dev); err != nil {
log.Warningf("try build JBOD error: %v", err)
+4 -3
View File
@@ -65,7 +65,7 @@ func GetDriverByKernelModule(module string, term raid.IExecTerm) (raid.IRaidDriv
name = baremetal.DISK_DRIVER_HPSARAID
case raid.MODULE_MPT2SAS, raid.MODULE_MPT3SAS:
name = baremetal.DISK_DRIVER_MPT2SAS
case raid.MODULE_AACRAID:
case raid.MODULE_AACRAID, raid.MODULE_SMARTPQI:
name = baremetal.DISK_DRIVER_ADAPTECRAID
}
if name == "" {
@@ -96,13 +96,13 @@ func BuildRaid(driver raid.IRaidDriver, confs []*api.BaremetalDiskConfig, adapte
if adapter == nil {
return fmt.Errorf("Not found adapter by index %d", adapterIdx)
}
if err := buildRaid(adapter, confs); err != nil {
if err := buildRaid(driver, adapter, confs); err != nil {
return fmt.Errorf("Driver %s, adapter %d build raid: %v", driver.GetName(), adapterIdx, err)
}
return nil
}
func buildRaid(adapter raid.IRaidAdapter, confs []*api.BaremetalDiskConfig) error {
func buildRaid(driver raid.IRaidDriver, adapter raid.IRaidAdapter, confs []*api.BaremetalDiskConfig) error {
if err := adapter.PreBuildRaid(confs); err != nil {
return fmt.Errorf("PreBuildRaid: %v", err)
}
@@ -142,6 +142,7 @@ func buildRaid(adapter raid.IRaidAdapter, confs []*api.BaremetalDiskConfig) erro
if err != nil {
return fmt.Errorf("Build raid %s: %v", conf.Conf, err)
}
log.Infof("Build %s:%d raid %s", driver.GetName(), adapter.GetIndex(), conf.Conf)
}
if len(nonDisks) > 0 {
if err := adapter.BuildNoneRaid(nonDisks); err != nil {
+1
View File
@@ -37,6 +37,7 @@ const (
MODULE_MPT2SAS = "mpt2sas"
MODULE_MPT3SAS = "mpt3sas"
MODULE_AACRAID = "aacraid"
MODULE_SMARTPQI = "smartpqi"
)
const (
+2 -3
View File
@@ -572,9 +572,8 @@ func (p *SSHPartition) Zerofree() {
}
func MountSSHRootfs(term *ssh.Client, layouts []baremetal.Layout) (*SSHPartition, fsdriver.IRootFsDriver, error) {
tool := disktool.NewSSHPartitionTool(term)
tool.FetchDiskConfs(baremetal.GetDiskConfigurations(layouts))
if err := tool.RetrieveDiskInfo(); err != nil {
tool, err := disktool.NewSSHPartitionTool(term, layouts)
if err != nil {
return nil, nil, err
}
tool.RetrievePartitionInfo()