diff --git a/api.go b/api.go index 9f5cb03..914f8ae 100644 --- a/api.go +++ b/api.go @@ -156,7 +156,20 @@ func (p Process) CallWithHeaders(funcName string, args []tasks.Arg, headers task return "", errors.Wrapf(err, "call func %s", funcName) } - return r.Signature.UUID, nil + // make sure progress is always set for once + jobID = r.Signature.UUID + jq, err := p.OpenJobQuery() + if err != nil { + return jobID, err + } + defer jq.Close() + + err = jq.SetProgress(jobID, "") + if err != nil { + return jobID, err + } + + return jobID, nil } // GetResult retrives a AsyncResult using the jobID diff --git a/api_test.go b/api_test.go index c9b6f5a..352da33 100644 --- a/api_test.go +++ b/api_test.go @@ -209,6 +209,10 @@ func ExampleProcess() { if err != nil { log.Fatal(err) } + // first progress is empty default progres + if progress == "" { + continue + } if progress != prevProgress { prevProgress = progress fmt.Println(progress) @@ -483,3 +487,31 @@ func TestProgressNoWaitNonBlock(t *testing.T) { time.Sleep(100 * time.Millisecond) jq.Close() } + +func TestProgressAlwaysSet(t *testing.T) { + p, err := New("redis://localhost:6379") + require.NoError(t, err) + task := func(ctx context.Context, msg string) (string, error) { + time.Sleep(3 * time.Second) + return "received " + msg, nil + } + + p.RegisterFunc(task) + + jobID, err := p.Invoke(task, + []tasks.Arg{ + { + Type: "string", + Value: "test invoke", + }, + }, + ) + require.NoError(t, err) + + jq, err := p.OpenJobQuery() + require.NoError(t, err) + + progress, err := jq.GetProgress(jobID) + require.NoError(t, err) + assert.Equal(t, progress, "") +}