admin-cli/cmd/backup_restore.go (98 lines of code) (raw):

/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package cmd import ( "fmt" "github.com/apache/incubator-pegasus/admin-cli/executor" "github.com/apache/incubator-pegasus/admin-cli/shell" "github.com/desertbit/grumble" ) func init() { shell.AddCommand(&grumble.Command{ Name: "backup", Help: "backup a table", Usage: "backup <TABLE_ID> <PROVIDER_TYPE> [SPECIFIC_BACKUP_PATH]", Args: func(a *grumble.Args) { a.Int("tableID", "the table ID") a.String("providerType", "the provider type of backup") a.String("backupPath", "the user specified backup path", grumble.Default("")) }, Run: func(c *grumble.Context) error { tableID := c.Args.Int("tableID") providerType := c.Args.String("providerType") backupPath := c.Args.String("backupPath") return executor.BackupTable(pegasusClient, tableID, providerType, backupPath) }, }) shell.AddCommand(&grumble.Command{ Name: "query-backup-status", Help: "query backup status", Usage: "query-backup-status <TABLE_ID> [BACKUP_ID]", Args: func(a *grumble.Args) { a.Int("tableID", "the table ID") a.Int64("backupID", "the backup ID", grumble.Default(int64(0))) }, Run: func(c *grumble.Context) error { tableID := c.Args.Int("tableID") backupID := c.Args.Int64("backupID") return executor.QueryBackupStatus(pegasusClient, tableID, backupID) }, }) shell.AddCommand(&grumble.Command{ Name: "restore", Help: "restore a table", Usage: `restore <-c|--oldClusterName OLD_CLUSTER_NAME> <-a|--oldTableName OLD_TABLE_NAME> <-i|--oldTableID OLD_TABLE_ID> <-t|--timestamp TIMESTAMP/BACKUP_ID> <-b|--providerType PROVIDER_TYPE> [-n|--newTableName NEW_TABLE_NAME] [-r|--restorePath SPECIFIC_RESTORE_PATH] [-s|--skipBadPartition SKIP_BAD_PARTITION] [-p|--policyName POLICY_NAME]`, Run: func(c *grumble.Context) error { if c.Flags.String("oldClusterName") == "" { return fmt.Errorf("oldClusterName cannot be empty") } if c.Flags.String("oldTableName") == "" { return fmt.Errorf("oldTableName cannot be empty") } if c.Flags.Int("oldTableID") == 0 { return fmt.Errorf("oldTableID cannot be empty") } if c.Flags.Int64("timestamp") == 0 { return fmt.Errorf("timestamp cannot be empty") } if c.Flags.String("providerType") == "" { return fmt.Errorf("providerType cannot be empty") } var newName string if c.Flags.String("newTableName") == "" { newName = c.Flags.String("oldTableName") } else { newName = c.Flags.String("newTableName") } oldClusterName := c.Flags.String("oldClusterName") oldTableName := c.Flags.String("oldTableName") oldTableID := c.Flags.Int("oldTableID") backupID := c.Flags.Int64("timestamp") providerType := c.Flags.String("providerType") newTableName := newName restorePath := c.Flags.String("restorePath") skipBadPartition := c.Flags.Bool("skipBadPartition") policyName := c.Flags.String("policyName") return executor.RestoreTable(pegasusClient, oldClusterName, oldTableName, oldTableID, backupID, providerType, newTableName, restorePath, skipBadPartition, policyName) }, Flags: func(f *grumble.Flags) { /*define the flags*/ f.String("c", "oldClusterName", "", "old_cluster_name, for example, onebox") f.String("a", "oldTableName", "", "old_app_name, for example, temp") f.Int("i", "oldTableID", 0, "old_app_id, for example, 1") f.Int64("t", "timestamp", 0, "timestamp or backup_id") f.String("b", "providerType", "", "backup_provider_type, for example, hdfs_zjy") f.String("n", "newTableName", "", "new_app_name") f.String("r", "restorePath", "", "restore_path") f.Bool("s", "skipBadPartition", false, "whether to skip bad partition when create new table") f.String("p", "policyName", "", "old_policy_name, only worked for restoring app created before Pegasus2.2.0") }, }) }