@@ -54,6 +54,7 @@ import (
54
54
statestreambackend "github.com/onflow/flow-go/engine/access/state_stream/backend"
55
55
"github.com/onflow/flow-go/engine/access/subscription"
56
56
"github.com/onflow/flow-go/engine/common/follower"
57
+ "github.com/onflow/flow-go/engine/common/stop"
57
58
synceng "github.com/onflow/flow-go/engine/common/synchronization"
58
59
"github.com/onflow/flow-go/engine/common/version"
59
60
"github.com/onflow/flow-go/engine/execution/computation/query"
@@ -164,6 +165,7 @@ type ObserverServiceConfig struct {
164
165
executionDataPruningInterval time.Duration
165
166
localServiceAPIEnabled bool
166
167
versionControlEnabled bool
168
+ stopControlEnabled bool
167
169
executionDataDir string
168
170
executionDataStartHeight uint64
169
171
executionDataConfig edrequester.ExecutionDataConfig
@@ -239,6 +241,7 @@ func DefaultObserverServiceConfig() *ObserverServiceConfig {
239
241
executionDataPruningInterval : pruner .DefaultPruningInterval ,
240
242
localServiceAPIEnabled : false ,
241
243
versionControlEnabled : true ,
244
+ stopControlEnabled : false ,
242
245
executionDataDir : filepath .Join (homedir , ".flow" , "execution_data" ),
243
246
executionDataStartHeight : 0 ,
244
247
executionDataConfig : edrequester.ExecutionDataConfig {
@@ -280,6 +283,7 @@ type ObserverServiceBuilder struct {
280
283
TxResultsIndex * index.TransactionResultsIndex
281
284
IndexerDependencies * cmd.DependencyList
282
285
VersionControl * version.VersionControl
286
+ StopControl * stop.StopControl
283
287
284
288
ExecutionDataDownloader execution_data.Downloader
285
289
ExecutionDataRequester state_synchronization.ExecutionDataRequester
@@ -681,6 +685,10 @@ func (builder *ObserverServiceBuilder) extraFlags() {
681
685
"version-control-enabled" ,
682
686
defaultConfig .versionControlEnabled ,
683
687
"whether to enable the version control feature. Default value is true" )
688
+ flags .BoolVar (& builder .stopControlEnabled ,
689
+ "stop-control-enabled" ,
690
+ defaultConfig .stopControlEnabled ,
691
+ "whether to enable the stop control feature. Default value is false" )
684
692
flags .BoolVar (& builder .localServiceAPIEnabled , "local-service-api-enabled" , defaultConfig .localServiceAPIEnabled , "whether to use local indexed data for api queries" )
685
693
flags .StringVar (& builder .registersDBPath , "execution-state-dir" , defaultConfig .registersDBPath , "directory to use for execution-state database" )
686
694
flags .StringVar (& builder .checkpointFile , "execution-state-checkpoint" , defaultConfig .checkpointFile , "execution-state checkpoint file" )
@@ -1523,6 +1531,10 @@ func (builder *ObserverServiceBuilder) BuildExecutionSyncComponents() *ObserverS
1523
1531
return nil , err
1524
1532
}
1525
1533
1534
+ if builder .stopControlEnabled {
1535
+ builder .StopControl .RegisterHeightRecorder (builder .ExecutionIndexer )
1536
+ }
1537
+
1526
1538
return builder .ExecutionIndexer , nil
1527
1539
}, builder .IndexerDependencies )
1528
1540
}
@@ -1826,6 +1838,8 @@ func (builder *ObserverServiceBuilder) enqueueRPCServer() {
1826
1838
1827
1839
versionControlDependable := module .NewProxiedReadyDoneAware ()
1828
1840
builder .IndexerDependencies .Add (versionControlDependable )
1841
+ stopControlDependable := module .NewProxiedReadyDoneAware ()
1842
+ builder .IndexerDependencies .Add (stopControlDependable )
1829
1843
1830
1844
builder .Component ("version control" , func (node * cmd.NodeConfig ) (module.ReadyDoneAware , error ) {
1831
1845
if ! builder .versionControlEnabled {
@@ -1859,6 +1873,25 @@ func (builder *ObserverServiceBuilder) enqueueRPCServer() {
1859
1873
1860
1874
return versionControl , nil
1861
1875
})
1876
+ builder .Component ("stop control" , func (node * cmd.NodeConfig ) (module.ReadyDoneAware , error ) {
1877
+ if ! builder .stopControlEnabled {
1878
+ noop := & module.NoopReadyDoneAware {}
1879
+ stopControlDependable .Init (noop )
1880
+ return noop , nil
1881
+ }
1882
+
1883
+ stopControl := stop .NewStopControl (
1884
+ builder .Logger ,
1885
+ )
1886
+
1887
+ builder .VersionControl .AddVersionUpdatesConsumer (stopControl .OnVersionUpdate )
1888
+
1889
+ builder .StopControl = stopControl
1890
+ stopControlDependable .Init (builder .StopControl )
1891
+
1892
+ return stopControl , nil
1893
+ })
1894
+
1862
1895
builder .Component ("RPC engine" , func (node * cmd.NodeConfig ) (module.ReadyDoneAware , error ) {
1863
1896
accessMetrics := builder .AccessMetrics
1864
1897
config := builder .rpcConf
0 commit comments