You are an expert in writing code in many different languages. Your goal is to perform code completion for the following code, keeping in mind the rest of the code and the file meta data.
    Metadata details:
    filename: relfile_storage_map.go
    path of file: ./repos/wal-g/internal/databases/greenplum
    
    the code of the file until where you have to start completion: package greenplum

import (
	"github.com/jackc/pgx"
	"github.com/pkg/errors"
	"github.com/wal-g/tracelog"
	"github.com/wal-g/wal-g/internal/databases/postgres"
	"github.com/wal-g/wal-g/internal/walparser"
)

type RelStorageType byte

const (
	AppendOptimized RelStorageType = 'a'
	ColumnOriented  RelStorageType = 'c'
)

func NewAoRelFileMetadata(relNameMd5 string, storageType RelStorageType, eof, modCount int64) AoRelFileMetadata {
	return AoRelFileMetadata{
		relNameMd5:  relNameMd5,
		storageType: storageType,
		eof:         eof,
		modCount:    modCount,
	}
}

type AoRelFileMetadata 
    
func (storageMap *AoRelFileStorageMap) getAOStorageMetadata(filePath string) (bool, AoRelFileMetadata, *walparser.BlockLocation) {
	relFileNode, err := postgres.GetRelFileNodeFrom(filePath)
	if err != nil {
		// looks like this is not the relfile at all => false
		return false, AoRelFileMetadata{}, nil
	}
	blockNo, err := postgres.GetRelFileIDFrom(filePath)
	if err != nil {
		// same as above, but this is some unusual / unexpected error, better log it
		tracelog.WarningLogger.Printf("Failed to parse blockNo for path %s: %v", filePath, err)
		return false, AoRelFileMetadata{}, nil
	}

	location := walparser.NewBlockLocation(relFileNode.SpcNode, relFileNode.DBNode, relFileNode.RelNode, uint32(blockNo))
	storageInfo, ok := (*storageMap)[*location]
	if !ok {
		// Absence of the entry does not guarantee that the relfile is not append-optimized.
		// It may have been created after the backup start.
		// Currently, we do not need to detect an AO file with 100% precision, so it is OK.
		return false, AoRelFileMetadata{}, nil
	}

	return true, storageInfo, location
}