Closed
Milestone
expired on Sep 22, 2023
v0.0.1 Barebones Deployment with GRPC
Milestone ID: 53
First milestone is to have things working over GRPC
Workflow spec services that can be deployed over GRPC, thereby running in separate processes. Manually start the processes and submit a workload on the same machine.
Plugins required:
-
Workflow Spec Services Plugin -
Golang Process Plugin -
GRPC Plugin
Detailed task list:
- Golang Process Plugin
- Tidying
-
Update DICodeBuilder and Impl to add an ImportType method for convenience. Remove the current Import implementation on DICodeBuilder and replace its usage with the gogen.Imports struct. Simplify template generation -
Update the workflow spec plugin implementation to use the above, simplifying the implementation. Also move codegen parts into a codegen subdir
-
- Generated DI code
-
Generated graph() method must declare all string args in di. It should return the container (with Get method), not graph.
-
- DI runtime graph/container
-
container Get method should receive a context so that things like server goroutines can shutdown on process exit -
Container should have a waitgroup so that callers can wait on things like server goroutines -
Add an Await method on the DI container to wait for the waitgroup
-
- Generated main method
-
Main-method generation that takes cmd line args, puts them in a map, and invokes the graph function -
Process IRNode should keep track of which nodes must be explicitly instantiated. Generated main() should do that instantiation by calling get() after the definitions. -
Generated main method should create a context for cancellation, pass it to the DI container, and await the waitgroup after getting all definitions
-
- Tidying
- GRPC Plugin
- Client and Server Handler
-
Finish implementing generated client methods; see if using copier is sufficient -
Finish implementing generated server methods -
Implement instantiation code for client, making use of the ctx above -
Implement instantiation code for server, making use of the ctx and waitgroup above
-
- Configuration
-
Add a general IRNode representing runtime configuration -- ie specifying that this config should come from runtime -
Add config for timeout, allowing both a runtime configured value, or a directly configured value
-
- Client and Server Handler