func()

in pkg/admin/services/override_service_impl.go [33:92]


func (s *OverrideServiceImpl) SaveOverride(dynamicConfig *model.DynamicConfig) error {
	id := util2.BuildServiceKey(dynamicConfig.Base.Application, dynamicConfig.Base.Service, dynamicConfig.Base.ServiceVersion, dynamicConfig.Base.ServiceGroup)
	path := GetOverridePath(id)
	existConfig, err := config.Governance.GetConfig(path)
	if err != nil {
		if _, ok := err.(*config.RuleNotFound); !ok {
			logger.Logger().Error(err.Error())
			return err
		}
	}

	existOverride := dynamicConfig.ToOverride()
	configs := []model.OverrideConfig{}
	if existConfig != "" {
		err := yaml.UnmarshalYML([]byte(existConfig), existOverride)
		if err != nil {
			logger.Logger().Error(err.Error())
			return err
		}
		if len(existOverride.Configs) > 0 {
			for _, c := range existOverride.Configs {
				if constant.Configs.Contains(c.Type) {
					configs = append(configs, c)
				}
			}
		}
	}
	configs = append(configs, dynamicConfig.Configs...)
	existOverride.Enabled = dynamicConfig.Enabled
	existOverride.Configs = configs
	if b, err := yaml.MarshalYML(existOverride); err != nil {
		logger.Logger().Error(err.Error())
		return err
	} else {
		err := config.Governance.SetConfig(path, string(b))
		if err != nil {
			logger.Logger().Error(err.Error())
			return err
		}
	}

	// for 2.6
	if dynamicConfig.Service != "" {
		result := dynamicConfig.ToOldOverride()
		for _, o := range result {
			url, err := util.OldOverride2URL(o)
			if err != nil {
				logger.Logger().Error(err.Error())
				return err
			}
			err = config.Governance.Register(url)
			if err != nil {
				logger.Logger().Error(err.Error())
				return err
			}
		}
	}

	return nil
}