serverlessworkflow / synapse Goto Github PK
View Code? Open in Web Editor NEWServerless Workflow Management System (WFMS)
Home Page: https://serverlessworkflow.io
License: Apache License 2.0
Serverless Workflow Management System (WFMS)
Home Page: https://serverlessworkflow.io
License: Apache License 2.0
What would you like to be added:
Add an UI to the dashboard to manage correlations as well as an editor to produce cloud events
Why is this needed:
Allows for fine grained control of pending correlations
What would you like to be added:
An activity counter badge on actions, like it exists of states.
Why is this needed:
Better UX, readability of the workflow progress.
There is an error poping when an instance is executed:
Grpc.AspNetCore.Server.ServerCallHandler: Error: Error when executing service method 'Connect'.
System.OperationCanceledException: The operation was canceled.
at System.Threading.Channels.AsyncOperation`1.GetResult(Int16 token)
at System.Threading.Channels.ChannelReader`1.ReadAllAsync(CancellationToken cancellationToken)+MoveNext()
at System.Threading.Channels.ChannelReader`1.ReadAllAsync(CancellationToken cancellationToken)+System.Threading.Tasks.Sources.IValueTaskSource<System.Boolean>.GetResult()
at Synapse.Apis.Runtime.Grpc.SynapseGrpcRuntimeApi.Connect(String runtimeId, CallContext context)+MoveNext() in C:\Dev\Neuroglia\Github\synapse\src\apis\runtime\Synapse.Apis.Runtime.Grpc\Services\SynapseGrpcRuntimeApi.cs:line 75
at Synapse.Apis.Runtime.Grpc.SynapseGrpcRuntimeApi.Connect(String runtimeId, CallContext context)+MoveNext() in C:\Dev\Neuroglia\Github\synapse\src\apis\runtime\Synapse.Apis.Runtime.Grpc\Services\SynapseGrpcRuntimeApi.cs:line 75
at Synapse.Apis.Runtime.Grpc.SynapseGrpcRuntimeApi.Connect(String runtimeId, CallContext context)+System.Threading.Tasks.Sources.IValueTaskSource<System.Boolean>.GetResult()
at ProtoBuf.Grpc.Internal.Reshape.WriteTo[T](IAsyncEnumerable`1 reader, IServerStreamWriter`1 writer, CancellationToken cancellationToken) in /_/src/protobuf-net.Grpc/Internal/Reshape.cs:line 134
at ProtoBuf.Grpc.Internal.Reshape.WriteTo[T](IAsyncEnumerable`1 reader, IServerStreamWriter`1 writer, CancellationToken cancellationToken) in /_/src/protobuf-net.Grpc/Internal/Reshape.cs:line 134
at Grpc.Shared.Server.ServerStreamingServerMethodInvoker`3.Invoke(HttpContext httpContext, ServerCallContext serverCallContext, TRequest request, IServerStreamWriter`1 streamWriter)
at Grpc.Shared.Server.ServerStreamingServerMethodInvoker`3.Invoke(HttpContext httpContext, ServerCallContext serverCallContext, TRequest request, IServerStreamWriter`1 streamWriter)
at Grpc.AspNetCore.Server.Internal.CallHandlers.ServerStreamingServerCallHandler`3.HandleCallAsyncCore(HttpContext httpContext, HttpContextServerCallContext serverCallContext)
at Grpc.AspNetCore.Server.Internal.CallHandlers.ServerCallHandlerBase`3.<HandleCallAsync>g__AwaitHandleCall|8_0(HttpContextServerCallContext serverCallContext, Method`2 method, Task handleCall)
My guess is that the grpc connection isn't properly closed/disposed before destroying the running instance.
@cdavernas do you concur?
What would you like to be added:
Punctually collect, package, export then clean old workflow instances from operational databases
Why is this needed:
Avoids useless resource starvation and improves write and read model repository performances while performing a backup (in a bucket store, for example) of old workflow instances, for auditing purpose
What happened:
The Synapse server fails to extract .tar.gz
plugin package files
What you expected to happen:
The server successfully extracts and loads .tar.gz
plugin package files
How to reproduce it:
Put a .tar.gz
plugin package in the server's plugins
directory
What happened:
When running a workflow that defines a transition, the dashboard throws an error and stops rendering progress.
fail: Neuroglia.Data.Flux.Store[0]
An error occured while dispatching an action of type 'AddV1WorkflowActivity': System.NotSupportedException: The specified V1WorkflowActivityType 'Transition' is not supported
at Synapse.Dashboard.GraphExtensions.GetNodeFor(IGraphViewModel graph, V1WorkflowActivity activity) in C:\Users\User\source\repos\Synapse\synapse\src\dashboard\Synapse.Dashboard\Extensions\GraphExtensions.cs:line 98
at Synapse.Dashboard.GraphExtensions.DisplayActivityStatusFor(IGraphViewModel graph, IEnumerable`1 instances) in C:\Users\User\source\repos\Synapse\synapse\src\dashboard\Synapse.Dashboard\Extensions\GraphExtensions.cs:line 42
at Synapse.Dashboard.WorkflowDiagram.DisplayActivityStatusFor(IEnumerable`1 instances) in C:\Users\User\source\repos\Synapse\synapse\src\dashboard\Synapse.Dashboard\Features\Shared\WorkflowDiagram\WorkflowDiagram.razor:line 52
at Synapse.Dashboard.Pages.Workflows.View.UpdateActivities() in C:\Users\User\source\repos\Synapse\synapse\src\dashboard\Synapse.Dashboard\Pages\Workflows\View.razor:line 220
at Synapse.Dashboard.Pages.Workflows.View.<OnInitializedAsync>b__21_1(V1WorkflowActivityCollectionState activities) in C:\Users\User\source\repos\Synapse\synapse\src\dashboard\Synapse.Dashboard\Pages\Workflows\View.razor:line 184
at System.Reactive.AnonymousObserver`1[[Synapse.Dashboard.V1WorkflowActivityCollectionState, Synapse.Dashboard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]].OnNextCore(V1WorkflowActivityCollectionState value) in /_/Rx.NET/Source/src/System.Reactive/AnonymousObserver.cs:line 67
at System.Reactive.ObserverBase`1[[Synapse.Dashboard.V1WorkflowActivityCollectionState, Synapse.Dashboard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]].OnNext(V1WorkflowActivityCollectionState value) in /_/Rx.NET/Source/src/System.Reactive/ObserverBase.cs:line 34
at System.Reactive.Subjects.Subject`1[[Synapse.Dashboard.V1WorkflowActivityCollectionState, Synapse.Dashboard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]].OnNext(V1WorkflowActivityCollectionState value) in /_/Rx.NET/Source/src/System.Reactive/Subjects/Subject.cs:line 147
at Neuroglia.Data.Flux.Feature`1[[Synapse.Dashboard.V1WorkflowActivityCollectionState, Synapse.Dashboard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]].set_State(V1WorkflowActivityCollectionState value)
at Neuroglia.Data.Flux.Feature`1.<ReduceStateAsync>d__17[[Synapse.Dashboard.V1WorkflowActivityCollectionState, Synapse.Dashboard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]].MoveNext()
at Neuroglia.Data.Flux.Store.DispatchAsync(Object action)
What you expected to happen:
The dashboard properly renders transitions
How to reproduce it:
Create and run a workflow that defines a state transition
What happened:
On the WebSocket stream, an activity of type action doesn't seem to start, it's faulted and executed directly:
(Fault cause: An error occured while evaluting the specified expression: 'jq.exe' is not recognized as an internal or external command,\r\noperable program or batch file.
)
What you expected to happen:
The activity to be started before being faulted/executed
How to reproduce it:
Deploy & run the following workflow:
{
"id": "order-dog",
"version": "1.0.0",
"specVersion": "0.8",
"name": "Order pet",
"description": "A workflow used to order a pet on the Swagger pet store",
"functions": [
{
"name": "get-user-by-name",
"type": "rest",
"operation": "https://petstore.swagger.io/v2/swagger.json#getUserByName"
},
{
"name": "login-user",
"type": "rest",
"operation": "https://petstore.swagger.io/v2/swagger.json#loginUser"
},
{
"name": "get-pets-by-status",
"type": "rest",
"operation": "https://petstore.swagger.io/v2/swagger.json#findPetsByStatus"
},
{
"name": "create-order",
"type": "rest",
"operation": "https://petstore.swagger.io/v2/swagger.json#findPetsByStatus"
}
],
"states": [
{
"name": "PlaceOrder",
"type": "operation",
"actions": [
{
"name": "Get User Info",
"functionRef": {
"refName": "get-user-by-name",
"arguments": {
"username": "${ .username }"
}
},
"actionDataFilter": {
"toStateData": "${ .user }"
}
},
{
"name": "Login",
"functionRef": {
"refName": "login-user",
"arguments": {
"username": "${ .username }",
"password": "${ .password }"
}
}
},
{
"name": "Get Dog To Order",
"functionRef": {
"refName": "get-pets-by-status",
"arguments": {
"status": "available"
}
},
"actionDataFilter": {
"toStateData": "${ .dogToOrder }"
}
},
{
"name": "Place order",
"functionRef": {
"refName": "create-order",
"arguments": {
"petId": "${ .dogToOrder.id }",
"quantity": "${ .quantityToOrder }",
"complete": true
}
},
"actionDataFilter": {
"toStateData": "${ .order }"
}
}
],
"end": true
}
]
}
What happened:
Cloud events are not published by the server, resulting in all event-based activities to fail.
This is due to the fact that, by default, we have been using a webhook.site endpoint which breaks after a certain amount of time and/or requests.
The default sink should be replaced with something a bit more reliable (such as pipedream.net), and means to configure it should be added.
What you expected to happen:
Cloud events are published as expected.
How to reproduce it:
Deploy a workflow on Synapse, for example. You will then be able to observe publishing errors in the server's logs
What would you like to be added:
Implement the sleep mode, which is the worker ability to scale to zero when waiting for too long for incoming events or when hitting too long a sleep period when processing a sleep state
Why is this needed:
Avoids wasting resources on workers that have been innactive for too long
What would you like to be added:
Add a graphical editor to the dashboard
Why is this needed:
Quality of life / accessibility
What happened:
The following error keeps appearing in the server logs:
System.Net.Http.HttpClient.CloudEventBus.LogicalHandler: Information: Start processing HTTP request POST https://en37uhd2he6t4.x.pipedream.net/
System.Net.Http.HttpClient.CloudEventBus.ClientHandler: Information: Sending HTTP request POST https://en37uhd2he6t4.x.pipedream.net/
System.Net.Http.HttpClient.CloudEventBus.ClientHandler: Information: Received HTTP response headers after 722.1693ms - 413
Neuroglia.Eventing.Services.CloudEventBus: Error: An error occured while posting a cloud events to the broker: Polly.CircuitBreaker.BrokenCircuitException`1[System.Net.Http.HttpResponseMessage]: The circuit is now open and is not allowing calls.
at Polly.CircuitBreaker.CircuitStateController`1.OnActionPreExecute()
at Polly.CircuitBreaker.AsyncCircuitBreakerEngine.ImplementationAsync[TResult](Func`3 action, Context context, CancellationToken cancellationToken, Boolean continueOnCapturedContext, ExceptionPredicates shouldHandleExceptionPredicates, ResultPredicates`1 shouldHandleResultPredicates, ICircuitController`1 breakerController)
at Polly.AsyncPolicy`1.ExecuteAsync(Func`3 action, Context context, CancellationToken cancellationToken, Boolean continueOnCapturedContext)
at Polly.Wrap.AsyncPolicyWrapEngine.<>c__DisplayClass0_0`1.<<ImplementationAsync>b__0>d.MoveNext()
--- End of stack trace from previous location ---
at Polly.Retry.AsyncRetryEngine.ImplementationAsync[TResult](Func`3 action, Context context, CancellationToken cancellationToken, ExceptionPredicates shouldRetryExceptionPredicates, ResultPredicates`1 shouldRetryResultPredicates, Func`5 onRetryAsync, Int32 permittedRetryCount, IEnumerable`1 sleepDurationsEnumerable, Func`4 sleepDurationProvider, Boolean continueOnCapturedContext)
at Polly.AsyncPolicy`1.ExecuteAsync(Func`3 action, Context context, CancellationToken cancellationToken, Boolean continueOnCapturedContext)
at Polly.Wrap.AsyncPolicyWrapEngine.ImplementationAsync[TResult](Func`3 func, Context context, CancellationToken cancellationToken, Boolean continueOnCapturedContext, IAsyncPolicy`1 outerPolicy, IAsyncPolicy`1 innerPolicy)
at Polly.AsyncPolicy`1.ExecuteAsync(Func`3 action, Context context, CancellationToken cancellationToken, Boolean continueOnCapturedContext)
at Microsoft.Extensions.Http.PolicyHttpMessageHandler.SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
at Microsoft.Extensions.Http.Logging.LoggingScopeHttpMessageHandler.SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
at System.Net.Http.HttpClient.<SendAsync>g__Core|83_0(HttpRequestMessage request, HttpCompletionOption completionOption, CancellationTokenSource cts, Boolean disposeCts, CancellationTokenSource pendingRequestsCts, CancellationToken originalCancellationToken)
at Neuroglia.Eventing.Services.CloudEventBus.<>c__DisplayClass31_0.<<DequeueAndPublishPendingEventsAsync>b__1>d.MoveNext()
(because the output payload of a workflow/state/action was too big???)
What you expected to happen:
No error, or, at best, a limited numbers of retries?
How to reproduce it:
Not sure, try:
{
"id": "order-dog",
"version": "1.0.0",
"specVersion": "0.8",
"name": "Order pet",
"description": "A workflow used to order a pet on the Swagger pet store",
"functions": [
{
"name": "get-user-by-name",
"type": "rest",
"operation": "https://petstore.swagger.io/v2/swagger.json#getUserByName"
},
{
"name": "login-user",
"type": "rest",
"operation": "https://petstore.swagger.io/v2/swagger.json#loginUser"
},
{
"name": "get-pets-by-status",
"type": "rest",
"operation": "https://petstore.swagger.io/v2/swagger.json#findPetsByStatus"
},
{
"name": "create-order",
"type": "rest",
"operation": "https://petstore.swagger.io/v2/swagger.json#findPetsByStatus"
}
],
"states":[
{
"name": "PlaceOrder",
"type": "operation",
"actions": [
{
"name": "Get User Info",
"functionRef":{
"refName": "get-user-by-name",
"arguments":{
"username": "${ .username }"
}
},
"actionDataFilter":{
"toStateData": "${ .user }"
}
},
{
"name": "Login",
"functionRef":{
"refName": "login-user",
"arguments":{
"username": "${ .username }",
"password": "${ .password }"
}
}
},
{
"name": "Get Dog To Order",
"functionRef": {
"refName": "get-pets-by-status",
"arguments":{
"status": "available"
}
},
"actionDataFilter":{
"toStateData": "${ .dogToOrder }"
}
},
{
"name": "Place order",
"functionRef":{
"refName": "create-order",
"arguments":{
"petId": "${ .dogToOrder.id }",
"quantity": "${ .quantityToOrder }",
"complete": true
}
},
"actionDataFilter":{
"toStateData": "${ .order }"
}
}
],
"end": true
}
]}
Environment:
Win 10 x64 - self hosted
What would you like to be added:
Implement and handle errors thrown during a workflow's execution
Why is this needed:
Allows for fine-grained processing - and possibly forking - of faulted activities
Depends on:
What would you like to be added:
Checking the details of a workflow instance can be very slow, the more activities (input/output payloads), the slower it gets. This is due to Blazor Monaco being a little slow and the accumulation its of instances in the workflow instance details. To prevent that problem, accordions should not render their body if it's not "expanded" (instead of just toggling css classes).
It would also be nice to add a loader indicator while Blazor Monaco is processing the data.
Why is this needed:
Better UX.
What would you like to be added:
Add the reserved WORKFLOW
variable for runtime expression, as defined by serverlessworkflow/specification#603
Why is this needed:
Implement the spec and allow to access contextual information
What would you like to be added:
Add application metrics and statistics, such as number of workflow definitions, number of workflow instances, execution success rate, etc.
Why is this needed:
Provides information about overall state of the application
What would you like to be added:
docker-compose
files for setting up Synapse with persistence enabled, meaning including - and configured for - its database dependencies.
Why is this needed:
Allows to boostrap Synapse with persistence enabled in a single command
What happened:
Cascading exceptions when passing a null input value to run a workflow
What you expected to happen:
Workflow to run as expected
How to reproduce it:
Do not pass any input when creating/starting a workflow instance
What happened:
Synapse creates its network but does not connect to it on first launch, resulting in workers not being able to contact it using its advertized host name (i.e. synapse)
What you expected to happen:
Synapse connects to its network after creating it, in case it does not exist
How to reproduce it:
Environment:
Docker
Workaround:
Need help with get started info for synapse. No Download url in Readme
What happened:
When executing an action that returns a very large payload, the worker application will fault by throwing the following exception:
System.ComponentModel.Win32Exception (206): An error occurred trying to start process 'cmd.exe' with working directory '[DIRECTORY]'. The filename or extension is too long.
What you expected to happen:
In case the input data, the filter expression and the variables are too long, they should be written to separate, temporary files, thus avoiding the path's length restriction
How to reproduce it:
Run an instance of a workflow that defines an action which will return a large JSON payload
Anything else we need to know?:
Only seems to occur on Windows
Environment:
Windows 11 PRO x64
What happened:
Consumed singleton correlations are never disposed of
What you expected to happen:
Whenever a correlation with singleton lifetime has been consumed, delete it from both write and read models
How to reproduce it:
What would you like to be added:
Add sample workflow definitions and example use-cases
Why is this needed:
For demos and getting started experience for new users, it would be nice to
have a list of sample workflow definitions users can just pick and run (don't have to create themselves).
What happened:
When some workflow instances are active, therefore triggering a render, the start workflow input is reset.
What you expected to happen:
The inputed value to stay where it is.
How to reproduce it:
Start a workflow, then try to input new start payload when the 1st instance is running.
What would you like to be added:
Add a mechanism (such as an environment variable) to configure workers to ignore SSL certificate errors
Why is this needed:
In some cases, users might want to connect to services using self-signed (or invalid) certificates, and have no way to work around it.
What happened:
When cancelling an instance, it seems to stay stuck at the cancelling status
What you expected to happen:
To be cancelled
Anything else we need to know?:
Output:
Microsoft.AspNetCore.Hosting.Diagnostics: Information: Request starting HTTP/1.1 PUT http://localhost:42286/api/v1/workflow-instances/order-dog-rmuwrtuud0278lggvwjqsg/cancel - 0
Microsoft.AspNetCore.Routing.EndpointMiddleware: Information: Executing endpoint 'Synapse.Apis.Management.Http.Controllers.V1WorkflowInstancesController.Cancel (Synapse.Apis.Management.Http)'
Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker: Information: Route matched with {action = "Cancel", controller = "V1WorkflowInstances"}. Executing controller action with signature System.Threading.Tasks.Task`1[Microsoft.AspNetCore.Mvc.IActionResult] Cancel(System.String, System.Threading.CancellationToken) on controller Synapse.Apis.Management.Http.Controllers.V1WorkflowInstancesController (Synapse.Apis.Management.Http).
Synapse.Application.Commands.Correlations.V1CorrelateEventCommandHandler: Information: Processing event with id '1a191394-b0ad-4f93-8400-deb81aac93ce', type 'io.synapse/v1workflowinstance/cancelling/v1' and source 'https://synapse.io/runtime/events'...
System.Net.Http.HttpClient.CloudEventBus.LogicalHandler: Information: Start processing HTTP request POST https://en37uhd2he6t4.x.pipedream.net/
Microsoft.AspNetCore.Mvc.Infrastructure.ObjectResultExecutor: Information: Executing ObjectResult, writing value of type 'Synapse.Integration.Models.V1WorkflowInstance'.
System.Net.Http.HttpClient.CloudEventBus.ClientHandler: Information: Sending HTTP request POST https://en37uhd2he6t4.x.pipedream.net/
Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker: Information: Executed action Synapse.Apis.Management.Http.Controllers.V1WorkflowInstancesController.Cancel (Synapse.Apis.Management.Http) in 18.027ms
Microsoft.AspNetCore.Routing.EndpointMiddleware: Information: Executed endpoint 'Synapse.Apis.Management.Http.Controllers.V1WorkflowInstancesController.Cancel (Synapse.Apis.Management.Http)'
Microsoft.AspNetCore.Hosting.Diagnostics: Information: Request finished HTTP/1.1 PUT http://localhost:42286/api/v1/workflow-instances/order-dog-rmuwrtuud0278lggvwjqsg/cancel - 0 - 200 524 application/json;+charset=utf-8 33.7851ms
Microsoft.AspNetCore.Hosting.Diagnostics: Information: Request starting HTTP/2 POST http://localhost:41387/Synapse.Apis.Runtime.Grpc.SynapseGrpcRuntimeApi/CancelActivity application/grpc -
Microsoft.AspNetCore.Routing.EndpointMiddleware: Information: Executing endpoint 'gRPC - /Synapse.Apis.Runtime.Grpc.SynapseGrpcRuntimeApi/CancelActivity'
Synapse.Application.Commands.Correlations.V1CorrelateEventCommandHandler: Information: Processing event with id '56ca7984-130e-4267-9034-57665ff49c0d', type 'io.synapse/v1workflowactivity/cancelled/v1' and source 'https://synapse.io/runtime/events'...
Synapse.Application.Commands.Correlations.V1CorrelateEventCommandHandler: Information: Processing event with id '3983491c-1383-431f-b9bd-20c4b624fcdc', type 'io.synapse/v1workflowactivity/executed/v1' and source 'https://synapse.io/runtime/events'...
Microsoft.AspNetCore.Routing.EndpointMiddleware: Information: Executed endpoint 'gRPC - /Synapse.Apis.Runtime.Grpc.SynapseGrpcRuntimeApi/CancelActivity'
Microsoft.AspNetCore.Hosting.Diagnostics: Information: Request finished HTTP/2 POST http://localhost:41387/Synapse.Apis.Runtime.Grpc.SynapseGrpcRuntimeApi/CancelActivity application/grpc - - 200 - application/grpc 26.0757ms
Microsoft.AspNetCore.Hosting.Diagnostics: Information: Request starting HTTP/2 POST http://localhost:41387/Synapse.Apis.Runtime.Grpc.SynapseGrpcRuntimeApi/Cancel application/grpc -
Microsoft.AspNetCore.Routing.EndpointMiddleware: Information: Executing endpoint 'gRPC - /Synapse.Apis.Runtime.Grpc.SynapseGrpcRuntimeApi/Cancel'
Exception thrown: 'Neuroglia.Data.DomainException' in Synapse.Domain.dll
Microsoft.AspNetCore.Routing.EndpointMiddleware: Information: Executed endpoint 'gRPC - /Synapse.Apis.Runtime.Grpc.SynapseGrpcRuntimeApi/Cancel'
Microsoft.AspNetCore.Hosting.Diagnostics: Information: Request finished HTTP/2 POST http://localhost:41387/Synapse.Apis.Runtime.Grpc.SynapseGrpcRuntimeApi/Cancel application/grpc - - 200 - application/grpc 26.7641ms
Exception thrown: 'System.OperationCanceledException' in System.Private.CoreLib.dll
Exception thrown: 'System.OperationCanceledException' in System.Private.CoreLib.dll
System.Net.Http.HttpClient.CloudEventBus.ClientHandler: Information: Received HTTP response headers after 118.6809ms - 200
System.Net.Http.HttpClient.CloudEventBus.LogicalHandler: Information: End processing HTTP request after 132.0862ms - 200
System.Net.Http.HttpClient.CloudEventBus.LogicalHandler: Information: Start processing HTTP request POST https://en37uhd2he6t4.x.pipedream.net/
System.Net.Http.HttpClient.CloudEventBus.ClientHandler: Information: Sending HTTP request POST https://en37uhd2he6t4.x.pipedream.net/
Grpc.AspNetCore.Server.ServerCallHandler: Error: Error when executing service method 'Connect'.
System.OperationCanceledException: The operation was canceled.
at System.Threading.Channels.AsyncOperation`1.GetResult(Int16 token)
at System.Threading.Channels.ChannelReader`1.ReadAllAsync(CancellationToken cancellationToken)+MoveNext()
at System.Threading.Channels.ChannelReader`1.ReadAllAsync(CancellationToken cancellationToken)+System.Threading.Tasks.Sources.IValueTaskSource<System.Boolean>.GetResult()
at Synapse.Apis.Runtime.Grpc.SynapseGrpcRuntimeApi.Connect(String runtimeId, CallContext context)+MoveNext() in C:\Dev\Neuroglia\Github\synapse\src\apis\runtime\Synapse.Apis.Runtime.Grpc\Services\SynapseGrpcRuntimeApi.cs:line 75
at Synapse.Apis.Runtime.Grpc.SynapseGrpcRuntimeApi.Connect(String runtimeId, CallContext context)+MoveNext() in C:\Dev\Neuroglia\Github\synapse\src\apis\runtime\Synapse.Apis.Runtime.Grpc\Services\SynapseGrpcRuntimeApi.cs:line 75
at Synapse.Apis.Runtime.Grpc.SynapseGrpcRuntimeApi.Connect(String runtimeId, CallContext context)+System.Threading.Tasks.Sources.IValueTaskSource<System.Boolean>.GetResult()
at ProtoBuf.Grpc.Internal.Reshape.WriteTo[T](IAsyncEnumerable`1 reader, IServerStreamWriter`1 writer, CancellationToken cancellationToken) in /_/src/protobuf-net.Grpc/Internal/Reshape.cs:line 134
at ProtoBuf.Grpc.Internal.Reshape.WriteTo[T](IAsyncEnumerable`1 reader, IServerStreamWriter`1 writer, CancellationToken cancellationToken) in /_/src/protobuf-net.Grpc/Internal/Reshape.cs:line 134
at Grpc.Shared.Server.ServerStreamingServerMethodInvoker`3.Invoke(HttpContext httpContext, ServerCallContext serverCallContext, TRequest request, IServerStreamWriter`1 streamWriter)
at Grpc.Shared.Server.ServerStreamingServerMethodInvoker`3.Invoke(HttpContext httpContext, ServerCallContext serverCallContext, TRequest request, IServerStreamWriter`1 streamWriter)
at Grpc.AspNetCore.Server.Internal.CallHandlers.ServerStreamingServerCallHandler`3.HandleCallAsyncCore(HttpContext httpContext, HttpContextServerCallContext serverCallContext)
at Grpc.AspNetCore.Server.Internal.CallHandlers.ServerCallHandlerBase`3.<HandleCallAsync>g__AwaitHandleCall|8_0(HttpContextServerCallContext serverCallContext, Method`2 method, Task handleCall)
Microsoft.AspNetCore.Routing.EndpointMiddleware: Information: Executed endpoint 'gRPC - /Synapse.Apis.Runtime.Grpc.SynapseGrpcRuntimeApi/Connect'
Microsoft.AspNetCore.Hosting.Diagnostics: Information: Request finished HTTP/2 POST http://localhost:41387/Synapse.Apis.Runtime.Grpc.SynapseGrpcRuntimeApi/Connect application/grpc - - 200 - application/grpc 1210.3750ms
info: System.Net.Http.HttpClient.SynapseHttpManagementApiClient.ClientHandler[101]
Received HTTP response headers after 176.8ms - 200
info: System.Net.Http.HttpClient.SynapseHttpManagementApiClient.LogicalHandler[101]
End processing HTTP request after 178.5ms - 200
System.Net.Http.HttpClient.CloudEventBus.ClientHandler: Information: Received HTTP response headers after 118.5912ms - 200
System.Net.Http.HttpClient.CloudEventBus.LogicalHandler: Information: End processing HTTP request after 125.1922ms - 200
System.Net.Http.HttpClient.CloudEventBus.LogicalHandler: Information: Start processing HTTP request POST https://en37uhd2he6t4.x.pipedream.net/
System.Net.Http.HttpClient.CloudEventBus.ClientHandler: Information: Sending HTTP request POST https://en37uhd2he6t4.x.pipedream.net/
System.Net.Http.HttpClient.CloudEventBus.ClientHandler: Information: Received HTTP response headers after 119.213ms - 200
System.Net.Http.HttpClient.CloudEventBus.LogicalHandler: Information: End processing HTTP request after 126.5378ms - 200
What would you like to be added:
Implement and handle timeouts, at workflow, state and activity (action) level
Why is this needed:
Allows to timeout abnormaly long processes, thus avoiding resource starvation for possibly faulted processes
Depends on:
What happened:
When coming back to the workflow list from within a given workflow's view, the list is empty, an no error is to be found in logs and/or requests.
What you expected to happen:
The list should display existing workflows
How to reproduce it:
Navigate to a specific workflow's view, then go back to the workflow list view using the breadcrumb, for example.
If it is, as I think, related to #90, you should first follow the latter's instructions on how to repro.
Anything else we need to know?:
This is probably linked to #90, as I could only reproduce it when it occurs
What would you like to be added:
Highlight the path token by the workflow instance in the details view.
Why is this needed:
Allows users to understand in a glance what happened during the workflow's execution
What happened:
On opening the main page I'm getting the error in the devtools console:
Uncaught TypeError: navigator.serviceWorker is undefined
What you expected to happen:
No error is thrown
How to reproduce it:
Navigate to the dashboard's root page
Anything else we need to know?:
It seems to come from line 173
<script>navigator.serviceWorker.register('service-worker.js');</script>
What happened:
The activities might be null instead of an empty list, resulting in a null ref exception.
What you expected to happen:
Prevent the null ref exception.
What happened:
If jq
was not previously installed on target OS, workflows will systematically fail.
What you expected to happen:
The synctl
native install command must make sure that jq
is installed, otherwise should download/install it.
Furthermore, dependency to jq
should be mentionned on README page.
How to reproduce it:
Anything else we need to know?:
Environment:
What happened:
The server fails to donwload the worker in native mode on OSX because of a typo in the download url
What you expected to happen:
The server successfully downloads the worker
How to reproduce it:
What happened:
A CORS error is thrown by the dashboard
Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at http://localhost:42286/api/ws/negotiate?negotiateVersion=1. (Reason: CORS request did not succeed). Status code: (null).
What you expected to happen:
No CORS error is thrown and the dashboard works as expected
How to reproduce it:
Run Synapse on a DNS other than localhost
Anything else we need to know?:
Probably origin is not used in one or more of the XHR requests (I got this twice on the single page reload).
What happened:
The Worker fails to aggregate the output of child actions if one of them is outputless
What you expected to happen:
The Worker ignores the outputless action, and continues aggregating outputs
How to reproduce it:
Create an OperationStateDefinition
that defines multiples actions, amongst which at least one that does not output anything
What would you like to be added:
Collect and package logs before disposing of executed worker computing units
Why is this needed:
Disposing of worker computing units allows to avoid useless resource starvation on some platforms (Docker, Kubernetes)
What would you like to be added:
Implement a new runtime host that leverages Kubernetes. Unlike other runtime host, the Kubernetes one must also be able to perform CRD reconciliation, as users should be able to create workflow instances using the K8s CRD API instead of Synapse's.
Why is this needed:
Adds yet another supported runtime platform, which is in addition the most reliable one, and a cloud-native one, too. Finally, it's getting back to the origins of Synapse, which initially was running solely on this platform.
What would you like to be added:
Implement workflow compensation
Why is this needed:
Allows for procedural compensation
What happened:
An action failed with the error An error occurred trying to start process 'cmd.exe' with working directory 'C:\\...\\synapse\\src\\apps\\Synapse.Server\\bin\\Debug\\net6.0\\bin\\worker'. The filename or extension is too long.
How to reproduce it:
{
"id": "order-dog",
"version": "1.0.0",
"specVersion": "0.8",
"name": "Order pet",
"description": "A workflow used to order a pet on the Swagger pet store",
"functions": [
{
"name": "get-user-by-name",
"type": "rest",
"operation": "https://petstore.swagger.io/v2/swagger.json#getUserByName"
},
{
"name": "login-user",
"type": "rest",
"operation": "https://petstore.swagger.io/v2/swagger.json#loginUser"
},
{
"name": "get-pets-by-status",
"type": "rest",
"operation": "https://petstore.swagger.io/v2/swagger.json#findPetsByStatus"
},
{
"name": "create-order",
"type": "rest",
"operation": "https://petstore.swagger.io/v2/swagger.json#findPetsByStatus"
}
],
"states":[
{
"name": "PlaceOrder",
"type": "operation",
"actions": [
{
"name": "Get User Info",
"functionRef":{
"refName": "get-user-by-name",
"arguments":{
"username": "${ .username }"
}
},
"actionDataFilter":{
"toStateData": "${ .user }"
}
},
{
"name": "Login",
"functionRef":{
"refName": "login-user",
"arguments":{
"username": "${ .username }",
"password": "${ .password }"
}
}
},
{
"name": "Get Dog To Order",
"functionRef": {
"refName": "get-pets-by-status",
"arguments":{
"status": "available"
}
},
"actionDataFilter":{
"toStateData": "${ .dogToOrder }"
}
},
{
"name": "Place order",
"functionRef":{
"refName": "create-order",
"arguments":{
"petId": "${ .dogToOrder.id }",
"quantity": "${ .quantityToOrder }",
"complete": true
}
},
"actionDataFilter":{
"toStateData": "${ .order }"
}
}
],
"end": true
}
]}
Environment:
Win 10 x64 - self hosted
What happened:
The worker faults workflows that use a state defining a string-based transition because it cannot find said transition
What you expected to happen:
The worker performs the transition as expected
How to reproduce it:
Create and execute a workflow with a state using a string-based transition (ex: "transition": "NextState"
)
What happened:
docker pull synapse/operator:0.1.0
Error response from daemon: pull access denied for synapse/operator, repository does not exist or may require 'docker login': denied: requested access to the resource is denied
What you expected to happen:
docker pull synapse/operator:0.1.0 success
How to reproduce it:
Anything else we need to know?:
Environment:
Darwin MacBook-Pro.local 20.6.0 Darwin Kernel Version 20.6.0: Wed Jun 23 00:26:27 PDT 2021; root:xnu-7195.141.2~5/RELEASE_ARM64_T8101 arm64
What happened:
After starting multiple instances, going to the workflow definitions' list and coming back to a workflow detail, the list of instances/graph takes multiple seconds to display!
What you expected to happen:
To be way faster
What would you like to be added:
Implement fine-grained, plugin-based configuration of the application's repositories. By fine-grained, we mean the ability to configure independently every single repository of the application
Why is this needed:
Allows for fine-grained control of how and where data is persisted
What happened:
Containers running using Synapse's 0.1.3
docker image systematically crashes at startup with following error message:
Could not execute because the application was not found or a compatible .NET SDK is not installed
What you expected to happen:
The container starts as expected
How to reproduce it:
Run a container using Synapse's 0.1.3
docker image
Anything else we need to know?:
This is due to an invalid Synapse Server Dockerfile.
The last change to the application's assembly name broke the unedited Dockerfile.
Furthermore, the image was not referencing the proper project anymore (ex: Infrastructure, Kubernetes, ...).
What would you like to be added:
Implement replaying a given workflow instance from the specified state or activity. Users should also be able to patch both activity inputs and outputs
Why is this needed:
Allows to identify, isolate, compensate and resolve faulted workflows
Related tasks:
What happened:
Events are sent over websocket (MonitoringAPI) with "specVersion": "CloudNative.CloudEvents.CloudEventsSpecVersion",
What you expected to happen:
To have a proper specVersion
(ex: 1.0)
What happened:
When trying to suspend a workflow, the following error appears:
Grpc.AspNetCore.Server.ServerCallHandler: Error: Error when executing service method 'Suspend'.
System.NotImplementedException: The method or operation is not implemented.
at Synapse.Apis.Runtime.Grpc.SynapseGrpcRuntimeApi.SuspendAsync(String workflowInstanceId, CallContext context) in C:\Dev\Neuroglia\Github\synapse\src\apis\runtime\Synapse.Apis.Runtime.Grpc\Services\SynapseGrpcRuntimeApi.cs:line 175
at Grpc.Shared.Server.UnaryServerMethodInvoker`3.AwaitInvoker(Task`1 invokerTask, GrpcActivatorHandle`1 serviceHandle)
at Grpc.Shared.Server.UnaryServerMethodInvoker`3.AwaitInvoker(Task`1 invokerTask, GrpcActivatorHandle`1 serviceHandle)
at Grpc.AspNetCore.Server.Internal.CallHandlers.UnaryServerCallHandler`3.HandleCallAsyncCore(HttpContext httpContext, HttpContextServerCallContext serverCallContext)
at Grpc.AspNetCore.Server.Internal.CallHandlers.ServerCallHandlerBase`3.<HandleCallAsync>g__AwaitHandleCall|8_0(HttpContextServerCallContext serverCallContext, Method`2 method, Task handleCall)
What you expected to happen:
The workflow to be suspended
How to reproduce it:
Suspend a running workflow instance
What happened:
Deployed synapse on k8s using: https://github.com/serverlessworkflow/synapse/tree/main/deployment/kubernetes
Got an error:
[05/11/2022 11:05:33] info: ProtoBuf.Grpc.Server.ServicesExtensions.CodeFirstServiceMethodProvider[0]
RPC services being provided by Synapse.Apis.Management.Grpc.SynapseGrpcManagementApi: 16
[05/11/2022 11:05:33] info: ProtoBuf.Grpc.Server.ServicesExtensions.CodeFirstServiceMethodProvider[0]
RPC services being provided by Synapse.Apis.Runtime.Grpc.SynapseGrpcRuntimeApi: 20
Unhandled exception. System.Net.Http.HttpRequestException: Connection failed
---> System.Net.Sockets.SocketException (99): Cannot assign requested address
at System.Net.Sockets.Socket.AwaitableSocketAsyncEventArgs.CreateException(SocketError error, Boolean forAsyncThrow)
at System.Net.Sockets.Socket.AwaitableSocketAsyncEventArgs.ConnectAsync(Socket socket)
at System.Net.Sockets.Socket.ConnectAsync(EndPoint remoteEP, CancellationToken cancellationToken)
at System.Net.Sockets.Socket.ConnectAsync(EndPoint remoteEP)
at System.Net.Sockets.SocketTaskExtensions.ConnectAsync(Socket socket, EndPoint remoteEP)
at Docker.DotNet.DockerClient.<>c__DisplayClass6_0.<<-ctor>b__1>d.MoveNext()
at System.Runtime.CompilerServices.AsyncMethodBuilderCore.Start[TStateMachine](TStateMachine& stateMachine)
at Docker.DotNet.DockerClient.<>c__DisplayClass6_0.<.ctor>b__1(String host, Int32 port, CancellationToken cancellationToken)
at Microsoft.Net.Http.Client.ManagedHandler.ProcessRequestAsync(HttpRequestMessage request, CancellationToken cancellationToken)
at System.Runtime.CompilerServices.AsyncMethodBuilderCore.Start[TStateMachine](TStateMachine& stateMachine)
at Microsoft.Net.Http.Client.ManagedHandler.ProcessRequestAsync(HttpRequestMessage request, CancellationToken cancellationToken)
at Microsoft.Net.Http.Client.ManagedHandler.SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
at System.Runtime.CompilerServices.AsyncMethodBuilderCore.Start[TStateMachine](TStateMachine& stateMachine)
at Microsoft.Net.Http.Client.ManagedHandler.SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
at System.Net.Http.HttpMessageInvoker.SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
at System.Net.Http.HttpClient.<SendAsync>g__Core|83_0(HttpRequestMessage request, HttpCompletionOption completionOption, CancellationTokenSource cts, Boolean disposeCts, CancellationTokenSource pendingRequestsCts, CancellationToken originalCancellationToken)
at System.Runtime.CompilerServices.AsyncMethodBuilderCore.Start[TStateMachine](TStateMachine& stateMachine)
at System.Net.Http.HttpClient.<SendAsync>g__Core|83_0(HttpRequestMessage request, HttpCompletionOption completionOption, CancellationTokenSource cts, Boolean disposeCts, CancellationTokenSource pendingRequestsCts, CancellationToken originalCancellationToken)
at System.Net.Http.HttpClient.SendAsync(HttpRequestMessage request, HttpCompletionOption completionOption, CancellationToken cancellationToken)
at Docker.DotNet.DockerClient.PrivateMakeRequestAsync(TimeSpan timeout, HttpCompletionOption completionOption, HttpMethod method, String path, IQueryString queryString, IDictionary`2 headers, IRequestContent data, CancellationToken cancellationToken)
at System.Runtime.CompilerServices.AsyncMethodBuilderCore.Start[TStateMachine](TStateMachine& stateMachine)
at Docker.DotNet.DockerClient.PrivateMakeRequestAsync(TimeSpan timeout, HttpCompletionOption completionOption, HttpMethod method, String path, IQueryString queryString, IDictionary`2 headers, IRequestContent data, CancellationToken cancellationToken)
at Docker.DotNet.DockerClient.MakeRequestAsync(IEnumerable`1 errorHandlers, HttpMethod method, String path, IQueryString queryString, IRequestContent body, IDictionary`2 headers, TimeSpan timeout, CancellationToken token)
at System.Runtime.CompilerServices.AsyncMethodBuilderCore.Start[TStateMachine](TStateMachine& stateMachine)
at Docker.DotNet.DockerClient.MakeRequestAsync(IEnumerable`1 errorHandlers, HttpMethod method, String path, IQueryString queryString, IRequestContent body, IDictionary`2 headers, TimeSpan timeout, CancellationToken token)
at Docker.DotNet.DockerClient.MakeRequestAsync(IEnumerable`1 errorHandlers, HttpMethod method, String path, IQueryString queryString, IRequestContent body, IDictionary`2 headers, CancellationToken token)
at Docker.DotNet.DockerClient.MakeRequestAsync(IEnumerable`1 errorHandlers, HttpMethod method, String path, IQueryString queryString, IRequestContent body, CancellationToken token)
at Docker.DotNet.NetworkOperations.Docker.DotNet.INetworkOperations.ConnectNetworkAsync(String id, NetworkConnectParameters parameters, CancellationToken cancellationToken)
at Synapse.Runtime.Services.DockerRuntimeHost.ExecuteAsync(CancellationToken stoppingToken) in /src/src/runtime/Synapse.Runtime.Docker/Services/DockerRuntimeHost.cs:line 92
at System.Runtime.CompilerServices.AsyncMethodBuilderCore.Start[TStateMachine](TStateMachine& stateMachine)
at Synapse.Runtime.Services.DockerRuntimeHost.ExecuteAsync(CancellationToken stoppingToken)
at Microsoft.Extensions.Hosting.BackgroundService.StartAsync(CancellationToken cancellationToken)
at Microsoft.Extensions.Hosting.Internal.Host.StartAsync(CancellationToken cancellationToken)
at System.Runtime.CompilerServices.AsyncMethodBuilderCore.Start[TStateMachine](TStateMachine& stateMachine)
at Microsoft.Extensions.Hosting.Internal.Host.StartAsync(CancellationToken cancellationToken)
at Microsoft.AspNetCore.Builder.WebApplication.StartAsync(CancellationToken cancellationToken)
at Microsoft.Extensions.Hosting.HostingAbstractionsHostExtensions.RunAsync(IHost host, CancellationToken token)
at System.Runtime.CompilerServices.AsyncMethodBuilderCore.Start[TStateMachine](TStateMachine& stateMachine)
at Microsoft.Extensions.Hosting.HostingAbstractionsHostExtensions.RunAsync(IHost host, CancellationToken token)
at Microsoft.AspNetCore.Builder.WebApplication.RunAsync(String url)
at Program.<Main>$(String[] args) in /src/src/apps/Synapse.Server/Program.cs:line 82
at System.Runtime.CompilerServices.AsyncMethodBuilderCore.Start[TStateMachine](TStateMachine& stateMachine)
at Program.<Main>$(String[] args)
at Program.<Main>(String[] args)
--- End of stack trace from previous location ---
at Docker.DotNet.DockerClient.<>c__DisplayClass6_0.<<-ctor>b__1>d.MoveNext()
--- End of stack trace from previous location ---
at Microsoft.Net.Http.Client.ManagedHandler.ProcessRequestAsync(HttpRequestMessage request, CancellationToken cancellationToken)
--- End of inner exception stack trace ---
at Microsoft.Net.Http.Client.ManagedHandler.ProcessRequestAsync(HttpRequestMessage request, CancellationToken cancellationToken)
at Microsoft.Net.Http.Client.ManagedHandler.SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
at System.Net.Http.HttpClient.<SendAsync>g__Core|83_0(HttpRequestMessage request, HttpCompletionOption completionOption, CancellationTokenSource cts, Boolean disposeCts, CancellationTokenSource pendingRequestsCts, CancellationToken originalCancellationToken)
at Docker.DotNet.DockerClient.PrivateMakeRequestAsync(TimeSpan timeout, HttpCompletionOption completionOption, HttpMethod method, String path, IQueryString queryString, IDictionary`2 headers, IRequestContent data, CancellationToken cancellationToken)
at Docker.DotNet.DockerClient.MakeRequestAsync(IEnumerable`1 errorHandlers, HttpMethod method, String path, IQueryString queryString, IRequestContent body, IDictionary`2 headers, TimeSpan timeout, CancellationToken token)
at Synapse.Runtime.Services.DockerRuntimeHost.ExecuteAsync(CancellationToken stoppingToken) in /src/src/runtime/Synapse.Runtime.Docker/Services/DockerRuntimeHost.cs:line 92
at Microsoft.Extensions.Hosting.Internal.Host.StartAsync(CancellationToken cancellationToken)
at Microsoft.Extensions.Hosting.HostingAbstractionsHostExtensions.RunAsync(IHost host, CancellationToken token)
at Microsoft.Extensions.Hosting.HostingAbstractionsHostExtensions.RunAsync(IHost host, CancellationToken token)
at Program.<Main>$(String[] args) in /src/src/apps/Synapse.Server/Program.cs:line 82
at Program.<Main>(String[] args)
tried adding ENV, still got same error.
env:
- name: KUBERNETES_SERVICE_HOST
value: 10.96.0.1
What you expected to happen:
How to reproduce it:
Anything else we need to know?:
Environment:
k8s version: v1.22
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.