Skip to content

Commit

Permalink
Do not public message on error during process execution
Browse files Browse the repository at this point in the history
  • Loading branch information
krhubert committed May 23, 2019
1 parent 51c40d6 commit 843c633
Show file tree
Hide file tree
Showing 2 changed files with 31 additions and 33 deletions.
62 changes: 30 additions & 32 deletions api/api.go
Original file line number Diff line number Diff line change
Expand Up @@ -177,57 +177,55 @@ func (a *API) ListenExecution(service string, f *ExecutionFilter) (*ExecutionLis

// SubmitResult submits results for executionID.
func (a *API) SubmitResult(executionID string, outputs []byte, reterr error) error {
exec, stateChanged, err := a.processExecution(executionID, outputs, reterr)
if stateChanged {
// only publish to listeners when the execution's state changed.
go a.ps.Pub(exec, executionSubTopic(exec.Service.Hash))
exec, err := a.processExecution(executionID, outputs, reterr)
if err != nil {
return err
}
return err

go a.ps.Pub(exec, executionSubTopic(exec.Service.Hash))
return nil
}

// processExecution processes execution and marks it as complated or failed.
func (a *API) processExecution(executionID string, outputData []byte, reterr error) (exec *execution.Execution, stateChanged bool, err error) {
func (a *API) processExecution(executionID string, outputData []byte, reterr error) (*execution.Execution, error) {
tx, err := a.execDB.OpenTransaction()
if err != nil {
return nil, false, err
return nil, err
}

exec, err = tx.Find(executionID)
exec, err := tx.Find(executionID)
if err != nil {
tx.Discard()
return nil, false, err
return nil, err
}

if reterr != nil {
return a.saveExecution(tx, exec, reterr)
}
if err := exec.Failed(reterr); err != nil {
tx.Discard()
return nil, err
}
} else {
var o map[string]interface{}
if err := json.Unmarshal(outputData, &o); err != nil {
return nil, err
}

var outputDataMap map[string]interface{}
if err := json.Unmarshal(outputData, &outputDataMap); err != nil {
return a.saveExecution(tx, exec, fmt.Errorf("invalid output data error: %s", err))
if err := exec.Complete(o); err != nil {
return nil, err
}
}

if err := exec.Complete(outputDataMap); err != nil {
return a.saveExecution(tx, exec, err)
if err := tx.Save(exec); err != nil {
tx.Discard()
return nil, err
}

return a.saveExecution(tx, exec, nil)
}

func (a *API) saveExecution(tx database.ExecutionTransaction, exec *execution.Execution, err error) (execOut *execution.Execution, stateChanged bool, errOut error) {
if err != nil {
if errFailed := exec.Failed(err); errFailed != nil {
tx.Discard()
return exec, false, errFailed
}
}
if errSave := tx.Save(exec); errSave != nil {
if err := tx.Commit(); err != nil {
tx.Discard()
return exec, true, errSave
}
if errCommit := tx.Commit(); errCommit != nil {
return exec, true, errCommit
return nil, err
}
return exec, true, err

return exec, nil
}

// NotRunningServiceError is an error returned when the service is not running that
Expand Down
2 changes: 1 addition & 1 deletion interface/grpc/service/service_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -211,7 +211,7 @@ func TestSubmitWithInvalidJSON(t *testing.T) {
ExecutionID: executionID,
Result: &serviceapi.SubmitResultRequest_OutputData{},
})
require.Equal(t, "invalid output data error: unexpected end of JSON input", err.Error())
require.Contains(t, err.Error(), "unexpected end of JSON input")
}

func TestSubmitWithInvalidID(t *testing.T) {
Expand Down

0 comments on commit 843c633

Please sign in to comment.