func Unmarshal()

in internal/backint/configuration/configuration.go [284:355]


func Unmarshal(parameterFile string, content []byte) (*bpb.BackintConfiguration, error) {
	config := &bpb.BackintConfiguration{}
	var err error
	if strings.HasSuffix(parameterFile, ".json") {
		log.Logger.Infow("Unmarshalling JSON parameters file", "configPath", parameterFile)
		if err = protojson.Unmarshal(content, config); err != nil {
			log.Logger.Errorw("Invalid content in the JSON parameters file", "configPath", parameterFile)
			return nil, err
		}
		return config, nil
	}

	log.Logger.Infow("Parsing legacy parameters file", "configPath", parameterFile)
	config.Compress = true
	config.LogToCloud = wpb.Bool(true)
	for _, line := range strings.Split(string(content), "\n") {
		if line == "" {
			continue
		}
		split := strings.SplitN(line, " ", 2)
		if len(split) < 2 && line != "#DISABLE_COMPRESSION" && line != "#DUMP_DATA" && line != "#DISABLE_CLOUD_LOGGING" {
			return nil, fmt.Errorf("empty value for parameter: %s", line)
		}
		switch split[0] {
		case "#DISABLE_COMPRESSION":
			config.Compress = false
		case "#DISABLE_CLOUD_LOGGING":
			config.LogToCloud = wpb.Bool(false)
		case "#DUMP_DATA":
			config.DumpData = true
		case "#BUCKET":
			config.Bucket = split[1]
		case "#SERVICE_ACCOUNT":
			config.ServiceAccountKey = split[1]
		case "#ENCRYPTION_KEY":
			config.EncryptionKey = split[1]
		case "#KMS_KEY_NAME":
			config.KmsKey = split[1]
		case "#LOG_LEVEL":
			config.LogLevel = bpb.LogLevel(bpb.LogLevel_value[split[1]])
		case "#READ_IDLE_TIMEOUT":
			if config.FileReadTimeoutMs, err = strconv.ParseInt(split[1], 10, 64); err != nil {
				return nil, fmt.Errorf("failed to parse #READ_IDLE_TIMEOUT as int64, err: %v", err)
			}
		case "#CHUNK_SIZE_MB":
			if config.BufferSizeMb, err = strconv.ParseInt(split[1], 10, 64); err != nil {
				return nil, fmt.Errorf("failed to parse #CHUNK_SIZE_MB as int64, err: %v", err)
			}
		case "#RATE_LIMIT_MB":
			if config.RateLimitMb, err = strconv.ParseInt(split[1], 10, 64); err != nil {
				return nil, fmt.Errorf("failed to parse #RATE_LIMIT_MB as int64, err: %v", err)
			}
		case "#MAX_GCS_RETRY":
			if config.Retries, err = strconv.ParseInt(split[1], 10, 64); err != nil {
				return nil, fmt.Errorf("failed to parse #MAX_GCS_RETRY as int64, err: %v", err)
			}
		case "#PARALLEL_FACTOR":
			if config.ParallelStreams, err = strconv.ParseInt(split[1], 10, 64); err != nil {
				return nil, fmt.Errorf("failed to parse #PARALLEL_FACTOR as int64, err: %v", err)
			}
		case "#THREADS":
			if config.Threads, err = strconv.ParseInt(split[1], 10, 64); err != nil {
				return nil, fmt.Errorf("failed to parse #THREADS as int64, err: %v", err)
			}
		case "#PARALLEL_PART_SIZE_MB":
			log.Logger.Infow("#PARALLEL_PART_SIZE_MB has been deprecated and can be removed from the configuration", "line", line)
		default:
			log.Logger.Warnw("Unexpected line in parameters file", "line", line)
		}
	}
	return config, nil
}