func (a *apiServer) CreateJob(ctx context.Context, request *pps.CreateJobRequest) (response *pps.Job, err error) { defer func(start time.Time) { a.Log(request, response, err, time.Since(start)) }(time.Now()) persistJobInfo := &persist.JobInfo{ Input: request.Input, OutputParent: request.OutputParent, } if request.GetTransform() != nil { persistJobInfo.Spec = &persist.JobInfo_Transform{ Transform: request.GetTransform(), } } else if request.GetPipeline() != nil { persistJobInfo.Spec = &persist.JobInfo_PipelineName{ PipelineName: request.GetPipeline().Name, } } else { return nil, fmt.Errorf("pachyderm.pps.jobserver: both transform and pipeline are not set on %v", request) } persistJobInfo.JobId = uuid.NewWithoutDashes() persistJobInfo.CreatedAt = prototime.TimeToTimestamp(time.Now()) if a.kubeClient == nil { return nil, fmt.Errorf("pachyderm.pps.jobserver: no job backend") } if _, err := a.kubeClient.Jobs(api.NamespaceDefault).Create(job(persistJobInfo)); err != nil { return nil, err } _, err = a.persistAPIClient.CreateJobInfo(ctx, persistJobInfo) if err != nil { return nil, err } return &pps.Job{ Id: persistJobInfo.JobId, }, nil }
func (a *apiServer) CreateJob(ctx context.Context, request *pps.CreateJobRequest) (response *pps.Job, err error) { defer func(start time.Time) { a.Log(request, response, err, time.Since(start)) }(time.Now()) persistJobInfo := &persist.JobInfo{ Input: request.Input, OutputParent: request.OutputParent, } if request.GetTransform() != nil { persistJobInfo.Spec = &persist.JobInfo_Transform{ Transform: request.GetTransform(), } } else if request.GetPipeline() != nil { persistJobInfo.Spec = &persist.JobInfo_PipelineName{ PipelineName: request.GetPipeline().Name, } } else { return nil, fmt.Errorf("pachyderm.pps.jobserver: both transform and pipeline are not set on %v", request) } persistJobInfo, err = a.persistAPIClient.CreateJobInfo(ctx, persistJobInfo) if err != nil { return nil, err } if err := a.Start(persistJobInfo); err != nil { // TODO: proper rollback if _, rollbackErr := a.persistAPIClient.DeleteJobInfo( ctx, &pps.Job{ Id: persistJobInfo.JobId, }, ); rollbackErr != nil { return nil, fmt.Errorf("%v", []error{err, rollbackErr}) } return nil, err } return &pps.Job{ Id: persistJobInfo.JobId, }, nil }