Skip to content

Commit 4e7c152

Browse files
authored
feat: fetch info for requested backup runs (#112)
* fix: add mapstructure to telemetryconfig * feat: support replay and backup for all downstream namespaces * feat: add ignored jobs/resources list to replay and backup dry run * refactor: remove GetAllWithNamespace and reuse GetJobNamespaces * refactor: change backup result table name postfix to use timestamp instead of uuid * refactor: revert backup table to use uuid suffix * refactor: backup table name to use time suffix and add additional infos in list * feat: add backup detail subcommand * feat: store replay ignore downstream option and show in replay list * refactor: remove ignore downstream usage from replay * refactor: rename backup detail and list method in datastore, catch error in backup detail * refactor: rename to GetBackup and CreateBackup
1 parent 12d3877 commit 4e7c152

27 files changed

+2856
-1494
lines changed

Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ NAME = "github.com/odpf/optimus"
55
LAST_COMMIT := $(shell git rev-parse --short HEAD)
66
LAST_TAG := "$(shell git rev-list --tags --max-count=1)"
77
OPMS_VERSION := "$(shell git describe --tags ${LAST_TAG})-next"
8-
PROTON_COMMIT := "2e1bc719ec2382cd5c135b27b889224b71b06785"
8+
PROTON_COMMIT := "ae233f3d942e8e72e2ec3f66ed404c57390d37fb"
99

1010
all: build
1111

api/handler/v1/runtime.go

Lines changed: 56 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -929,6 +929,7 @@ func (sv *RuntimeServiceServer) ListReplays(ctx context.Context, req *pb.ListRep
929929
StartDate: timestamppb.New(replaySpec.StartDate),
930930
EndDate: timestamppb.New(replaySpec.EndDate),
931931
State: replaySpec.Status,
932+
Config: replaySpec.Config,
932933
CreatedAt: timestamppb.New(replaySpec.CreatedAt),
933934
})
934935
}
@@ -1050,7 +1051,7 @@ func (sv *RuntimeServiceServer) BackupDryRun(ctx context.Context, req *pb.Backup
10501051
}, nil
10511052
}
10521053

1053-
func (sv *RuntimeServiceServer) Backup(ctx context.Context, req *pb.BackupRequest) (*pb.BackupResponse, error) {
1054+
func (sv *RuntimeServiceServer) CreateBackup(ctx context.Context, req *pb.CreateBackupRequest) (*pb.CreateBackupResponse, error) {
10541055
projectSpec, err := sv.getProjectSpec(ctx, req.ProjectName)
10551056
if err != nil {
10561057
return nil, err
@@ -1096,7 +1097,7 @@ func (sv *RuntimeServiceServer) Backup(ctx context.Context, req *pb.BackupReques
10961097
return nil, status.Errorf(codes.Internal, "error while doing backup: %v", err)
10971098
}
10981099

1099-
return &pb.BackupResponse{
1100+
return &pb.CreateBackupResponse{
11001101
Urn: result.Resources,
11011102
IgnoredResources: result.IgnoredResources,
11021103
}, nil
@@ -1108,7 +1109,7 @@ func (sv *RuntimeServiceServer) ListBackups(ctx context.Context, req *pb.ListBac
11081109
return nil, err
11091110
}
11101111

1111-
results, err := sv.resourceSvc.ListBackupResources(ctx, projectSpec, req.DatastoreName)
1112+
results, err := sv.resourceSvc.ListResourceBackups(ctx, projectSpec, req.DatastoreName)
11121113
if err != nil {
11131114
return nil, status.Errorf(codes.Internal, "error while getting backup list: %v", err)
11141115
}
@@ -1120,13 +1121,65 @@ func (sv *RuntimeServiceServer) ListBackups(ctx context.Context, req *pb.ListBac
11201121
ResourceName: result.Resource.Name,
11211122
CreatedAt: timestamppb.New(result.CreatedAt),
11221123
Description: result.Description,
1124+
Config: result.Config,
11231125
})
11241126
}
11251127
return &pb.ListBackupsResponse{
11261128
Backups: backupList,
11271129
}, nil
11281130
}
11291131

1132+
func (sv *RuntimeServiceServer) GetBackup(ctx context.Context, req *pb.GetBackupRequest) (*pb.GetBackupResponse, error) {
1133+
projectSpec, err := sv.getProjectSpec(ctx, req.ProjectName)
1134+
if err != nil {
1135+
return nil, err
1136+
}
1137+
1138+
uuid, err := uuid.Parse(req.Id)
1139+
if err != nil {
1140+
return nil, status.Errorf(codes.InvalidArgument, "error while parsing backup ID: %v", err)
1141+
}
1142+
1143+
backupDetail, err := sv.resourceSvc.GetResourceBackup(ctx, projectSpec, req.DatastoreName, uuid)
1144+
if err != nil {
1145+
if err == store.ErrResourceNotFound {
1146+
return nil, status.Errorf(codes.NotFound, "%s: backup with ID %s not found", err.Error(), uuid.String())
1147+
}
1148+
return nil, status.Errorf(codes.Internal, "error while getting backup detail: %v", err)
1149+
}
1150+
1151+
var results []string
1152+
for _, result := range backupDetail.Result {
1153+
backupResult, ok := result.(map[string]interface{})
1154+
if !ok {
1155+
return nil, status.Errorf(codes.Internal, "error while parsing backup result: %v", ok)
1156+
}
1157+
1158+
backupURN, ok := backupResult[models.BackupSpecKeyURN]
1159+
if !ok {
1160+
return nil, status.Errorf(codes.Internal, "%s is not found in backup result", models.BackupSpecKeyURN)
1161+
}
1162+
1163+
backupURNStr, ok := backupURN.(string)
1164+
if !ok {
1165+
return nil, status.Errorf(codes.Internal, "invalid backup URN: %v", backupURN)
1166+
}
1167+
1168+
results = append(results, backupURNStr)
1169+
}
1170+
1171+
return &pb.GetBackupResponse{
1172+
Spec: &pb.BackupSpec{
1173+
Id: backupDetail.ID.String(),
1174+
ResourceName: backupDetail.Resource.Name,
1175+
CreatedAt: timestamppb.New(backupDetail.CreatedAt),
1176+
Description: backupDetail.Description,
1177+
Config: backupDetail.Config,
1178+
},
1179+
Urn: results,
1180+
}, nil
1181+
}
1182+
11301183
func (sv *RuntimeServiceServer) RunJob(ctx context.Context, req *pb.RunJobRequest) (*pb.RunJobResponse, error) {
11311184
// create job run in db
11321185
projSpec, err := sv.projectRepoFactory.New().GetByName(ctx, req.ProjectName)

0 commit comments

Comments
 (0)