Skip to content

Commit

Permalink
spanner: fix the regex issue in manging backups.
Browse files Browse the repository at this point in the history
Change-Id: Iba445586c15b5499022c6df1e796c254acb9f4e9
Reviewed-on: https://code-review.googlesource.com/c/gocloud/+/53531
Reviewed-by: kokoro <noreply+kokoro@google.com>
Reviewed-by: David Symonds <dsymonds@golang.org>
  • Loading branch information
hengfengli committed Mar 19, 2020
1 parent 53138f6 commit ccd63b7
Showing 1 changed file with 8 additions and 7 deletions.
15 changes: 8 additions & 7 deletions spanner/admin/database/apiv1/backup.go
Expand Up @@ -19,14 +19,17 @@ import (
"context"
"fmt"
"regexp"
"strings"
"time"

pbt "github.com/golang/protobuf/ptypes/timestamp"
"github.com/googleapis/gax-go/v2"
databasepb "google.golang.org/genproto/googleapis/spanner/admin/database/v1"
)

var (
validDBPattern = regexp.MustCompile("^projects/(?P<project>[^/]+)/instances/(?P<instance>[^/]+)/databases/(?P<database>[^/]+)$")
)

// StartBackupOperation creates a backup of the given database. It will be stored
// as projects/<project>/instances/<instance>/backups/<backupID>. The
// backup will be automatically deleted by Cloud Spanner after its expiration.
Expand All @@ -39,17 +42,15 @@ import (
// databasePath must have the form
// projects/<project>/instances/<instance>/databases/<database>.
func (c *DatabaseAdminClient) StartBackupOperation(ctx context.Context, backupID string, databasePath string, expireTime time.Time, opts ...gax.CallOption) (*CreateBackupOperation, error) {
// Validate database path.
pattern := regexp.MustCompile("^projects/(?P<project>[^/]+)/instances/(?P<instance>[^/]+)/databases/(?P<database>[^/]+)$")
if matched := pattern.MatchString(databasePath); !matched {
m := validDBPattern.FindStringSubmatch(databasePath)
if m == nil {
return nil, fmt.Errorf("database name %q should conform to pattern %q",
databasePath, pattern.String())
databasePath, validDBPattern)
}
ts := &pbt.Timestamp{Seconds: expireTime.Unix(), Nanos: int32(expireTime.Nanosecond())}
parts := strings.Split(databasePath, "/")
// Create request from parameters.
req := &databasepb.CreateBackupRequest{
Parent: fmt.Sprintf("projects/%s/instances/%s", parts[1], parts[3]),
Parent: fmt.Sprintf("projects/%s/instances/%s", m[1], m[2]),
BackupId: backupID,
Backup: &databasepb.Backup{
Database: databasePath,
Expand Down

0 comments on commit ccd63b7

Please sign in to comment.