-
Notifications
You must be signed in to change notification settings - Fork 865
feat: add parquet receipt store with DuckDB range queries #2861
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
base: main
Are you sure you want to change the base?
Conversation
|
The latest Buf updates on your PR. Results from workflow Buf / buf (pull_request).
|
Codecov Report❌ Patch coverage is Additional details and impacted files@@ Coverage Diff @@
## main #2861 +/- ##
==========================================
+ Coverage 57.16% 57.28% +0.12%
==========================================
Files 2091 2095 +4
Lines 171145 172176 +1031
==========================================
+ Hits 97827 98627 +800
- Misses 64609 64722 +113
- Partials 8709 8827 +118
Flags with carried forward coverage won't be shown. Click here to find out more.
🚀 New features to boost your workflow:
|
| for blockNum, logs := range chunk.logs { | ||
| if blockNum < fromBlock || blockNum > toBlock { | ||
| continue | ||
| } | ||
| for _, lg := range logs { | ||
| if matchLog(lg, crit) { | ||
| logCopy := *lg | ||
| result = append(result, &logCopy) | ||
| } | ||
| } | ||
| } |
Check warning
Code scanning / CodeQL
Iteration over map Warning
| "database/sql" | ||
| "fmt" | ||
| "path/filepath" | ||
| "runtime" |
Check notice
Code scanning / CodeQL
Sensitive package import Note
| go func() { | ||
| for { | ||
| latestVersion := s.latestVersion.Load() | ||
| pruneBeforeBlock := latestVersion - s.config.KeepRecent | ||
| if pruneBeforeBlock > 0 { | ||
| pruned := s.pruneOldFiles(uint64(pruneBeforeBlock)) | ||
| if pruned > 0 && s.log != nil { | ||
| s.log.Info(fmt.Sprintf("Pruned %d parquet file pairs older than block %d", pruned, pruneBeforeBlock)) | ||
| } | ||
| } | ||
|
|
||
| // Add jitter to avoid thundering herd | ||
| jitter := time.Duration(float64(pruneIntervalSeconds)*0.5) * time.Second | ||
| sleepDuration := time.Duration(pruneIntervalSeconds)*time.Second + jitter | ||
|
|
||
| select { | ||
| case <-s.pruneStop: | ||
| return | ||
| case <-time.After(sleepDuration): | ||
| // Continue to next iteration | ||
| } | ||
| } | ||
| }() |
Check notice
Code scanning / CodeQL
Spawning a Go routine Note
| } | ||
|
|
||
| // Add random jitter (up to 50% of base interval) to avoid thundering herd | ||
| jitter := time.Duration(rand.Float64()*float64(pruneIntervalSeconds)*0.5) * time.Second |
Check notice
Code scanning / CodeQL
Floating point arithmetic Note
| } | ||
|
|
||
| // Add random jitter (up to 50% of base interval) to avoid thundering herd | ||
| jitter := time.Duration(rand.Float64()*float64(pruneIntervalSeconds)*0.5) * time.Second |
Check notice
Code scanning / CodeQL
Floating point arithmetic Note
Summary
This PR adds a parquet-based receipt storage backend with DuckDB for efficient range queries on logs, enabling fast
eth_getLogsqueries across block ranges.Backend: "parquet"in config)KeepRecentconfig-tags duckdbto enable parquet backendThe parquet backend supports the new
FilterLogsrange query API introduced in #2788, enabling efficient cross-block log queries without falling back to per-receipt fetching.Dependencies
Test plan
-tags duckdb