func migrateMetadataDb()

in webv2/session/session_service.go [82:173]


func migrateMetadataDb(projectId, instanceId string) {
	ctx := context.Background()
	spA, err := spanneraccessor.NewSpannerAccessorClientImpl(ctx)
	if err != nil {
		fmt.Println(err)
		return
	}
	oldMetadataDbUri := getOldMetadataDbUri(projectId, instanceId)
	oldMetadataDBExists, err := spA.CheckExistingDb(ctx, oldMetadataDbUri)
	if err != nil {
		fmt.Printf("could not check if oldMetadataDB exists. error=%v\n", err)
		return
	}
	if !oldMetadataDBExists {
		fmt.Println("Old metadata DB not found.")
		// If old metadata DB doesn't exist, NO_OP
		return
	}

	fmt.Println("Old metadata DB found. Starting migration")

	oldDbSpannerClient, err := spanner.NewClient(ctx, oldMetadataDbUri)
	if err != nil {
		fmt.Printf("could not connect to oldMetadataDB. error=%v\n", err)
		return
	}
	defer oldDbSpannerClient.Close()

	newDbSpannerClient, err := spanner.NewClient(ctx, helpers.GetSpannerUri(projectId, instanceId))
	if err != nil {
		fmt.Printf("could not connect to newMetadataDB. error=%v\n", err)
	}
	defer newDbSpannerClient.Close()

	query := spanner.Statement{
		SQL: `SELECT 
								SessionName,
								EditorName,
								DatabaseType,
								DatabaseName,
								Dialect,
								Notes,
								Tags,
								VersionId,
								PreviousVersionId,
								SchemaChanges,
								TO_JSON_STRING(SchemaConversionObject) AS SchemaConversionObject,
								CreateTimestamp
							FROM SchemaConversionSession `,
	}

	fmt.Println("Querying old Metadata DB.")
	rowIter := oldDbSpannerClient.Single().Query(ctx, query)

	_, err = newDbSpannerClient.ReadWriteTransaction(ctx, func(ctx context.Context, tx *spanner.ReadWriteTransaction) error {
		fmt.Println("Writing to new Metadata DB.")
		err := rowIter.Do(func(row *spanner.Row) error {
			var scs SchemaConversionSession
			err := row.ToStruct(&scs)
			if err != nil {
				fmt.Printf("could not read row and parse into struct. error=%v\n", err)
				return err
			}
			mutation, err := spanner.InsertStruct("SchemaConversionSession", scs)
			if err != nil {
				fmt.Printf("count not create Insert mutation. error=%v\n", err)
			}
			return tx.BufferWrite([]*spanner.Mutation{mutation})
		})
		return err
	})
	if err != nil {
		fmt.Printf("could not write to newMetadataDB. error=%v\n", err)
		return
	}

	fmt.Println("Successfully wrote data to new metadata DB.")
	adminClient, err := database.NewDatabaseAdminClient(ctx)
	if err != nil {
		fmt.Println(err)
		return
	}
	defer adminClient.Close()
	err = adminClient.DropDatabase(ctx, &databasepb.DropDatabaseRequest{
		Database: oldMetadataDbUri,
	})
	if err != nil {
		fmt.Printf("could not drop oldMetadataDB. error=%v\n", err)
		return
	}
	fmt.Println("Successfully dropped old metadata DB")
}