func getBackendClient()

in lib/backend/shadowbackend/client.go [129:199]


func getBackendClient(backendConfig map[string]interface{}, authConfRaw interface{}, stats tally.Scope) (backend.Client, error) {
	var name string
	var confRaw interface{}

	// TODO Re-implementing all the factory functions is bad form, but because backends.getFactory isn't public there
	// is no way to access them currently. Opened https://github.com/uber/kraken/issues/213 to address this.
	for name, confRaw = range backendConfig {
		switch name {
		case "sql":
			confBytes, err := yaml.Marshal(confRaw)
			if err != nil {
				return nil, fmt.Errorf("marshal sql config: %s", err)
			}
			var config sqlbackend.Config
			if err := yaml.Unmarshal(confBytes, &config); err != nil {
				return nil, fmt.Errorf("unmarshal sql config: %s", err)
			}
			authConfBytes, err := yaml.Marshal(authConfRaw)
			var userAuth sqlbackend.UserAuthConfig
			if err := yaml.Unmarshal(authConfBytes, &userAuth); err != nil {
				return nil, fmt.Errorf("unmarshal sql auth config: %s", err)
			}
			return sqlbackend.NewClient(config, userAuth, stats)
		case "hdfs":
			confBytes, err := yaml.Marshal(confRaw)
			if err != nil {
				return nil, fmt.Errorf("marshal hdfs config: %s", err)
			}

			var config hdfsbackend.Config
			if err := yaml.Unmarshal(confBytes, &config); err != nil {
				return nil, fmt.Errorf("unmarshal hdfs config: %s", err)
			}

			return hdfsbackend.NewClient(config, stats)
		case "s3":
			confBytes, err := yaml.Marshal(confRaw)
			if err != nil {
				return nil, fmt.Errorf("marshal s3 config: %s", err)
			}

			var config s3backend.Config
			if err := yaml.Unmarshal(confBytes, &config); err != nil {
				return nil, fmt.Errorf("unmarshal s3 config: %s", err)
			}
			authConfBytes, err := yaml.Marshal(authConfRaw)
			var userAuth s3backend.UserAuthConfig
			if err := yaml.Unmarshal(authConfBytes, &userAuth); err != nil {
				return nil, fmt.Errorf("unmarshal s3 auth config: %s", err)
			}

			return s3backend.NewClient(config, userAuth, stats)
		case "testfs":
			confBytes, err := yaml.Marshal(confRaw)
			if err != nil {
				return nil, fmt.Errorf("marshal testfs config: %s", err)
			}

			var config testfs.Config
			if err := yaml.Unmarshal(confBytes, &config); err != nil {
				return nil, fmt.Errorf("unmarshal testfs config: %s", err)
			}

			return testfs.NewClient(config, stats)
		default:
			return nil, fmt.Errorf("unsupported backend type '%s'", name)
		}
	}

	return nil, nil
}