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
}