I am pretty new to cadence and was trying to implement hello world but getting below error
2023-10-05T10:30:50.695+0530 INFO internal/internal_worker.go:834 Started Workflow Worker {"Domain": "test-domain", "TaskList": "cadence-samples-worker", "WorkerID": "74592@BLRETV-C02GL33D.local@cadence-samples-worker@256dcb1f-1769-4183-9604-174160f79e7a"}
2023-10-05T10:30:50.724+0530 INFO internal/internal_worker.go:859 Started Activity Worker {"Domain": "test-domain", "TaskList": "cadence-samples-worker", "WorkerID": "74592@BLRETV-C02GL33D.local@cadence-samples-worker@256dcb1f-1769-4183-9604-174160f79e7a"}
2023-10-05T10:30:50.724+0530 INFO cadence-test/worker.go:49 Started Worker. {"worker": "cadence-samples-worker"}
2023-10-05T10:30:50.724+0530 ERROR cadence-test/trigger.go:32 Failed to create workflow {"error": "BadRequestError{Message: missing TTL}"}
Below is my code in Go
func startWorkflow() {
// This workflow ID can be user business logic identifier as well.
workflowID := "cron_" + uuid.New().String()
startTime := int32(60)
domainName := "test-domain"
logger, workflowClient := BuildLogger(), BuildCadenceClient()
startRequest := shared.StartWorkflowExecutionRequest{
WorkflowId: &workflowID,
Domain: &domainName,
TaskList: &shared.TaskList{
Name: &domainName,
},
ExecutionStartToCloseTimeoutSeconds: &startTime,
TaskStartToCloseTimeoutSeconds: &startTime,
//DecisionTaskStartToCloseTimeout: time.Minute,
}
we, err := workflowClient.StartWorkflowExecution(context.Background(), &startRequest)
if err != nil {
logger.Error("Failed to create workflow", zap.Error(err))
panic("Failed to create workflow.")
} else {
logger.Info("Started Workflow", zap.String("WorkflowID", *we.RunId), zap.String("RunID", *we.RunId))
}
}
These are the dependencies in my go.mod
module cadence-test
go 1.21
require (
github.com/google/uuid v1.3.0
github.com/uber-go/tally v3.3.15+incompatible
github.com/uber/cadence-idl v0.0.0-20230905165949-03586319b849
go.uber.org/cadence v1.0.2
go.uber.org/yarpc v1.70.4
go.uber.org/zap v1.13.0
)
require (
github.com/BurntSushi/toml v0.4.1 // indirect
github.com/apache/thrift v0.16.0 // indirect
github.com/beorn7/perks v1.0.1 // indirect
github.com/cespare/xxhash/v2 v2.1.1 // indirect
github.com/cristalhq/jwt/v3 v3.1.0 // indirect
github.com/davecgh/go-spew v1.1.1 // indirect
github.com/facebookgo/clock v0.0.0-20150410010913-600d898af40a // indirect
github.com/go-ole/go-ole v1.2.6 // indirect
github.com/gogo/googleapis v1.3.2 // indirect
github.com/gogo/protobuf v1.3.2 // indirect
github.com/gogo/status v1.1.0 // indirect
github.com/golang/mock v1.6.0 // indirect
github.com/golang/protobuf v1.5.2 // indirect
github.com/google/go-cmp v0.5.8 // indirect
github.com/kr/pretty v0.3.0 // indirect
github.com/marusama/semaphore/v2 v2.5.0 // indirect
github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369 // indirect
github.com/opentracing/opentracing-go v1.2.0 // indirect
github.com/pborman/uuid v0.0.0-20180906182336-adf5a7427709 // indirect
github.com/pmezard/go-difflib v1.0.0 // indirect
github.com/prometheus/client_golang v1.11.1 // indirect
github.com/prometheus/client_model v0.2.0 // indirect
github.com/prometheus/common v0.26.0 // indirect
github.com/prometheus/procfs v0.6.0 // indirect
github.com/robfig/cron v1.2.0 // indirect
github.com/shirou/gopsutil v3.21.11+incompatible // indirect
github.com/stretchr/objx v0.5.0 // indirect
github.com/stretchr/testify v1.8.1 // indirect
github.com/tklauser/go-sysconf v0.3.11 // indirect
github.com/tklauser/numcpus v0.6.0 // indirect
github.com/uber-go/mapdecode v1.0.0 // indirect
github.com/uber/tchannel-go v1.33.0 // indirect
github.com/yusufpapurcu/wmi v1.2.3 // indirect
go.uber.org/atomic v1.10.0 // indirect
go.uber.org/dig v1.10.0 // indirect
go.uber.org/fx v1.13.1 // indirect
go.uber.org/multierr v1.6.0 // indirect
go.uber.org/net/metrics v1.3.0 // indirect
go.uber.org/thriftrw v1.29.2 // indirect
golang.org/x/exp/typeparams v0.0.0-20220218215828-6cf2b201936e // indirect
golang.org/x/lint v0.0.0-20210508222113-6edffad5e616 // indirect
golang.org/x/mod v0.8.0 // indirect
golang.org/x/net v0.14.0 // indirect
golang.org/x/sys v0.11.0 // indirect
golang.org/x/text v0.12.0 // indirect
golang.org/x/time v0.0.0-20191024005414-555d28b269f0 // indirect
golang.org/x/tools v0.6.0 // indirect
google.golang.org/genproto v0.0.0-20220617124728-180714bec0ad // indirect
google.golang.org/grpc v1.47.0 // indirect
google.golang.org/protobuf v1.28.0 // indirect
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c // indirect
gopkg.in/yaml.v2 v2.4.0 // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect
honnef.co/go/tools v0.3.2 // indirect
)
Can someone help with this?
The issue comes from this line we, err := workflowClient.StartWorkflowExecution(context.Background(), &startRequest)
This is actually not a Cadence issue but rather a yarpc issue. yarpc requires a context with timeout so if you change to use context.WithTimeout
, you should fix your first problem.
Another issue I notice is that in the request, you may miss the RequestID
field. It must be a UUID so simply passing a string would not work. However, if you uses the Cadence CLI to directly invoke the workflow, you don't need to specify them. The CLI simplifies some input parameters and this inconsistency is expected.