diff --git a/backend/app/service/backup_redis.go b/backend/app/service/backup_redis.go index 6dbb5134f..9461d0228 100644 --- a/backend/app/service/backup_redis.go +++ b/backend/app/service/backup_redis.go @@ -38,7 +38,11 @@ func (u *BackupService) RedisBackup() error { timeNow := time.Now().Format("20060102150405") fileName := fmt.Sprintf("%s.rdb", timeNow) if appendonly == "yes" { - fileName = fmt.Sprintf("%s.tar.gz", timeNow) + if redisInfo.Version == "6.0.16" { + fileName = fmt.Sprintf("%s.aof", timeNow) + } else { + fileName = fmt.Sprintf("%s.tar.gz", timeNow) + } } backupDir := fmt.Sprintf("%s/database/redis/%s", localDir, redisInfo.Name) if err := handleRedisBackup(redisInfo, backupDir, fileName); err != nil { @@ -90,6 +94,13 @@ func handleRedisBackup(redisInfo *repo.RootInfo, backupDir, fileName string) err } return nil } + if strings.HasSuffix(fileName, ".aof") { + stdout1, err := cmd.Execf("docker cp %s:/data/appendonly.aof %s/%s", redisInfo.ContainerName, backupDir, fileName) + if err != nil { + return errors.New(string(stdout1)) + } + return nil + } stdout1, err1 := cmd.Execf("docker cp %s:/data/dump.rdb %s/%s", redisInfo.ContainerName, backupDir, fileName) if err1 != nil { @@ -108,15 +119,27 @@ func handleRedisRecover(redisInfo *repo.RootInfo, recoverFile string, isRollback if err != nil { return err } - if (appendonly == "yes" && !strings.HasSuffix(recoverFile, ".tar.gz")) || (appendonly != "yes" && !strings.HasSuffix(recoverFile, ".rdb")) { - return buserr.New(constant.ErrTypeOfRedis) + + if appendonly == "yes" { + if !strings.HasSuffix(recoverFile, ".tar.gz") || !strings.HasSuffix(recoverFile, ".aof") { + return buserr.New(constant.ErrTypeOfRedis) + } + } else { + if !strings.HasSuffix(recoverFile, ".rdb") { + return buserr.New(constant.ErrTypeOfRedis) + } } + global.LOG.Infof("appendonly in redis conf is %s", appendonly) isOk := false if !isRollback { - suffix := "tar.gz" - if appendonly != "yes" { - suffix = "rdb" + suffix := "rdb" + if appendonly == "yes" { + if redisInfo.Version == "6.0.16" { + suffix = "aof" + } else { + suffix = "tar.gz" + } } rollbackFile := fmt.Sprintf("%s/original/database/redis/%s_%s.%s", global.CONF.System.BaseDir, redisInfo.Name, time.Now().Format("20060102150405"), suffix) if err := handleRedisBackup(redisInfo, path.Dir(rollbackFile), path.Base(rollbackFile)); err != nil { @@ -140,17 +163,21 @@ func handleRedisRecover(redisInfo *repo.RootInfo, recoverFile string, isRollback if _, err := compose.Down(composeDir + "/docker-compose.yml"); err != nil { return err } - if appendonly == "yes" { + if appendonly == "yes" && redisInfo.Version == "7.0.5" { redisDataDir := fmt.Sprintf("%s/%s/%s/data", constant.AppInstallDir, "redis", redisInfo.Name) if err := handleUnTar(recoverFile, redisDataDir); err != nil { return err } } else { + itemName := "dump.rdb" + if redisInfo.Version == "6.0.16" { + itemName = "appendonly.aof" + } input, err := ioutil.ReadFile(recoverFile) if err != nil { return err } - if err = ioutil.WriteFile(composeDir+"/data/dump.rdb", input, 0640); err != nil { + if err = ioutil.WriteFile(composeDir+"/data/"+itemName, input, 0640); err != nil { return err } } diff --git a/backend/app/service/cronjob_helper.go b/backend/app/service/cronjob_helper.go index d7cdf46c8..0c0042be0 100644 --- a/backend/app/service/cronjob_helper.go +++ b/backend/app/service/cronjob_helper.go @@ -135,7 +135,7 @@ func (u *CronjobService) HandleBackup(cronjob *model.Cronjob, startTime time.Tim fullPath := fmt.Sprintf("%s/%s", record.FileDir, fileName) if backup.Type == "LOCAL" { - u.HandleRmExpired(backup.Type, record.FileDir, cronjob, nil) + u.HandleRmExpired(backup.Type, backupDir, cronjob, nil) return fullPath, nil } diff --git a/backend/app/service/docker.go b/backend/app/service/docker.go index f984097b5..4fd1fd7c2 100644 --- a/backend/app/service/docker.go +++ b/backend/app/service/docker.go @@ -40,10 +40,10 @@ type daemonJsonItem struct { func (u *DockerService) LoadDockerStatus() string { status := constant.StatusRunning - // stdout, err := cmd.Exec("systemctl is-active docker") - // if string(stdout) != "active\n" || err != nil { - // status = constant.Stopped - // } + stdout, err := cmd.Exec("systemctl is-active docker") + if string(stdout) != "active\n" || err != nil { + status = constant.Stopped + } return status } diff --git a/frontend/src/views/container/network/create/index.vue b/frontend/src/views/container/network/create/index.vue index a27849a33..d59f34583 100644 --- a/frontend/src/views/container/network/create/index.vue +++ b/frontend/src/views/container/network/create/index.vue @@ -92,7 +92,7 @@ const handleClose = () => { }; const rules = reactive({ - name: [Rules.requiredInput, Rules.name], + name: [Rules.requiredInput, Rules.imageName], driver: [Rules.requiredSelect], }); diff --git a/frontend/src/views/cronjob/record/index.vue b/frontend/src/views/cronjob/record/index.vue index d77fe111e..d018d8e0d 100644 --- a/frontend/src/views/cronjob/record/index.vue +++ b/frontend/src/views/cronjob/record/index.vue @@ -134,7 +134,7 @@ {{ dialogData.rowData!.targetDir }}