serverlessworkflow / synapse

Serverless Workflow Management System (WFMS)
https://serverlessworkflow.io
Apache License 2.0
222 stars 35 forks source link

How to test greeting workflow in Synapse? #357

Closed mumubin closed 3 months ago

mumubin commented 10 months ago

I am new to serverless workflow, I want to test it's example in synapse. Here is my test example workflow.

{
  "id": "greeting",
  "name": "Greeting Workflow",
  "description": "Greet Someone",
  "version": "1.0.5",
  "specVersion": "0.8",
  "functions": [
    {
      "name": "greetingFunction",
      "operation": "https://gist.githubusercontent.com/mumubin/7d6ede1791ddd6fb705576187f91c930/raw/5357026c05ddb641de52b27d5e922856be1243e3/greeting.yaml#randomGreeting",
      "type": "rest"
    }
  ],
  "start": "Greet",
  "states": [
    {
      "name": "Greet",
      "type": "operation",
      "actions": [
        {
          "actionDataFilter": {
            "results": "${ {greeting: .greeting} }"
          },
          "functionRef": {
            "refName": "greetingFunction",
            "arguments": {
              "name": "${ .person.name }"
            }
          }
        }
      ],
      "end": true
    }
  ]
}

here is my input data

{
  "person": {
    "name": "John"
  }
}

But I got the error output

{
  "code": "NullReference",
  "message": "Failed to find an action that matches the metadata specified by the activity with id '71ca09e5-9968-4190-936c-41a938aba16a'"
}

This is the log


Input/Output
Activities
Logs
C[05:53:20] info: Synapse.Worker.Services.WorkflowRuntimeContext[0]
h Initializing the runtime context for workflow instance with id 'greeting-egi9dh3iusbnzeohsijw'...
/[05:53:20] info: Microsoft.Hosting.Lifetime[0]
6 Application started. Press Ctrl+C to shut down.
/[05:53:20] info: Microsoft.Hosting.Lifetime[0]
& Hosting environment: Production
/[05:53:20] info: Microsoft.Hosting.Lifetime[0]
 Content root path: /app
C[05:53:21] info: Synapse.Worker.Services.WorkflowRuntimeContext[0]
D Retrieving definition of workflow with id 'greeting:1.0.5'...
C[05:53:21] info: Synapse.Worker.Services.WorkflowRuntimeContext[0]
" Runtime context initialized
<[05:53:21] info: Synapse.Worker.Services.WorkflowRuntime[0]
+ Starting the workflow's execution...
O[05:53:21] info: Synapse.Worker.Services.Processors.OperationStateProcessor[0]
V Initializing activity '6659cc95-bc5a-450a-905c-7ec3a005a6b5' (type: 'State')...
M[05:53:21] fail: Synapse.Worker.Services.WorkflowActivityProcessorFactory[0]
 An error occured while creating a new processor for the activity with id '71ca09e5-9968-4190-936c-41a938aba16a': System.NullReferenceException: Failed to find an action that matches the metadata specified by the activity with id '71ca09e5-9968-4190-936c-41a938aba16a'
� at Synapse.Worker.Services.WorkflowActivityProcessorFactory.CreateActionActivityProcessor(StateDefinition state, V1WorkflowActivity activity) in /src/src/apps/Synapse.Worker/Services/WorkflowActivityProcessorFactory.cs:line 125
� at Synapse.Worker.Services.WorkflowActivityProcessorFactory.Create(V1WorkflowActivity activity) in /src/src/apps/Synapse.Worker/Services/WorkflowActivityProcessorFactory.cs:line 72
O[05:53:21] warning: Synapse.Worker.Services.Processors.OperationStateProcessor[0]
 An error occured while executing the activity '6659cc95-bc5a-450a-905c-7ec3a005a6b5' (type: 'State')/r/nDetails:/r/nSystem.NullReferenceException: Failed to find an action that matches the metadata specified by the activity with id '71ca09e5-9968-4190-936c-41a938aba16a'
� at Synapse.Worker.Services.WorkflowActivityProcessorFactory.CreateActionActivityProcessor(StateDefinition state, V1WorkflowActivity activity) in /src/src/apps/Synapse.Worker/Services/WorkflowActivityProcessorFactory.cs:line 125
� at Synapse.Worker.Services.WorkflowActivityProcessorFactory.Create(V1WorkflowActivity activity) in /src/src/apps/Synapse.Worker/Services/WorkflowActivityProcessorFactory.cs:line 72
� at Synapse.Worker.Services.WorkflowActivityProcessorFactory.Synapse.Worker.Services.IWorkflowActivityProcessorFactory.Create(V1WorkflowActivity activity) in /src/src/apps/Synapse.Worker/Services/WorkflowActivityProcessorFactory.cs:line 320
� at Synapse.Worker.Services.WorkflowActivityProcessor.CreateProcessorFor(V1WorkflowActivity activity) in /src/src/apps/Synapse.Worker/Services/WorkflowActivityProcessor.cs:line 194
� at Synapse.Worker.Services.Processors.OperationStateProcessor.CreateProcessorFor(V1WorkflowActivity activity) in /src/src/apps/Synapse.Worker/Services/Processors/OperationStateProcessor.cs:line 46
� at Synapse.Worker.Services.Processors.OperationStateProcessor.StartAsync() in /src/src/apps/Synapse.Worker/Services/Processors/OperationStateProcessor.cs:line 103
� at Synapse.Worker.Services.Processors.OperationStateProcessor.InitializeAsync(CancellationToken cancellationToken) in /src/src/apps/Synapse.Worker/Services/Processors/OperationStateProcessor.cs:line 60
� at Synapse.Worker.Services.WorkflowActivityProcessor.<>c__DisplayClass30_0.<b__0>d.MoveNext() in /src/src/apps/Synapse.Worker/Services/WorkflowActivityProcessor.cs:line 103
<[05:53:22] warning: Synapse.Worker.Services.WorkflowRuntime[0]
� An error occured while executing the workflow instance: System.NullReferenceException: Failed to find an action that matches the metadata specified by the activity with id '71ca09e5-9968-4190-936c-41a938aba16a'
� at Synapse.Worker.Services.WorkflowActivityProcessorFactory.CreateActionActivityProcessor(StateDefinition state, V1WorkflowActivity activity) in /src/src/apps/Synapse.Worker/Services/WorkflowActivityProcessorFactory.cs:line 125
� at Synapse.Worker.Services.WorkflowActivityProcessorFactory.Create(V1WorkflowActivity activity) in /src/src/apps/Synapse.Worker/Services/WorkflowActivityProcessorFactory.cs:line 72
� at Synapse.Worker.Services.WorkflowActivityProcessorFactory.Synapse.Worker.Services.IWorkflowActivityProcessorFactory.Create(V1WorkflowActivity activity) in /src/src/apps/Synapse.Worker/Services/WorkflowActivityProcessorFactory.cs:line 320
� at Synapse.Worker.Services.WorkflowActivityProcessor.CreateProcessorFor(V1WorkflowActivity activity) in /src/src/apps/Synapse.Worker/Services/WorkflowActivityProcessor.cs:line 194
� at Synapse.Worker.Services.Processors.OperationStateProcessor.CreateProcessorFor(V1WorkflowActivity activity) in /src/src/apps/Synapse.Worker/Services/Processors/OperationStateProcessor.cs:line 46
� at Synapse.Worker.Services.Processors.OperationStateProcessor.StartAsync() in /src/src/apps/Synapse.Worker/Services/Processors/OperationStateProcessor.cs:line 103
� at Synapse.Worker.Services.Processors.OperationStateProcessor.InitializeAsync(CancellationToken cancellationToken) in /src/src/apps/Synapse.Worker/Services/Processors/OperationStateProcessor.cs:line 60
� at Synapse.Worker.Services.WorkflowActivityProcessor.<>c__DisplayClass30_0.<b__0>d.MoveNext() in /src/src/apps/Synapse.Worker/Services/WorkflowActivityProcessor.cs:line 103
/[05:53:22] info: Microsoft.Hosting.Lifetime[0]
& Application is shutting down...
cdavernas commented 10 months ago

@mumubin Can you try naming your action and see if that works?

We are working in SW to make name or id required for every single component, and I took the initiative to already enforce it on Synapse

mumubin commented 10 months ago

Thanks @cdavernas . After adding action name, it works. However, the YAML file I tested came from https://github.com/serverlessworkflow/specification/blob/main/examples/README.md#workflow-definition-1. It seems a bug in the examples. Let me submit a pr to fix it.

mumubin commented 10 months ago

Fixed SW yaml.

{
  "id": "greeting",
  "name": "Greeting Workflow",
  "description": "Greet Someone",
  "version": "1.0.8",
  "specVersion": "0.8",
  "functions": [
    {
      "name": "greetingFunction",
      "operation": "https://gist.githubusercontent.com/mumubin/7d6ede1791ddd6fb705576187f91c930/raw/5357026c05ddb641de52b27d5e922856be1243e3/greeting.yaml#randomGreeting",
      "type": "rest"
    }
  ],
  "start": "Greet",
  "states": [
    {
      "name": "Greet",
      "type": "operation",
      "actions": [
        {
          "name": "GreetingAction",
          "actionDataFilter": {
            "results": "${ {greeting: .greeting} }"
          },
          "functionRef": {
            "refName": "greetingFunction",
            "arguments": {
              "name": "${ .person.name }"
            }
          }
        }
      ],
      "end": true
    }
  ]
}