-
Notifications
You must be signed in to change notification settings - Fork 26
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Pipeline the Pipeline #128
Conversation
Codecov Report
@@ Coverage Diff @@
## master #128 +/- ##
==========================================
+ Coverage 67.66% 71.98% +4.32%
==========================================
Files 32 36 +4
Lines 1976 2695 +719
==========================================
+ Hits 1337 1940 +603
- Misses 570 657 +87
- Partials 69 98 +29
📣 We’re building smart automated test selection to slash your CI/CD build times. Learn more |
@@ -134,7 +134,7 @@ Detailed documentation is online: https://github.com/algorand/conduit`, | |||
Run: func(cmd *cobra.Command, args []string) { | |||
err := runConduitCmdWithConfig(cfg) | |||
if err != nil { | |||
fmt.Fprintf(os.Stderr, "\nExiting with error:\n%s.\n", err) | |||
fmt.Fprintf(os.Stderr, "\nExiting with error:\t%s.\n", err) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This improves the clarity of the E2E tests in the case of an error.
Can we add this as a task for #131 ? |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Pending the validation test, this looks good.
Co-authored-by: Will Winder <[email protected]>
@@ -80,7 +80,7 @@ func runConduitCmdWithConfig(args *data.Args) error { | |||
} | |||
|
|||
ctx := context.Background() | |||
pipeline, err := pipeline.MakePipeline(ctx, pCfg, logger) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
No functional changes here, but removing the shadowing of the package by the variable.
Description
Allowing for moderate concurrency in the pipeline but without sacrificing its sequential integrity.
Summary of Changes
conduit/pipeline/common.go
: introducing generic retrying of pipeline methods viaRetries()
andRetriesNoOutput()
conduit/pipeline/pipeline.go
:WhyStopped()
methodjoinError()
instead ofsetError()
to the pipeline's error propertyStart()
and introducing methodsImportHandler()
,ProcessorHandler()
, andExporterHandler()
conduit/pipeline/pipeline_bench_test.go
- benchmarker for the pipeline that includes sleeping plugins with an importer, 2 processors, and an exporter.pkg/cli/cli.go
: remove a line break from the final error printoutIssues
#118
TODO
PipelineData
inside ofBlockData
OStart()
and any resulting orphans inpipeline.go
master
which includes 30 second timeout Algod Importer: Longer Timeout #133Should we send a telemetry observation based onNOT FOR NOW. Reconsider this for enhancement: graceful pipeline interrupt #97WhyStopped()
?What should be logged and how shouldThis is under the umbrella of the "Logging Plugin Performance" threadinternal-tools/.../logstats.go
be modified?Should we send metrics for the callbacks?Not in this PRTesting
E2E
pipeline_bench_test.go
Running a new benchmark test twice on the original code and the new, we have the following results. Note the most pertinent results for the typical indexer DB population use case is
exporter_10ms_while_others_1ms
:Block Generator Results
Running the block generator test using
SCENARIO = scenarios/config.allmixed.small.yml
for 30s, with the original code and the new, each time for 2 experiments we have:Local test network 5 minute sprint
I used the Justfile command
to bootstrap testnet and run a postgresql exporter against it for 300 seconds. I ran it a number of times against both the original pipeline and the new one. Here are the experimental results:
On EC2 - CLASSIC vs. PIPELINING vs. 30 Second Timeout vs. FINAL
I ran catchup tests for 4 versions of conduit:
master
at the time of the runpipelining
branch at the same timepipelining
branch after a 30 second timeout was introduced in the algod importerThere are much more detailed results in a google sheets document, but the summary is:
SUMMARY