This is an automated email from the ASF dual-hosted git repository.

miaoliyao pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/shardingsphere-on-cloud.git


The following commit(s) were added to refs/heads/main by this push:
     new ef4cf32  feat: instance add\del method and test it (#210)
ef4cf32 is described below

commit ef4cf32fdd40299744ef2ae70ba692cdeb851386
Author: lltgo <[email protected]>
AuthorDate: Fri Feb 17 16:02:16 2023 +0800

    feat: instance add\del method and test it (#210)
---
 pitr/agent/internal/cons/error.go         |  2 ++
 pitr/agent/internal/pkg/opengauss.go      | 36 ++++++++++++++++++++++++++++---
 pitr/agent/internal/pkg/opengauss_test.go | 33 ++++++++++++++++++++++++----
 3 files changed, 64 insertions(+), 7 deletions(-)

diff --git a/pitr/agent/internal/cons/error.go 
b/pitr/agent/internal/cons/error.go
index d1feb14..fd5a349 100644
--- a/pitr/agent/internal/cons/error.go
+++ b/pitr/agent/internal/cons/error.go
@@ -28,4 +28,6 @@ var (
        CmdOperateFailed       = xerror.New(10003, "Command operate failed.")
        BackupPathAlreadyExist = xerror.New(10004, "The backup path already 
exists.")
        NoPermission           = xerror.New(10005, "No permission to operate.")
+       InstanceAlreadyExist   = xerror.New(10006, "The instance already 
exist.")
+       InstanceNotExist       = xerror.New(10007, "The instance not exist.")
 )
diff --git a/pitr/agent/internal/pkg/opengauss.go 
b/pitr/agent/internal/pkg/opengauss.go
index bcfcbec..bcbe90d 100644
--- a/pitr/agent/internal/pkg/opengauss.go
+++ b/pitr/agent/internal/pkg/opengauss.go
@@ -38,8 +38,12 @@ const (
        _backupFmt    = "gs_probackup backup --backup-path=%s --instance=%s 
--backup-mode=%s --pgdata=%s 2>&1"
        _showFmt      = "gs_probackup show --instance=%s --backup-path=%s 
--backup-id=%s --format=json 2>&1"
        _delBackupFmt = "gs_probackup delete --backup-path=%s --instance=%s 
--backup-id=%s 2>&1"
-       _initFmt      = "gs_probackup init --backup-path=%s 2>&1"
-       _deinitFmt    = "rm -r %s"
+
+       _initFmt   = "gs_probackup init --backup-path=%s 2>&1"
+       _deinitFmt = "rm -r %s"
+
+       _addInstanceFmt = "gs_probackup add-instance --backup-path=%s 
--instance=%s --pgdata=%s 2>&1"
+       _delInstanceFmt = "gs_probackup del-instance --backup-path=%s 
--instance=%s 2>&1"
 )
 
 func (og *openGauss) AsyncBackup(backupPath, instanceName, backupMode, pgData 
string) (string, error) {
@@ -100,7 +104,7 @@ func (og *openGauss) delBackup(backupPath, instanceName, 
backupID string) error
        return nil
 }
 
-func (og *openGauss) init(backupPath string) error {
+func (og *openGauss) Init(backupPath string) error {
        cmd := fmt.Sprintf(_initFmt, backupPath)
        _, err := cmds.Exec(og.shell, cmd)
        // already exist and it's not empty
@@ -113,6 +117,32 @@ func (og *openGauss) init(backupPath string) error {
        return nil
 }
 
+func (og *openGauss) AddInstance(backupPath, instancee, pgData string) error {
+       cmd := fmt.Sprintf(_addInstanceFmt, backupPath, instancee, pgData)
+       _, err := cmds.Exec(og.shell, cmd)
+       // already exist and it's not empty
+       if errors.Is(err, cons.CmdOperateFailed) {
+               return cons.InstanceAlreadyExist
+       }
+       if err != nil {
+               return fmt.Errorf("cmds.Exec[shell=%s,cmd=%s] return err=%w", 
og.shell, cmd, err)
+       }
+       return nil
+}
+
+func (og *openGauss) DelInstance(backupPath, instancee string) error {
+       cmd := fmt.Sprintf(_delInstanceFmt, backupPath, instancee)
+       _, err := cmds.Exec(og.shell, cmd)
+       // already exist and it's not empty
+       if errors.Is(err, cons.CmdOperateFailed) {
+               return cons.InstanceNotExist
+       }
+       if err != nil {
+               return fmt.Errorf("cmds.Exec[shell=%s,cmd=%s] return err=%w", 
og.shell, cmd, err)
+       }
+       return nil
+}
+
 func (og *openGauss) deinit(backupPath string) error {
        if !strings.HasPrefix(backupPath, "/home/omm/") {
                return cons.NoPermission
diff --git a/pitr/agent/internal/pkg/opengauss_test.go 
b/pitr/agent/internal/pkg/opengauss_test.go
index 02b33cd..73c54d2 100644
--- a/pitr/agent/internal/pkg/opengauss_test.go
+++ b/pitr/agent/internal/pkg/opengauss_test.go
@@ -80,17 +80,17 @@ var _ = Describe("OpenGauss,requires opengauss 
environment", func() {
        })
 
        Context("Init and deinit", func() {
-               It("init backup and clean up the env", func() {
+               It("Init backup and clean up the env", func() {
                        og := &openGauss{
                                shell: "/bin/sh",
                        }
 
                        data2 := "/home/omm/data2"
 
-                       err := og.init(data2)
+                       err := og.Init(data2)
                        Expect(err).To(BeNil())
 
-                       err = og.init(data2)
+                       err = og.Init(data2)
                        Expect(err).NotTo(BeNil())
                        Expect(errors.Is(err, 
cons.BackupPathAlreadyExist)).To(BeTrue())
 
@@ -98,7 +98,7 @@ var _ = Describe("OpenGauss,requires opengauss environment", 
func() {
                        Expect(err).To(BeNil())
 
                        // repeat validation
-                       err = og.init(data2)
+                       err = og.Init(data2)
                        Expect(err).To(BeNil())
                        err = og.deinit(data2)
                        Expect(err).To(BeNil())
@@ -116,4 +116,29 @@ var _ = Describe("OpenGauss,requires opengauss 
environment", func() {
                        Expect(errors.Is(err, cons.NoPermission)).To(BeTrue())
                })
        })
+
+       Context("AddInstance and DelInstance", func() {
+               It("instance:add and delete", func() {
+                       og := &openGauss{
+                               shell: "/bin/sh",
+                       }
+
+                       var (
+                               backupPath = "/home/omm/data"
+                               instance   = "ins-test-1"
+                               pgData     = 
"/data/opengauss/3.1.1/data/single_node/"
+                       )
+                       err := og.AddInstance(backupPath, instance, pgData)
+                       Expect(err).To(BeNil())
+
+                       err = og.AddInstance(backupPath, instance, pgData)
+                       Expect(errors.Is(err, 
cons.InstanceAlreadyExist)).To(BeTrue())
+
+                       err = og.DelInstance(backupPath, instance)
+                       Expect(err).To(BeNil())
+
+                       err = og.DelInstance(backupPath, instance)
+                       Expect(errors.Is(err, 
cons.InstanceNotExist)).To(BeTrue())
+               })
+       })
 })

Reply via email to