func()

in pkg/admin/services/override_service_impl.go [94:154]


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

	override := &model.Override{}
	err = yaml.UnmarshalYML([]byte(existConfig), override)
	if err != nil {
		logger.Logger().Error(err.Error())
		return err
	}
	old := override.ToDynamicConfig()

	configs := make([]model.OverrideConfig, 0)
	if len(override.Configs) > 0 {
		for _, c := range override.Configs {
			if constant.Configs.Contains(c.Type) {
				configs = append(configs, c)
			}
		}
	}
	configs = append(configs, update.Configs...)
	override.Configs = configs
	override.Enabled = update.Enabled
	if b, err := yaml.MarshalYML(override); 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 update.Service != "" {
		oldOverrides := old.ToOldOverride()
		updatedOverrides := update.ToOldOverride()
		for _, o := range oldOverrides {
			url, err := util.OldOverride2URL(o)
			if err != nil {
				return err
			}
			config.Governance.UnRegister(url)
		}
		for _, o := range updatedOverrides {
			url, err := util.OldOverride2URL(o)
			if err != nil {
				return err
			}
			config.Governance.Register(url)
		}
	}

	return nil
}