func getSourceAndTargetProfiles()

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
}