@@ -14,7 +14,6 @@ import (
14
14
)
15
15
16
16
type EngineDriver struct {
17
- Ctx context.Context
18
17
Log log.Logger
19
18
// API bindings to execution engine
20
19
RPC DriverAPI
@@ -73,10 +72,10 @@ func (e *EngineDriver) UpdateHead(l1Head eth.BlockID, l2Head eth.BlockID) {
73
72
e .l2Head = l2Head
74
73
}
75
74
76
- func (e * EngineDriver ) RequestHeadUpdate () error {
75
+ func (e * EngineDriver ) RequestHeadUpdate (ctx context. Context ) error {
77
76
e .headLock .Lock ()
78
77
defer e .headLock .Unlock ()
79
- refL1 , refL2 , _ , err := e .SyncRef .RefByL2Num (e . Ctx , nil , & e .Genesis )
78
+ refL1 , refL2 , _ , err := e .SyncRef .RefByL2Num (ctx , nil , & e .Genesis )
80
79
if err != nil {
81
80
return err
82
81
}
@@ -85,7 +84,7 @@ func (e *EngineDriver) RequestHeadUpdate() error {
85
84
return nil
86
85
}
87
86
88
- func (e * EngineDriver ) Drive (dl Downloader , l1Heads <- chan eth.HeadSignal ) ethereum.Subscription {
87
+ func (e * EngineDriver ) Drive (ctx context. Context , dl Downloader , l1Heads <- chan eth.HeadSignal ) ethereum.Subscription {
89
88
e .driveLock .Lock ()
90
89
defer e .driveLock .Unlock ()
91
90
if e .driveSub != nil {
@@ -130,14 +129,16 @@ func (e *EngineDriver) Drive(dl Downloader, l1Heads <-chan eth.HeadSignal) ether
130
129
131
130
for {
132
131
select {
133
- case <- e . Ctx .Done ():
134
- return e . Ctx .Err ()
132
+ case <- ctx .Done ():
133
+ return ctx .Err ()
135
134
case <- quit :
136
135
return nil
137
136
case <- l2HeadPollTicker .C :
138
- if err := e .RequestHeadUpdate (); err != nil {
137
+ ctx , cancel := context .WithTimeout (ctx , time .Second * 4 )
138
+ if err := e .RequestHeadUpdate (ctx ); err != nil {
139
139
e .Log .Error ("failed to fetch L2 head info" , "err" , err )
140
140
}
141
+ cancel ()
141
142
continue
142
143
case l1HeadSig := <- l1Heads :
143
144
if e .l1Head == l1HeadSig .Self {
@@ -146,7 +147,7 @@ func (e *EngineDriver) Drive(dl Downloader, l1Heads <-chan eth.HeadSignal) ether
146
147
}
147
148
if e .l1Head == l1HeadSig .Parent {
148
149
// Simple extend, a linear life is easy
149
- if l2ID , err := DriverStep (e . Ctx , e .Log , e .RPC , dl , l1HeadSig .Self , e .l2Head , e .l2Finalized .Hash ); err != nil {
150
+ if l2ID , err := DriverStep (ctx , e .Log , e .RPC , dl , l1HeadSig .Self , e .l2Head , e .l2Finalized .Hash ); err != nil {
150
151
e .Log .Error ("Failed to extend L2 chain with new L1 block" , "l1" , l1HeadSig .Self , "l2" , e .l2Head , "err" , err )
151
152
// Retry sync later
152
153
e .l1Target = l1HeadSig .Self
@@ -176,7 +177,7 @@ func (e *EngineDriver) Drive(dl Downloader, l1Heads <-chan eth.HeadSignal) ether
176
177
continue
177
178
}
178
179
e .Log .Debug ("finding next sync step, engine syncing" , "l2" , e .l2Head , "l1" , e .l1Head )
179
- refL1 , refL2 , err := FindSyncStart (e . Ctx , e .SyncRef , & e .Genesis )
180
+ refL1 , refL2 , err := FindSyncStart (ctx , e .SyncRef , & e .Genesis )
180
181
if err != nil {
181
182
e .Log .Error ("Failed to find sync starting point" , "err" , err )
182
183
continue
@@ -185,7 +186,7 @@ func (e *EngineDriver) Drive(dl Downloader, l1Heads <-chan eth.HeadSignal) ether
185
186
e .Log .Debug ("Engine is already synced, aborting sync" , "l1_head" , e .l1Head , "l2_head" , e .l2Head )
186
187
continue
187
188
}
188
- if l2ID , err := DriverStep (e . Ctx , e .Log , e .RPC , dl , refL1 , refL2 , e .l2Finalized .Hash ); err != nil {
189
+ if l2ID , err := DriverStep (ctx , e .Log , e .RPC , dl , refL1 , refL2 , e .l2Finalized .Hash ); err != nil {
189
190
e .Log .Error ("Failed to sync L2 chain with new L1 block" , "l1" , refL1 , "onto_l2" , refL2 , "err" , err )
190
191
continue
191
192
} else {
0 commit comments