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 c578da7 feat: gs_ctl start|stop and test it (#211)
c578da7 is described below
commit c578da715232cf97408928b2778847e21ed009a0
Author: lltgo <[email protected]>
AuthorDate: Fri Feb 17 17:41:43 2023 +0800
feat: gs_ctl start|stop and test it (#211)
* feat: gs_ctl start|stop and test it
* chore:update error code
---
pitr/agent/internal/cons/error.go | 2 ++
pitr/agent/internal/pkg/opengauss.go | 39 +++++++++++++++++++++++++++----
pitr/agent/internal/pkg/opengauss_test.go | 18 ++++++++++++++
3 files changed, 54 insertions(+), 5 deletions(-)
diff --git a/pitr/agent/internal/cons/error.go
b/pitr/agent/internal/cons/error.go
index fd5a349..3868f65 100644
--- a/pitr/agent/internal/cons/error.go
+++ b/pitr/agent/internal/cons/error.go
@@ -30,4 +30,6 @@ var (
NoPermission = xerror.New(10005, "No permission to operate.")
InstanceAlreadyExist = xerror.New(10006, "The instance already
exist.")
InstanceNotExist = xerror.New(10007, "The instance not exist.")
+ StartOpenGaussFailed = xerror.New(10008, "Failed to start opengauss.")
+ StopOpenGaussFailed = xerror.New(10009, "Failed to stop opengauss.")
)
diff --git a/pitr/agent/internal/pkg/opengauss.go
b/pitr/agent/internal/pkg/opengauss.go
index bcbe90d..5437995 100644
--- a/pitr/agent/internal/pkg/opengauss.go
+++ b/pitr/agent/internal/pkg/opengauss.go
@@ -44,6 +44,9 @@ const (
_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"
+
+ _startOpenGaussFmt = "gs_ctl start --pgdata=%s"
+ _stopOpenGaussFmt = "gs_ctl stop --pgdata=%s"
)
func (og *openGauss) AsyncBackup(backupPath, instanceName, backupMode, pgData
string) (string, error) {
@@ -117,6 +120,18 @@ func (og *openGauss) Init(backupPath string) error {
return nil
}
+func (og *openGauss) deinit(backupPath string) error {
+ if !strings.HasPrefix(backupPath, "/home/omm/") {
+ return cons.NoPermission
+ }
+
+ cmd := fmt.Sprintf(_deinitFmt, backupPath)
+ if _, err := cmds.Exec(og.shell, cmd); err != nil {
+ return fmt.Errorf("cmds.Exec[shell=%s,cmd=%s] return err=%w",
og.shell, cmd, err)
+ }
+ return nil
+}
+
func (og *openGauss) AddInstance(backupPath, instancee, pgData string) error {
cmd := fmt.Sprintf(_addInstanceFmt, backupPath, instancee, pgData)
_, err := cmds.Exec(og.shell, cmd)
@@ -143,13 +158,27 @@ func (og *openGauss) DelInstance(backupPath, instancee
string) error {
return nil
}
-func (og *openGauss) deinit(backupPath string) error {
- if !strings.HasPrefix(backupPath, "/home/omm/") {
- return cons.NoPermission
+func (og *openGauss) Start(pgData string) error {
+ cmd := fmt.Sprintf(_startOpenGaussFmt, pgData)
+ _, err := cmds.Exec(og.shell, cmd)
+ // already exist and it's not empty
+ if errors.Is(err, cons.CmdOperateFailed) {
+ return cons.StartOpenGaussFailed
+ }
+ if err != nil {
+ return fmt.Errorf("cmds.Exec[shell=%s,cmd=%s] return err=%w",
og.shell, cmd, err)
}
+ return nil
+}
- cmd := fmt.Sprintf(_deinitFmt, backupPath)
- if _, err := cmds.Exec(og.shell, cmd); err != nil {
+func (og *openGauss) Stop(pgData string) error {
+ cmd := fmt.Sprintf(_stopOpenGaussFmt, pgData)
+ _, err := cmds.Exec(og.shell, cmd)
+ // already exist and it's not empty
+ if errors.Is(err, cons.CmdOperateFailed) {
+ return cons.StopOpenGaussFailed
+ }
+ if err != nil {
return fmt.Errorf("cmds.Exec[shell=%s,cmd=%s] return err=%w",
og.shell, cmd, err)
}
return nil
diff --git a/pitr/agent/internal/pkg/opengauss_test.go
b/pitr/agent/internal/pkg/opengauss_test.go
index 73c54d2..fef26e8 100644
--- a/pitr/agent/internal/pkg/opengauss_test.go
+++ b/pitr/agent/internal/pkg/opengauss_test.go
@@ -141,4 +141,22 @@ var _ = Describe("OpenGauss,requires opengauss
environment", func() {
Expect(errors.Is(err,
cons.InstanceNotExist)).To(BeTrue())
})
})
+
+ Context("Start and Stop", func() {
+ It("start and stop:may fail if no instance exists", func() {
+ og := &openGauss{
+ shell: "/bin/sh",
+ }
+
+ var pgData = "/data/opengauss/3.1.1/data/single_node/"
+ err := og.Stop(pgData)
+ Expect(err).To(BeNil())
+
+ err = og.Stop(pgData)
+ Expect(errors.Is(err, cons.StopOpenGaussFailed)).To(BeTrue())
+
+ err = og.Start(pgData)
+ Expect(err).To(BeNil())
+ })
+ })
})