in webv2/web.go [748:819]
func getSourceAndTargetProfiles(sessionState *session.SessionState, details types.MigrationDetails) (profiles.SourceProfile, profiles.TargetProfile, utils.IOStreams, string, error) {
var (
sourceProfileString string
err error
)
sourceDBConnectionDetails := sessionState.SourceDBConnDetails
if sourceDBConnectionDetails.ConnectionType == helpers.DUMP_MODE {
sourceProfileString = fmt.Sprintf("file=%v,format=dump", sourceDBConnectionDetails.Path)
} else if details.IsSharded {
sourceProfileString, err = getSourceProfileStringForShardedMigrations(sessionState, details)
if err != nil {
return profiles.SourceProfile{}, profiles.TargetProfile{}, utils.IOStreams{}, "", fmt.Errorf("error while creating config to initiate sharded migration:%v", err)
}
} else {
sourceProfileString = fmt.Sprintf("host=%v,port=%v,user=%v,password=%v,dbName=%v",
sourceDBConnectionDetails.Host, sourceDBConnectionDetails.Port, sourceDBConnectionDetails.User,
sourceDBConnectionDetails.Password, sessionState.DbName)
}
sessionState.SpannerDatabaseName = details.TargetDetails.TargetDB
targetProfileString := fmt.Sprintf("project=%v,instance=%v,dbName=%v,dialect=%v", sessionState.SpannerProjectId, sessionState.SpannerInstanceID, details.TargetDetails.TargetDB, sessionState.Dialect)
if details.MigrationType == helpers.LOW_DOWNTIME_MIGRATION && !details.IsSharded {
fileName := sessionState.Conv.Audit.MigrationRequestId + "-streaming.json"
sessionState.Bucket, sessionState.RootPath, err = conversion.GetBucketFromDatastreamProfile(sessionState.GCPProjectID, sessionState.Region, details.TargetDetails.TargetConnectionProfileName)
if err != nil {
return profiles.SourceProfile{}, profiles.TargetProfile{}, utils.IOStreams{}, "", fmt.Errorf("error while getting target bucket: %v", err)
}
err = createStreamingCfgFile(sessionState, details, fileName)
if err != nil {
return profiles.SourceProfile{}, profiles.TargetProfile{}, utils.IOStreams{}, "", fmt.Errorf("error while creating streaming config file: %v", err)
}
sourceProfileString = sourceProfileString + fmt.Sprintf(",streamingCfg=%v", fileName)
} else {
sessionState.Conv.Audit.MigrationRequestId, _ = utils.GenerateName("smt-job")
sessionState.Conv.Audit.MigrationRequestId = strings.Replace(sessionState.Conv.Audit.MigrationRequestId, "_", "-", -1)
if details.TargetDetails.GcsMetadataPath.GcsBucketName != "" {
if details.TargetDetails.GcsMetadataPath.GcsBucketRootPath == "" {
sessionState.Bucket = details.TargetDetails.GcsMetadataPath.GcsBucketName
if !strings.HasSuffix(sessionState.Bucket, "/") {
sessionState.RootPath = "/"
} else {
sessionState.RootPath = ""
}
} else {
sessionState.Bucket = details.TargetDetails.GcsMetadataPath.GcsBucketName
if !strings.HasSuffix(sessionState.Bucket, "/") {
sessionState.Bucket = sessionState.Bucket + "/"
}
sessionState.RootPath = details.TargetDetails.GcsMetadataPath.GcsBucketRootPath
if !strings.HasSuffix(sessionState.RootPath, "/") {
sessionState.RootPath = sessionState.RootPath + "/"
}
}
} else {
sessionState.Bucket = strings.ToLower(sessionState.Conv.Audit.MigrationRequestId)
sessionState.RootPath = "/"
}
}
source, err := helpers.GetSourceDatabaseFromDriver(sessionState.Driver)
if err != nil {
return profiles.SourceProfile{}, profiles.TargetProfile{}, utils.IOStreams{}, "", fmt.Errorf("error while getting source database: %v", err)
}
sourceProfile, targetProfile, ioHelper, dbName, err := cmd.PrepareMigrationPrerequisites(sourceProfileString, targetProfileString, source)
if err != nil && sourceDBConnectionDetails.ConnectionType != helpers.SESSION_FILE_MODE {
return profiles.SourceProfile{}, profiles.TargetProfile{}, utils.IOStreams{}, "", fmt.Errorf("error while preparing prerequisites for migration: %v", err)
}
sourceProfile.Driver = sessionState.Driver
if details.MigrationType == helpers.LOW_DOWNTIME_MIGRATION {
sourceProfile.Config.ConfigType = constants.DATAFLOW_MIGRATION
}
return sourceProfile, targetProfile, ioHelper, dbName, nil
}