From 6104050c6e07f5330de19cda7b5408614f62fd55 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Duchesneau?= Date: Wed, 31 Jul 2024 11:10:24 -0400 Subject: [PATCH] Prevent 'changing module hash' with a non-zero 'first-streamable-block' (#512) - Reverts commit bf079f8d0faf0abab79f39642b04e8df1f684d9f. - Removed the 'first-streamable-block' flag from 'info' command - Modules retain their initialBlock parameter in the code, executionGraph exposes the adjusted initialBlocks - Added integration tests on tier1 and tier2 --- cmd/substreams/info.go | 4 +- docs/release-notes/change-log.md | 1 + info/info.go | 6 +- info/info_test.go | 15 +- orchestrator/parallelprocessor.go | 3 +- orchestrator/scheduler/scheduler.go | 2 +- orchestrator/stage/stages.go | 7 +- orchestrator/work/worker.go | 21 ++- orchestrator/work/workerpool_test.go | 3 +- pb/sf/substreams/intern/v2/validate.go | 5 +- pb/sf/substreams/v1/modules.go | 8 -- pipeline/exec/graph.go | 34 +++-- pipeline/pipeline.go | 7 +- service/live_back_filler.go | 11 +- service/live_back_filler_test.go | 6 +- service/testing.go | 3 +- service/tier1.go | 9 +- service/tier2.go | 11 +- service/validate_test.go | 67 +++++++++ storage/execout/configs.go | 9 +- storage/index/configs.go | 8 +- storage/store/configmap.go | 8 +- test/complex_integration_test.go | 2 +- test/integration_test.go | 44 ++++-- test/runnable_test.go | 19 ++- .../substreams-test-init0-v0.1.0.spkg | Bin 0 -> 351668 bytes .../simple_substreams_init0/substreams.yaml | 62 +++++++++ test/tier2_integration_test.go | 128 ++++++++++++++++-- test/worker_test.go | 7 +- 29 files changed, 386 insertions(+), 124 deletions(-) create mode 100644 test/testdata/simple_substreams_init0/substreams-test-init0-v0.1.0.spkg create mode 100644 test/testdata/simple_substreams_init0/substreams.yaml diff --git a/cmd/substreams/info.go b/cmd/substreams/info.go index ee09c973f..659c13c5b 100644 --- a/cmd/substreams/info.go +++ b/cmd/substreams/info.go @@ -17,7 +17,6 @@ import ( func init() { infoCmd.Flags().String("output-sinkconfig-files-path", "", "if non-empty, any sinkconfig field of type 'bytes' that was packed from a file will be written to that path") infoCmd.Flags().Bool("skip-package-validation", false, "Do not perform any validation when reading substreams package") - infoCmd.Flags().Uint64("first-streamable-block", 0, "Apply a chain's 'first-streamable-block' to modules, possibly affecting their initialBlock and hashes") infoCmd.Flags().Bool("used-modules-only", false, "When set, only modules that are used by the output module will be displayed (requires the output_module arg to be set)") } @@ -52,7 +51,6 @@ func runInfo(cmd *cobra.Command, args []string) error { } outputSinkconfigFilesPath := sflags.MustGetString(cmd, "output-sinkconfig-files-path") - firstStreamableBlock := sflags.MustGetUint64(cmd, "first-streamable-block") skipPackageValidation := sflags.MustGetBool(cmd, "skip-package-validation") onlyShowUsedModules := sflags.MustGetBool(cmd, "used-modules-only") @@ -60,7 +58,7 @@ func runInfo(cmd *cobra.Command, args []string) error { return fmt.Errorf("used-modules-only flag requires the output_module arg to be set") } - pkgInfo, err := info.Extended(manifestPath, outputModule, skipPackageValidation, firstStreamableBlock) + pkgInfo, err := info.Extended(manifestPath, outputModule, skipPackageValidation) if err != nil { return err } diff --git a/docs/release-notes/change-log.md b/docs/release-notes/change-log.md index 78c5e34bc..4337d2b6c 100644 --- a/docs/release-notes/change-log.md +++ b/docs/release-notes/change-log.md @@ -18,6 +18,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), * Fixed error handling issue in 'backprocessing' causing high CPU usage in tier1 servers * Fixed handling of packages referenced by `ipfs://` URL (now simply using /api/v0/cat?arg=...) * Added `--used-modules-only` flag to `substreams info` to only show modules that are in execution tree for the given output_module +* Revert 'initialBlocks' changes from v1.9.1 because a 'changing module hash' causes more trouble. ## v1.9.2 diff --git a/info/info.go b/info/info.go index 4d243aa70..016c3929e 100644 --- a/info/info.go +++ b/info/info.go @@ -219,7 +219,7 @@ func Basic(pkg *pbsubstreams.Package, graph *manifest.ModuleGraph) (*BasicInfo, return manifestInfo, nil } -func Extended(manifestPath string, outputModule string, skipValidation bool, firstStreamableBlock uint64) (*ExtendedInfo, error) { +func Extended(manifestPath string, outputModule string, skipValidation bool) (*ExtendedInfo, error) { var opts []manifest.Option if skipValidation { opts = append(opts, manifest.SkipPackageValidationReader()) @@ -234,8 +234,6 @@ func Extended(manifestPath string, outputModule string, skipValidation bool, fir return nil, fmt.Errorf("read manifest %q: %w", manifestPath, err) } - pbsubstreams.ApplyFirstStreamableBlockToModules(firstStreamableBlock, pkg.Modules.Modules) - return ExtendedWithPackage(pkg, graph, outputModule) } @@ -247,7 +245,7 @@ func ExtendedWithPackage(pkg *pbsubstreams.Package, graph *manifest.ModuleGraph, var stages [][][]string if outputModule != "" { - execGraph, err := exec.NewOutputModuleGraph(outputModule, true, pkg.Modules) + execGraph, err := exec.NewOutputModuleGraph(outputModule, true, pkg.Modules, 0) if err != nil { return nil, fmt.Errorf("creating output module graph: %w", err) } diff --git a/info/info_test.go b/info/info_test.go index d14fea776..6c8cf9496 100644 --- a/info/info_test.go +++ b/info/info_test.go @@ -6,7 +6,6 @@ import ( "testing" "github.com/streamingfast/substreams/manifest" - "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" ) @@ -27,23 +26,11 @@ func TestBasicInfo(t *testing.T) { } func TestExtendedInfo(t *testing.T) { - info, err := Extended("https://github.com/streamingfast/substreams-uniswap-v3/releases/download/v0.2.8/substreams.spkg", "graph_out", false, 0) + info, err := Extended("https://github.com/streamingfast/substreams-uniswap-v3/releases/download/v0.2.8/substreams.spkg", "graph_out", false) require.NoError(t, err) r, err := json.MarshalIndent(info, "", " ") require.NoError(t, err) - assert.Equal(t, uint64(12369621), info.Modules[0].InitialBlock) - fmt.Println(string(r)) } - -func TestExtendedInfoFirstStreamable(t *testing.T) { - info, err := Extended("https://github.com/streamingfast/substreams-uniswap-v3/releases/download/v0.2.8/substreams.spkg", "graph_out", false, 999999999) - require.NoError(t, err) - - assert.Equal(t, uint64(999999999), info.Modules[0].InitialBlock) - assert.Equal(t, uint64(999999999), info.Modules[1].InitialBlock) - assert.Equal(t, uint64(999999999), info.Modules[2].InitialBlock) - // ... -} diff --git a/orchestrator/parallelprocessor.go b/orchestrator/parallelprocessor.go index e3bb5a2d3..f1920ba69 100644 --- a/orchestrator/parallelprocessor.go +++ b/orchestrator/parallelprocessor.go @@ -73,7 +73,8 @@ func BuildParallelProcessor( // no ReadExecOut if output type is an index if requestedModule.GetKindMap() != nil { - execOutSegmenter := reqPlan.ReadOutSegmenter(requestedModule.InitialBlock) + initialBlock := execGraph.ModulesInitBlocks()[requestedModule.Name] + execOutSegmenter := reqPlan.ReadOutSegmenter(initialBlock) walker := execoutStorage.NewFileWalker(requestedModule.Name, execOutSegmenter) sched.ExecOutWalker = orchestratorExecout.NewWalker( diff --git a/orchestrator/scheduler/scheduler.go b/orchestrator/scheduler/scheduler.go index 32ea3a112..a86936edc 100644 --- a/orchestrator/scheduler/scheduler.go +++ b/orchestrator/scheduler/scheduler.go @@ -124,7 +124,7 @@ func (s *Scheduler) Update(msg loop.Msg) loop.Cmd { modules := s.Stages.StageModules(workUnit.Stage) return loop.Batch( - worker.Work(s.ctx, workUnit, workRange, modules, s.stream), + worker.Work(s.ctx, workUnit, workRange.StartBlock, modules, s.stream), work.CmdScheduleNextJob(), ) diff --git a/orchestrator/stage/stages.go b/orchestrator/stage/stages.go index e28ef6714..288eddc87 100644 --- a/orchestrator/stage/stages.go +++ b/orchestrator/stage/stages.go @@ -70,6 +70,7 @@ func NewStages( logger := reqctx.Logger(ctx) stagedModules := execGraph.StagedUsedModules() + modulesInitBlocks := execGraph.ModulesInitBlocks() out = &Stages{ ctx: ctx, logger: reqctx.Logger(ctx), @@ -108,13 +109,13 @@ func NewStages( } var moduleStates []*StoreModuleState - stageLowestInitBlock := layer[0].InitialBlock + stageLowestInitBlock := modulesInitBlocks[layer[0].Name] for _, mod := range layer { - modSegmenter := segmenter.WithInitialBlock(mod.InitialBlock) + modSegmenter := segmenter.WithInitialBlock(modulesInitBlocks[mod.Name]) modState := NewModuleState(logger, mod.Name, modSegmenter, storeConfigs[mod.Name]) moduleStates = append(moduleStates, modState) - stageLowestInitBlock = min(stageLowestInitBlock, mod.InitialBlock) + stageLowestInitBlock = min(stageLowestInitBlock, modulesInitBlocks[mod.Name]) } stageSegmenter := segmenter.WithInitialBlock(stageLowestInitBlock) diff --git a/orchestrator/work/worker.go b/orchestrator/work/worker.go index 3b0d0baf3..cc3027f41 100644 --- a/orchestrator/work/worker.go +++ b/orchestrator/work/worker.go @@ -21,7 +21,6 @@ import ( "go.uber.org/zap" "google.golang.org/grpc/codes" - "github.com/streamingfast/substreams/block" "github.com/streamingfast/substreams/client" "github.com/streamingfast/substreams/metrics" "github.com/streamingfast/substreams/orchestrator/loop" @@ -41,10 +40,10 @@ type Result struct { type Worker interface { ID() string - Work(ctx context.Context, unit stage.Unit, workRange *block.Range, moduleNames []string, upstream *response.Stream) loop.Cmd // *Result + Work(ctx context.Context, unit stage.Unit, startBlock uint64, moduleNames []string, upstream *response.Stream) loop.Cmd // *Result } -func NewWorkerFactoryFromFunc(f func(ctx context.Context, unit stage.Unit, workRange *block.Range, moduleNames []string, upstream *response.Stream) loop.Cmd) *SimpleWorkerFactory { +func NewWorkerFactoryFromFunc(f func(ctx context.Context, unit stage.Unit, startBlock uint64, moduleNames []string, upstream *response.Stream) loop.Cmd) *SimpleWorkerFactory { return &SimpleWorkerFactory{ f: f, id: atomic.AddUint64(&lastWorkerID, 1), @@ -52,12 +51,12 @@ func NewWorkerFactoryFromFunc(f func(ctx context.Context, unit stage.Unit, workR } type SimpleWorkerFactory struct { - f func(ctx context.Context, unit stage.Unit, workRange *block.Range, moduleNames []string, upstream *response.Stream) loop.Cmd + f func(ctx context.Context, unit stage.Unit, startBlock uint64, moduleNames []string, upstream *response.Stream) loop.Cmd id uint64 } -func (f SimpleWorkerFactory) Work(ctx context.Context, unit stage.Unit, workRange *block.Range, moduleNames []string, upstream *response.Stream) loop.Cmd { - return f.f(ctx, unit, workRange, moduleNames, upstream) +func (f SimpleWorkerFactory) Work(ctx context.Context, unit stage.Unit, startBlock uint64, moduleNames []string, upstream *response.Stream) loop.Cmd { + return f.f(ctx, unit, startBlock, moduleNames, upstream) } func (f SimpleWorkerFactory) ID() string { @@ -87,13 +86,13 @@ func (w *RemoteWorker) ID() string { return fmt.Sprintf("%d", w.id) } -func NewRequest(ctx context.Context, req *reqctx.RequestDetails, stageIndex int, workRange *block.Range) *pbssinternal.ProcessRangeRequest { +func NewRequest(ctx context.Context, req *reqctx.RequestDetails, stageIndex int, startBlock uint64) *pbssinternal.ProcessRangeRequest { tier2ReqParams, ok := reqctx.GetTier2RequestParameters(ctx) if !ok { panic("unable to get tier2 request parameters") } - segment := uint64(workRange.StartBlock) / tier2ReqParams.StateBundleSize + segment := startBlock / tier2ReqParams.StateBundleSize return &pbssinternal.ProcessRangeRequest{ Modules: req.Modules, @@ -111,8 +110,8 @@ func NewRequest(ctx context.Context, req *reqctx.RequestDetails, stageIndex int, } } -func (w *RemoteWorker) Work(ctx context.Context, unit stage.Unit, workRange *block.Range, moduleNames []string, upstream *response.Stream) loop.Cmd { - request := NewRequest(ctx, reqctx.Details(ctx), unit.Stage, workRange) +func (w *RemoteWorker) Work(ctx context.Context, unit stage.Unit, startBlock uint64, moduleNames []string, upstream *response.Stream) loop.Cmd { + request := NewRequest(ctx, reqctx.Details(ctx), unit.Stage, startBlock) logger := reqctx.Logger(ctx) return func() loop.Msg { @@ -192,7 +191,7 @@ func (w *RemoteWorker) Work(ctx context.Context, unit stage.Unit, workRange *blo } } -func (w *RemoteWorker) work(ctx context.Context, request *pbssinternal.ProcessRangeRequest, moduleNames []string, upstream *response.Stream) *Result { +func (w *RemoteWorker) work(ctx context.Context, request *pbssinternal.ProcessRangeRequest, _ []string, upstream *response.Stream) *Result { metrics.Tier1ActiveWorkerRequest.Inc() metrics.Tier1WorkerRequestCounter.Inc() defer metrics.Tier1ActiveWorkerRequest.Dec() diff --git a/orchestrator/work/workerpool_test.go b/orchestrator/work/workerpool_test.go index 8c051f10b..dd2745ead 100644 --- a/orchestrator/work/workerpool_test.go +++ b/orchestrator/work/workerpool_test.go @@ -8,7 +8,6 @@ import ( "github.com/stretchr/testify/assert" "go.uber.org/zap" - "github.com/streamingfast/substreams/block" "github.com/streamingfast/substreams/orchestrator/loop" "github.com/streamingfast/substreams/orchestrator/response" "github.com/streamingfast/substreams/orchestrator/stage" @@ -17,7 +16,7 @@ import ( func Test_workerPoolPool_Borrow_Return(t *testing.T) { ctx := context.Background() pi := NewWorkerPool(ctx, 2, func(logger *zap.Logger) Worker { - return NewWorkerFactoryFromFunc(func(ctx context.Context, unit stage.Unit, workRange *block.Range, moduleNames []string, upstream *response.Stream) loop.Cmd { + return NewWorkerFactoryFromFunc(func(ctx context.Context, unit stage.Unit, startBlock uint64, moduleNames []string, upstream *response.Stream) loop.Cmd { return func() loop.Msg { return &Result{} } diff --git a/pb/sf/substreams/intern/v2/validate.go b/pb/sf/substreams/intern/v2/validate.go index 967c9378a..3680f8867 100644 --- a/pb/sf/substreams/intern/v2/validate.go +++ b/pb/sf/substreams/intern/v2/validate.go @@ -24,9 +24,8 @@ func (r *ProcessRangeRequest) Validate() error { return fmt.Errorf("merged blocks store is required in request") case r.SegmentSize == 0: return fmt.Errorf("a non-zero state bundle size is required in request") - case (r.SegmentNumber+1)*r.SegmentSize < r.FirstStreamableBlock: - return fmt.Errorf("requested segment is way below the first streamable block") - + case ((r.SegmentNumber+1)*r.SegmentSize - 1) < r.FirstStreamableBlock: + return fmt.Errorf("segment is completely below the first streamable block") } seenStores := map[string]bool{} diff --git a/pb/sf/substreams/v1/modules.go b/pb/sf/substreams/v1/modules.go index e95896906..4ef27357e 100644 --- a/pb/sf/substreams/v1/modules.go +++ b/pb/sf/substreams/v1/modules.go @@ -13,14 +13,6 @@ const ( ModuleKindBlockIndex ) -func ApplyFirstStreamableBlockToModules(firstStreamableBlock uint64, modules []*Module) { - for _, mod := range modules { - if mod.InitialBlock < firstStreamableBlock { - mod.InitialBlock = firstStreamableBlock - } - } -} - func (m *Module) BlockFilterQueryString() (string, error) { if m.BlockFilter == nil { return "", nil diff --git a/pipeline/exec/graph.go b/pipeline/exec/graph.go index 342713a62..1ab0db049 100644 --- a/pipeline/exec/graph.go +++ b/pipeline/exec/graph.go @@ -67,18 +67,18 @@ func (g *Graph) LowestStoresInitBlock() *uint64 { return g.lowestStoresIni func (g *Graph) ModulesInitBlocks() map[string]uint64 { return g.modulesInitBlocks } func (g *Graph) OutputModuleStageIndex() int { return len(g.stagedUsedModules) - 1 } -func NewOutputModuleGraph(outputModule string, productionMode bool, modules *pbsubstreams.Modules) (out *Graph, err error) { +func NewOutputModuleGraph(outputModule string, productionMode bool, modules *pbsubstreams.Modules, firstStreamableBlock uint64) (out *Graph, err error) { out = &Graph{ requestModules: modules, } - if err := out.computeGraph(outputModule, productionMode, modules); err != nil { + if err := out.computeGraph(outputModule, productionMode, modules, firstStreamableBlock); err != nil { return nil, fmt.Errorf("module graph: %w", err) } return out, nil } -func (g *Graph) computeGraph(outputModule string, productionMode bool, modules *pbsubstreams.Modules) error { +func (g *Graph) computeGraph(outputModule string, productionMode bool, modules *pbsubstreams.Modules, firstStreamableBlock uint64) error { graph, err := manifest.NewModuleGraph(modules.Modules) if err != nil { return fmt.Errorf("compute graph: %w", err) @@ -92,7 +92,11 @@ func (g *Graph) computeGraph(outputModule string, productionMode bool, modules * g.usedModules = processModules g.modulesInitBlocks = map[string]uint64{} for _, mod := range g.usedModules { - g.modulesInitBlocks[mod.Name] = mod.InitialBlock + initialBlock := mod.InitialBlock + if initialBlock < firstStreamableBlock { + initialBlock = firstStreamableBlock + } + g.modulesInitBlocks[mod.Name] = initialBlock } g.stagedUsedModules, err = computeStages(g.usedModules, g.modulesInitBlocks) @@ -100,8 +104,8 @@ func (g *Graph) computeGraph(outputModule string, productionMode bool, modules * return err } - g.lowestInitBlock = computeLowestInitBlock(processModules) - g.lowestStoresInitBlock = computeLowestStoresInitBlock(processModules) + g.lowestInitBlock = computeLowestInitBlock(processModules, firstStreamableBlock) + g.lowestStoresInitBlock = computeLowestStoresInitBlock(processModules, firstStreamableBlock) if err := g.hashModules(graph); err != nil { return fmt.Errorf("cannot hash module: %w", err) } @@ -126,7 +130,7 @@ func (g *Graph) computeGraph(outputModule string, productionMode bool, modules * } // computeLowestStoresInitBlock finds the lowest initial block of all store modules. -func computeLowestStoresInitBlock(modules []*pbsubstreams.Module) (out *uint64) { +func computeLowestStoresInitBlock(modules []*pbsubstreams.Module, firstStreamableBlock uint64) (out *uint64) { lowest := uint64(math.MaxUint64) countStores := 0 for _, mod := range modules { @@ -143,12 +147,15 @@ func computeLowestStoresInitBlock(modules []*pbsubstreams.Module) (out *uint64) return nil } + if lowest < firstStreamableBlock { + return &firstStreamableBlock + } return &lowest } // computeLowestInitBlock finds the lowest initial block of all modules that are not block indexes. // if there are only blockIndex types of modules, it returns 0, because blockIndex modules are always at 0. -func computeLowestInitBlock(modules []*pbsubstreams.Module) (out uint64) { +func computeLowestInitBlock(modules []*pbsubstreams.Module, firstStreamableBlock uint64) (out uint64) { var atLeastOneModuleThatIsNotAnIndex bool lowest := uint64(math.MaxUint64) for _, mod := range modules { @@ -161,7 +168,10 @@ func computeLowestInitBlock(modules []*pbsubstreams.Module) (out uint64) { } } if !atLeastOneModuleThatIsNotAnIndex { - return 0 + return firstStreamableBlock + } + if lowest < firstStreamableBlock { + return firstStreamableBlock } return lowest } @@ -243,12 +253,12 @@ func computeStages(mods []*pbsubstreams.Module, initBlocks map[string]uint64) (s continue case *pbsubstreams.Module_Input_Map_: depModName = input.Map.ModuleName - if mod.InitialBlock >= initBlocks[depModName] { + if initBlocks[mod.Name] >= initBlocks[depModName] { validInputsAtInitialBlock = true } case *pbsubstreams.Module_Input_Store_: depModName = input.Store.ModuleName - if mod.InitialBlock >= initBlocks[depModName] { + if initBlocks[mod.Name] >= initBlocks[depModName] { validInputsAtInitialBlock = true } default: @@ -264,7 +274,7 @@ func computeStages(mods []*pbsubstreams.Module, initBlocks map[string]uint64) (s } if !validInputsAtInitialBlock { - return nil, fmt.Errorf("module %q has no input available at its initial block %d", mod.Name, mod.InitialBlock) + return nil, fmt.Errorf("module %q has no input available at its initial block %d", mod.Name, initBlocks[mod.Name]) } //Check block index dependence diff --git a/pipeline/pipeline.go b/pipeline/pipeline.go index 8d43fea7e..6be13e0b3 100644 --- a/pipeline/pipeline.go +++ b/pipeline/pipeline.go @@ -479,6 +479,7 @@ func (p *Pipeline) BuildModuleExecutors(ctx context.Context) error { } p.loadedModules = loadedModules + modulesInitBlocks := p.execGraph.ModulesInitBlocks() var stagedModuleExecutors [][]exec.ModuleExecutor for _, stage := range p.executionStages { @@ -516,7 +517,7 @@ func (p *Pipeline) BuildModuleExecutors(ctx context.Context) error { baseExecutor := exec.NewBaseExecutor( ctx, module.Name, - module.InitialBlock, + modulesInitBlocks[module.Name], mod, p.wasmRuntime.InstanceCacheEnabled(), inputs, @@ -540,7 +541,7 @@ func (p *Pipeline) BuildModuleExecutors(ctx context.Context) error { baseExecutor := exec.NewBaseExecutor( ctx, module.Name, - module.InitialBlock, + modulesInitBlocks[module.Name], mod, p.wasmRuntime.InstanceCacheEnabled(), inputs, @@ -558,7 +559,7 @@ func (p *Pipeline) BuildModuleExecutors(ctx context.Context) error { baseExecutor := exec.NewBaseExecutor( ctx, module.Name, - module.InitialBlock, + modulesInitBlocks[module.Name], mod, p.wasmRuntime.InstanceCacheEnabled(), inputs, diff --git a/service/live_back_filler.go b/service/live_back_filler.go index 79a4e7a17..1a5bcb410 100644 --- a/service/live_back_filler.go +++ b/service/live_back_filler.go @@ -6,7 +6,6 @@ import ( "io" "github.com/streamingfast/derr" - "github.com/streamingfast/substreams/block" "github.com/streamingfast/substreams/orchestrator/work" "github.com/streamingfast/substreams/reqctx" @@ -20,7 +19,7 @@ import ( const finalBlockDelay = 120 const backfillRetries = 999 // no point in failing "early". It may be failing because merged blocks are lagging behind a little bit. -type RequestBackProcessingFunc = func(ctx context.Context, logger *zap.Logger, blockRange *block.Range, stageToProcess int, clientFactory client.InternalClientFactory, jobCompleted chan error) +type RequestBackProcessingFunc = func(ctx context.Context, logger *zap.Logger, startBlock uint64, stageToProcess int, clientFactory client.InternalClientFactory, jobCompleted chan error) type LiveBackFiller struct { RequestBackProcessing RequestBackProcessingFunc @@ -57,8 +56,8 @@ func (l *LiveBackFiller) ProcessBlock(blk *pbbstream.Block, obj interface{}) (er return l.NextHandler.ProcessBlock(blk, obj) } -func RequestBackProcessing(ctx context.Context, logger *zap.Logger, blockRange *block.Range, stageToProcess int, clientFactory client.InternalClientFactory, jobResult chan error) { - liveBackFillerRequest := work.NewRequest(ctx, reqctx.Details(ctx), stageToProcess, blockRange) +func RequestBackProcessing(ctx context.Context, logger *zap.Logger, startBlock uint64, stageToProcess int, clientFactory client.InternalClientFactory, jobResult chan error) { + liveBackFillerRequest := work.NewRequest(ctx, reqctx.Details(ctx), stageToProcess, startBlock) err := derr.RetryContext(ctx, backfillRetries, func(ctx context.Context) error { err := requestBackProcessing(ctx, logger, liveBackFillerRequest, clientFactory) @@ -149,10 +148,8 @@ func (l *LiveBackFiller) Start(ctx context.Context) { if (targetSegment > l.currentSegment) && mergedBlockIsWritten { - liveBackFillerRange := block.NewRange(segmentStart, segmentEnd) - jobProcessing = true - go l.RequestBackProcessing(ctx, l.logger, liveBackFillerRange, l.stageToProcess, l.clientFactory, jobResult) + go l.RequestBackProcessing(ctx, l.logger, segmentStart, l.stageToProcess, l.clientFactory, jobResult) } } } diff --git a/service/live_back_filler_test.go b/service/live_back_filler_test.go index 04d0b4476..b83bd0f8f 100644 --- a/service/live_back_filler_test.go +++ b/service/live_back_filler_test.go @@ -6,8 +6,6 @@ import ( "testing" "time" - "github.com/streamingfast/substreams/block" - "github.com/streamingfast/bstream" pbbstream "github.com/streamingfast/bstream/pb/sf/bstream/v1" @@ -90,13 +88,13 @@ func TestBackFiller(t *testing.T) { testLogger := zap.NewNop() segmentProcessed := make(chan uint64) - RequestBackProcessingTest := func(ctx context.Context, logger *zap.Logger, blockRange *block.Range, stageToProcess int, clientFactory client.InternalClientFactory, jobResult chan error) { + RequestBackProcessingTest := func(ctx context.Context, logger *zap.Logger, startBlock uint64, stageToProcess int, clientFactory client.InternalClientFactory, jobResult chan error) { var err error if c.errorBackProcessing { err = fmt.Errorf("fail") } - segmentNumber := blockRange.ExclusiveEndBlock / c.segmentSize + segmentNumber := startBlock/c.segmentSize + 1 segmentProcessed <- segmentNumber jobResult <- err diff --git a/service/testing.go b/service/testing.go index b107e2307..fe59192df 100644 --- a/service/testing.go +++ b/service/testing.go @@ -4,6 +4,7 @@ import ( "context" "fmt" + "github.com/streamingfast/bstream" "github.com/streamingfast/substreams/wasm" "github.com/streamingfast/substreams/reqctx" @@ -34,7 +35,7 @@ func TestNewService(runtimeConfig config.RuntimeConfig, linearHandoffBlockNum ui } func (s *Tier1Service) TestBlocks(ctx context.Context, isSubRequest bool, request *pbsubstreamsrpc.Request, respFunc substreams.ResponseFunc) error { - execGraph, err := exec.NewOutputModuleGraph(request.OutputModule, request.ProductionMode, request.Modules) + execGraph, err := exec.NewOutputModuleGraph(request.OutputModule, request.ProductionMode, request.Modules, bstream.GetProtocolFirstStreamableBlock) if err != nil { return stream.NewErrInvalidArg(err.Error()) } diff --git a/service/tier1.go b/service/tier1.go index 42e949fed..815296aba 100644 --- a/service/tier1.go +++ b/service/tier1.go @@ -228,10 +228,7 @@ func (s *Tier1Service) Blocks( return connect.NewError(connect.CodeInvalidArgument, fmt.Errorf("validate request: %w", err)) } - // this tweaks the actual request so all initialBlocks are correct with the given chain firstStreamableBlock - pbsubstreams.ApplyFirstStreamableBlockToModules(bstream.GetProtocolFirstStreamableBlock, request.Modules.Modules) - - execGraph, err := exec.NewOutputModuleGraph(request.OutputModule, request.ProductionMode, request.Modules) + execGraph, err := exec.NewOutputModuleGraph(request.OutputModule, request.ProductionMode, request.Modules, bstream.GetProtocolFirstStreamableBlock) if err != nil { return bsstream.NewErrInvalidArg(err.Error()) } @@ -450,12 +447,12 @@ func (s *Tier1Service) blocks(ctx context.Context, request *pbsubstreamsrpc.Requ segmentSize := s.runtimeConfig.SegmentSize - execOutputConfigs, err := execout.NewConfigs(cacheStore, execGraph.UsedModules(), execGraph.ModuleHashes(), segmentSize, logger) + execOutputConfigs, err := execout.NewConfigs(cacheStore, execGraph.UsedModules(), execGraph.ModuleHashes(), segmentSize, chainFirstStreamableBlock, logger) if err != nil { return fmt.Errorf("new config map: %w", err) } - storeConfigs, err := store.NewConfigMap(cacheStore, execGraph.Stores(), execGraph.ModuleHashes()) + storeConfigs, err := store.NewConfigMap(cacheStore, execGraph.Stores(), execGraph.ModuleHashes(), chainFirstStreamableBlock) if err != nil { return fmt.Errorf("configuring stores: %w", err) } diff --git a/service/tier2.go b/service/tier2.go index a540f19f7..e505ab457 100644 --- a/service/tier2.go +++ b/service/tier2.go @@ -128,9 +128,6 @@ func (s *Tier2Service) ProcessRange(request *pbssinternal.ProcessRangeRequest, s metrics.Tier2RequestCounter.Inc() defer metrics.Tier2ActiveRequests.Dec() - // this tweaks the actual request so all initialBlocks are correct with the given chain firstStreamableBlock - pbsubstreams.ApplyFirstStreamableBlockToModules(request.FirstStreamableBlock, request.Modules.Modules) - // We keep `err` here as the unaltered error from `blocks` call, this is used in the EndSpan to record the full error // and not only the `grpcError` one which is a subset view of the full `err`. var err error @@ -174,6 +171,7 @@ func (s *Tier2Service) ProcessRange(request *pbssinternal.ProcessRangeRequest, s zap.Uint32("stage", request.Stage), zap.Strings("modules", moduleNames), zap.String("output_module", request.OutputModule), + zap.Uint64("first_streamable_block", request.FirstStreamableBlock), } if auth := dauth.FromContext(ctx); auth != nil { @@ -237,7 +235,7 @@ func (s *Tier2Service) processRange(ctx context.Context, request *pbssinternal.P return err } - execGraph, err := exec.NewOutputModuleGraph(request.OutputModule, true, request.Modules) + execGraph, err := exec.NewOutputModuleGraph(request.OutputModule, true, request.Modules, request.FirstStreamableBlock) if err != nil { return stream.NewErrInvalidArg(err.Error()) } @@ -265,18 +263,19 @@ func (s *Tier2Service) processRange(ctx context.Context, request *pbssinternal.P execGraph.UsedModulesUpToStage(int(request.Stage)), execGraph.ModuleHashes(), request.SegmentSize, + request.FirstStreamableBlock, logger) if err != nil { return fmt.Errorf("new config map: %w", err) } - storeConfigs, err := store.NewConfigMap(cacheStore, execGraph.Stores(), execGraph.ModuleHashes()) + storeConfigs, err := store.NewConfigMap(cacheStore, execGraph.Stores(), execGraph.ModuleHashes(), request.FirstStreamableBlock) if err != nil { return fmt.Errorf("configuring stores: %w", err) } // indexes are not metered: we want users to use them as much as possible - indexConfigs, err := index.NewConfigs(unmeteredCacheStore, execGraph.UsedIndexesModulesUpToStage(int(request.Stage)), execGraph.ModuleHashes(), logger) + indexConfigs, err := index.NewConfigs(unmeteredCacheStore, execGraph.UsedIndexesModulesUpToStage(int(request.Stage)), execGraph.ModuleHashes(), request.FirstStreamableBlock, logger) if err != nil { return fmt.Errorf("configuring indexes: %w", err) } diff --git a/service/validate_test.go b/service/validate_test.go index 4ce4084e9..fc161dcf9 100644 --- a/service/validate_test.go +++ b/service/validate_test.go @@ -6,6 +6,7 @@ import ( "github.com/stretchr/testify/require" + pbssinternal "github.com/streamingfast/substreams/pb/sf/substreams/intern/v2" pbsubstreamsrpc "github.com/streamingfast/substreams/pb/sf/substreams/rpc/v2" pbsubstreams "github.com/streamingfast/substreams/pb/sf/substreams/v1" ) @@ -42,6 +43,72 @@ func Test_ValidateRequest(t *testing.T) { } } +func Test_ValidateTier2Request(t *testing.T) { + + //testStoreModule := &pbsubstreams.Module{ + // Name: "test", + // Kind: &pbsubstreams.Module_KindStore_{}, + //} + testMapModule := &pbsubstreams.Module{ + Name: "test", + Kind: &pbsubstreams.Module_KindMap_{}, + } + + // testOutputMap := withOutputModule("output_mod", "map") + // testOutputStore := withOutputModule("output_mod", "store") + + getPerfectRequest := func() *pbssinternal.ProcessRangeRequest { + return &pbssinternal.ProcessRangeRequest{ + Modules: &pbsubstreams.Modules{Modules: []*pbsubstreams.Module{testMapModule}}, + OutputModule: "test", + Stage: 0, + SegmentNumber: 10, + SegmentSize: 10, + FirstStreamableBlock: 0, + MeteringConfig: "metering", + BlockType: "block", + StateStore: "/tmp/state", + MergedBlocksStore: "/tmp/merged", + } + } + + tests := []struct { + name string + tweakReq func(*pbssinternal.ProcessRangeRequest) + expect error + }{ + {"negative start block num", func(req *pbssinternal.ProcessRangeRequest) { req.Modules = nil }, + fmt.Errorf("validate tier2 request: no modules found in request")}, + {"completely below first streamable block", func(req *pbssinternal.ProcessRangeRequest) { req.FirstStreamableBlock = 110 }, + fmt.Errorf("validate tier2 request: segment is completely below the first streamable block")}, + {"half below first streamable block", func(req *pbssinternal.ProcessRangeRequest) { req.FirstStreamableBlock = 109 }, + nil}, + {"old 'stopBlockNum' is set", func(req *pbssinternal.ProcessRangeRequest) { req.StopBlockNum = 123 }, + fmt.Errorf("validate tier2 request: invalid protocol: update your tier1")}, + {"no output module", func(req *pbssinternal.ProcessRangeRequest) { req.OutputModule = "" }, + fmt.Errorf("validate tier2 request: no output module defined in request")}, + {"no metering config", func(req *pbssinternal.ProcessRangeRequest) { req.MeteringConfig = "" }, + fmt.Errorf("validate tier2 request: metering config is required in request")}, + {"no blocktype", func(req *pbssinternal.ProcessRangeRequest) { req.BlockType = "" }, + fmt.Errorf("validate tier2 request: block type is required in request")}, + {"working", func(req *pbssinternal.ProcessRangeRequest) {}, + nil}, + } + + for _, test := range tests { + t.Run(test.name, func(t *testing.T) { + req := getPerfectRequest() + test.tweakReq(req) + err := ValidateTier2Request(req) + if test.expect != nil { + require.EqualError(t, err, test.expect.Error()) + } else { + require.NoError(t, err) + } + }) + } +} + type reqOption func(*pbsubstreamsrpc.Request) *pbsubstreamsrpc.Request func withOutputModule(outputModule, kind string) reqOption { diff --git a/storage/execout/configs.go b/storage/execout/configs.go index 0bf53e627..f5d8a219e 100644 --- a/storage/execout/configs.go +++ b/storage/execout/configs.go @@ -16,12 +16,17 @@ type Configs struct { logger *zap.Logger } -func NewConfigs(baseObjectStore dstore.Store, allRequestedModules []*pbsubstreams.Module, moduleHashes *manifest.ModuleHashes, execOutputSaveInterval uint64, logger *zap.Logger) (*Configs, error) { +func NewConfigs(baseObjectStore dstore.Store, allRequestedModules []*pbsubstreams.Module, moduleHashes *manifest.ModuleHashes, execOutputSaveInterval uint64, firstStreamableBlock uint64, logger *zap.Logger) (*Configs, error) { out := make(map[string]*Config) for _, mod := range allRequestedModules { + + initialBlock := mod.InitialBlock + if initialBlock < firstStreamableBlock { + initialBlock = firstStreamableBlock + } conf, err := NewConfig( mod.Name, - mod.InitialBlock, + initialBlock, mod.ModuleKind(), moduleHashes.Get(mod.Name), baseObjectStore, diff --git a/storage/index/configs.go b/storage/index/configs.go index 9cc0d7563..c8f71a43e 100644 --- a/storage/index/configs.go +++ b/storage/index/configs.go @@ -14,12 +14,16 @@ type Configs struct { logger *zap.Logger } -func NewConfigs(baseObjectStore dstore.Store, allRequestedModules []*pbsubstreams.Module, moduleHashes *manifest.ModuleHashes, logger *zap.Logger) (*Configs, error) { +func NewConfigs(baseObjectStore dstore.Store, allRequestedModules []*pbsubstreams.Module, moduleHashes *manifest.ModuleHashes, firstStreamableBlock uint64, logger *zap.Logger) (*Configs, error) { out := make(map[string]*Config) for _, mod := range allRequestedModules { + initialBlock := mod.InitialBlock + if initialBlock < firstStreamableBlock { + initialBlock = firstStreamableBlock + } conf, err := NewConfig( mod.Name, - mod.InitialBlock, + initialBlock, moduleHashes.Get(mod.Name), baseObjectStore, logger, diff --git a/storage/store/configmap.go b/storage/store/configmap.go index e0a9d1801..cbb090dca 100644 --- a/storage/store/configmap.go +++ b/storage/store/configmap.go @@ -10,12 +10,16 @@ import ( type ConfigMap map[string]*Config -func NewConfigMap(baseObjectStore dstore.Store, storeModules []*pbsubstreams.Module, moduleHashes *manifest.ModuleHashes) (out ConfigMap, err error) { +func NewConfigMap(baseObjectStore dstore.Store, storeModules []*pbsubstreams.Module, moduleHashes *manifest.ModuleHashes, firstStreamableBlock uint64) (out ConfigMap, err error) { out = make(ConfigMap) for _, storeModule := range storeModules { + initialBlock := storeModule.InitialBlock + if initialBlock < firstStreamableBlock { + initialBlock = firstStreamableBlock + } c, err := NewConfig( storeModule.Name, - storeModule.InitialBlock, + initialBlock, moduleHashes.Get(storeModule.Name), storeModule.GetKindStore().UpdatePolicy, storeModule.GetKindStore().ValueType, diff --git a/test/complex_integration_test.go b/test/complex_integration_test.go index efa5983b0..a306e1287 100644 --- a/test/complex_integration_test.go +++ b/test/complex_integration_test.go @@ -62,7 +62,7 @@ func TestAllAssertionsInComplex(t *testing.T) { for _, c := range cases { t.Run(c.name, func(t *testing.T) { - run := newTestRun(t, int64(c.startBlock), c.linearHandoffBlock, c.exclusiveEndBlock, c.moduleName, "./testdata/complex_substreams/complex-substreams-v0.1.0.spkg") + run := newTestRun(t, int64(c.startBlock), c.linearHandoffBlock, c.exclusiveEndBlock, 0, c.moduleName, "./testdata/complex_substreams/complex-substreams-v0.1.0.spkg") err := run.Run(t, c.moduleName) if c.expectError { require.Error(t, err) diff --git a/test/integration_test.go b/test/integration_test.go index b85ea175b..d5d5286b4 100644 --- a/test/integration_test.go +++ b/test/integration_test.go @@ -128,7 +128,7 @@ func TestForkHandling(t *testing.T) { for _, test := range tests { t.Run(test.name, func(t *testing.T) { - run := newTestRun(t, 1, 1, 7, test.module, "./testdata/simple_substreams/substreams-test-v0.1.0.spkg") + run := newTestRun(t, 1, 1, 7, 0, test.module, "./testdata/simple_substreams/substreams-test-v0.1.0.spkg") run.NewBlockGenerator = func(startBlock uint64, inclusiveStopBlock uint64) TestBlockGenerator { return &ForkBlockGenerator{ initialLIB: bstream.NewBlockRef("0a", 0), @@ -187,6 +187,7 @@ func TestOneStoreOneMap(t *testing.T) { startBlock int64 linearBlock uint64 stopBlock uint64 + firstStreamableBlock uint64 production bool preWork testPreWork expectedResponseCount int @@ -252,6 +253,23 @@ func TestOneStoreOneMap(t *testing.T) { assertTestStoreAddI64Hash + "/outputs/0000000020-0000000030.output", // map }, }, + { + name: "prod_mode_back_forward_to_stop_nonzero_first_streamable", + firstStreamableBlock: 16, + startBlock: 0, + linearBlock: 30, + stopBlock: 30, + production: true, + expectedResponseCount: 14, + expectFiles: []string{ + assertTestStoreAddI64Hash + "/outputs/0000000016-0000000020.output", // map + assertTestStoreAddI64Hash + "/outputs/0000000020-0000000030.output", // map + testStoreAddI64Hash + "/outputs/0000000016-0000000020.output", + testStoreAddI64Hash + "/outputs/0000000020-0000000030.output", + testStoreAddI64Hash + "/states/0000000020-0000000016.kv", + testStoreAddI64Hash + "/states/0000000030-0000000016.kv", + }, + }, { name: "prod_mode_back_forward_to_stop_passed_boundary", startBlock: 25, @@ -279,7 +297,7 @@ func TestOneStoreOneMap(t *testing.T) { stopBlock: 30, production: true, preWork: func(t *testing.T, run *testRun, workerFactory work.WorkerFactory) { - partialPreWork(t, 1, 10, 0, run, workerFactory) + partialPreWork(t, 1, 0, run, workerFactory) }, expectedResponseCount: 29, expectFiles: []string{ @@ -300,7 +318,9 @@ func TestOneStoreOneMap(t *testing.T) { for _, test := range tests { t.Run(test.name, func(t *testing.T) { - run := newTestRun(t, test.startBlock, test.linearBlock, test.stopBlock, "assert_test_store_add_i64", "./testdata/simple_substreams/substreams-test-v0.1.0.spkg") + bstream.GetProtocolFirstStreamableBlock = test.firstStreamableBlock // set for tier1 request to grab + run := newTestRun(t, test.startBlock, test.linearBlock, test.stopBlock, test.firstStreamableBlock, "assert_test_store_add_i64", "./testdata/simple_substreams/substreams-test-v0.1.0.spkg") + run.ProductionMode = test.production run.ParallelSubrequests = 1 run.PreWork = test.preWork @@ -326,7 +346,7 @@ func TestOneStoreOneMap(t *testing.T) { } func TestStoreDeletePrefix(t *testing.T) { - run := newTestRun(t, 30, 40, 42, "assert_test_store_delete_prefix", "./testdata/simple_substreams/substreams-test-v0.1.0.spkg") + run := newTestRun(t, 30, 40, 42, 0, "assert_test_store_delete_prefix", "./testdata/simple_substreams/substreams-test-v0.1.0.spkg") run.BlockProcessedCallback = func(ctx *execContext) { if ctx.block.Number == 40 { s, storeFound := ctx.stores.Get("test_store_delete_prefix") @@ -340,7 +360,7 @@ func TestStoreDeletePrefix(t *testing.T) { func TestAllAssertions(t *testing.T) { // Relies on `assert_all_test` having modInit == 1, so - run := newTestRun(t, 1, 31, 31, "assert_all_test", "./testdata/simple_substreams/substreams-test-v0.1.0.spkg") + run := newTestRun(t, 1, 31, 31, 0, "assert_all_test", "./testdata/simple_substreams/substreams-test-v0.1.0.spkg") require.NoError(t, run.Run(t, "assert_all_test")) @@ -350,7 +370,7 @@ func TestAllAssertions(t *testing.T) { } func Test_SimpleMapModule(t *testing.T) { - run := newTestRun(t, 10000, 10001, 10001, "test_map", "./testdata/simple_substreams/substreams-test-v0.1.0.spkg") + run := newTestRun(t, 10000, 10001, 10001, 0, "test_map", "./testdata/simple_substreams/substreams-test-v0.1.0.spkg") run.Params = map[string]string{"test_map": "my test params"} run.NewBlockGenerator = func(startBlock uint64, inclusiveStopBlock uint64) TestBlockGenerator { return &LinearBlockGenerator{ @@ -365,7 +385,7 @@ func Test_SimpleMapModule(t *testing.T) { } func Test_WASMBindgenShims(t *testing.T) { - run := newTestRun(t, 12, 14, 14, "map_block", "./testdata/wasmbindgen_substreams/wasmbindgen-substreams-v0.1.0.spkg") + run := newTestRun(t, 12, 14, 14, 0, "map_block", "./testdata/wasmbindgen_substreams/wasmbindgen-substreams-v0.1.0.spkg") run.NewBlockGenerator = func(startBlock uint64, inclusiveStopBlock uint64) TestBlockGenerator { return &LinearBlockGenerator{ startBlock: startBlock, @@ -382,7 +402,7 @@ func Test_WASMBindgenShims(t *testing.T) { } func Test_Early(t *testing.T) { - run := newTestRun(t, 12, 14, 14, "test_map", "./testdata/simple_substreams/substreams-test-v0.1.0.spkg") + run := newTestRun(t, 12, 14, 14, 0, "test_map", "./testdata/simple_substreams/substreams-test-v0.1.0.spkg") run.Params = map[string]string{"test_map": "my test params"} run.ProductionMode = true run.NewBlockGenerator = func(startBlock uint64, inclusiveStopBlock uint64) TestBlockGenerator { @@ -397,7 +417,7 @@ func Test_Early(t *testing.T) { } func TestEarlyWithEmptyStore(t *testing.T) { - run := newTestRun(t, 2, 4, 4, "assert_test_store_delete_prefix", "./testdata/simple_substreams/substreams-test-v0.1.0.spkg") + run := newTestRun(t, 2, 4, 4, 0, "assert_test_store_delete_prefix", "./testdata/simple_substreams/substreams-test-v0.1.0.spkg") run.ProductionMode = true var foundBlock3 bool @@ -413,7 +433,7 @@ func TestEarlyWithEmptyStore(t *testing.T) { } func Test_SingleMapModule_FileWalker(t *testing.T) { - run := newTestRun(t, 200, 250, 300, "test_map", "./testdata/simple_substreams/substreams-test-v0.1.0.spkg") + run := newTestRun(t, 200, 250, 300, 0, "test_map", "./testdata/simple_substreams/substreams-test-v0.1.0.spkg") run.Params = map[string]string{"test_map": "my test params"} run.ProductionMode = true run.NewBlockGenerator = func(startBlock uint64, inclusiveStopBlock uint64) TestBlockGenerator { @@ -476,7 +496,7 @@ func assertFiles(t *testing.T, tempDir string, expectPartialSpkg bool, wantedFil assert.ElementsMatch(t, wantedFiles, actualFiles) } -func partialPreWork(t *testing.T, start, end uint64, stageIdx int, run *testRun, workerFactory work.WorkerFactory) { +func partialPreWork(t *testing.T, start uint64, stageIdx int, run *testRun, workerFactory work.WorkerFactory) { worker := workerFactory(zlog) // FIXME: use the new `Work` interface here, and validate that the @@ -484,7 +504,7 @@ func partialPreWork(t *testing.T, start, end uint64, stageIdx int, run *testRun, segmenter := block.NewSegmenter(10, 0, 0) unit := stage.Unit{Segment: segmenter.IndexForStartBlock(start), Stage: stageIdx} ctx := reqctx.WithRequest(run.Context, &reqctx.RequestDetails{Modules: run.Package.Modules, OutputModule: run.ModuleName}) - cmd := worker.Work(ctx, unit, block.NewRange(start, end), []string{run.ModuleName}, nil) + cmd := worker.Work(ctx, unit, start, []string{run.ModuleName}, nil) result := cmd() msg, ok := result.(work.MsgJobSucceeded) require.True(t, ok) diff --git a/test/runnable_test.go b/test/runnable_test.go index e54aa145d..c0c009728 100644 --- a/test/runnable_test.go +++ b/test/runnable_test.go @@ -46,6 +46,7 @@ type testRun struct { NewBlockGenerator BlockGeneratorFactory BlockProcessedCallback blockProcessedCallBack LinearHandoffBlockNum uint64 // defaults to the request's StopBlock, so no linear handoff, only backprocessing + FirstStreamableBlock uint64 ProductionMode bool // PreWork can be done to perform tier2 work in advance, to simulate when // pre-existing data is available in different conditions @@ -58,10 +59,10 @@ type testRun struct { TempDir string } -func newTestRun(t *testing.T, startBlock int64, linearHandoffBlock, exclusiveEndBlock uint64, moduleName string, manifestPath string) *testRun { +func newTestRun(t *testing.T, startBlock int64, linearHandoffBlock, exclusiveEndBlock, firstStreamableBlock uint64, moduleName string, manifestPath string) *testRun { pkg := manifest.TestReadManifest(t, manifestPath) - return &testRun{Package: pkg, StartBlock: startBlock, ExclusiveEndBlock: exclusiveEndBlock, ModuleName: moduleName, LinearHandoffBlockNum: linearHandoffBlock} + return &testRun{Package: pkg, StartBlock: startBlock, ExclusiveEndBlock: exclusiveEndBlock, FirstStreamableBlock: firstStreamableBlock, ModuleName: moduleName, LinearHandoffBlockNum: linearHandoffBlock} } func (f *testRun) Run(t *testing.T, testName string) error { @@ -135,6 +136,7 @@ func (f *testRun) Run(t *testing.T, testName string) error { blockProcessedCallBack: f.BlockProcessedCallback, testTempDir: testTempDir, id: workerID.Inc(), + firstStreamableBlock: f.FirstStreamableBlock, } } @@ -317,7 +319,7 @@ type TestRunner struct { generator TestBlockGenerator } -func (r *TestRunner) StreamFactory(_ context.Context, h bstream.Handler, startBlockNum int64, stopBlockNum uint64, _ string, _ bool, _ bool, _ *zap.Logger) (service.Streamable, error) { +func (r *TestRunner) StreamFactory(ctx context.Context, h bstream.Handler, startBlockNum int64, stopBlockNum uint64, _ string, _ bool, _ bool, _ *zap.Logger) (service.Streamable, error) { var liveBackFiller *service.LiveBackFiller if liveBackFillerHandler, ok := h.(*service.LiveBackFiller); ok { @@ -327,8 +329,17 @@ func (r *TestRunner) StreamFactory(_ context.Context, h bstream.Handler, startBl r.pipe = pipelineHandler } + firstStreamableBlock := bstream.GetProtocolFirstStreamableBlock + if tier2ReqParams, ok := reqctx.GetTier2RequestParameters(ctx); ok { + firstStreamableBlock = tier2ReqParams.FirstStreamableBlock + } + r.Shutter = shutter.New() - r.generator = r.blockGeneratorFactory(uint64(startBlockNum), stopBlockNum) + factoryFirstBlock := uint64(startBlockNum) + if factoryFirstBlock < firstStreamableBlock { + factoryFirstBlock = firstStreamableBlock + } + r.generator = r.blockGeneratorFactory(factoryFirstBlock, stopBlockNum) return r, nil } diff --git a/test/testdata/simple_substreams_init0/substreams-test-init0-v0.1.0.spkg b/test/testdata/simple_substreams_init0/substreams-test-init0-v0.1.0.spkg new file mode 100644 index 0000000000000000000000000000000000000000..484d7e60599d808ad8488cb679dd0cdced438b32 GIT binary patch literal 351668 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

xF-Aei_sB>$ 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

AF- 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

XZ7&YJAllshMe_^{bDTK5~sY3Vn{1Ddc=lqFU+ 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

k+&z=k-WlkK(m&gNtO) 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