@@ -44,7 +44,7 @@ class BlockFetcher(
44
44
import BlockFetcher ._
45
45
46
46
implicit val ec : ExecutionContext = context.dispatcher
47
- implicit val timeout : Timeout = syncConfig.peerResponseTimeout + 1 .second // some margin for actor communication
47
+ implicit val timeout : Timeout = syncConfig.peerResponseTimeout + 2 .second // some margin for actor communication
48
48
49
49
override def receive : Receive = idle()
50
50
@@ -130,7 +130,7 @@ class BlockFetcher(
130
130
131
131
fetchBlocks(newState)
132
132
case RetryHeadersRequest if state.isFetchingHeaders =>
133
- log.debug(" Time-out occurred while waiting for headers" )
133
+ log.debug(" Something failed on a headers request, cancelling the request and re-fetching " )
134
134
135
135
val newState = state.withHeaderFetchReceived
136
136
fetchBlocks(newState)
@@ -149,7 +149,7 @@ class BlockFetcher(
149
149
150
150
fetchBlocks(newState)
151
151
case RetryBodiesRequest if state.isFetchingBodies =>
152
- log.debug(" Time-out occurred while waiting for bodies" )
152
+ log.debug(" Something failed on a bodies request, cancelling the request and re-fetching " )
153
153
154
154
val newState = state.withBodiesFetchReceived
155
155
fetchBlocks(newState)
@@ -315,19 +315,23 @@ class BlockFetcher(
315
315
private def makeRequest (request : Request [_], responseFallback : FetchMsg ): Future [Any ] =
316
316
(peersClient ? request)
317
317
.tap(blacklistPeerOnFailedRequest)
318
- .flatMap(failureTo(responseFallback))
318
+ .flatMap(handleRequestResult(responseFallback))
319
+ .recover { case error =>
320
+ log.error(error, " Unexpected error while doing a request" )
321
+ responseFallback
322
+ }
319
323
320
324
private def blacklistPeerOnFailedRequest (msg : Any ): Unit = msg match {
321
325
case RequestFailed (peer, reason) => peersClient ! BlacklistPeer (peer.id, reason)
322
326
case _ => ()
323
327
}
324
328
325
- private def failureTo (fallback : FetchMsg )(msg : Any ): Future [Any ] = msg match {
329
+ private def handleRequestResult (fallback : FetchMsg )(msg : Any ): Future [Any ] = msg match {
326
330
case failed : RequestFailed =>
327
- log.debug(" Failed request {}" , failed)
331
+ log.debug(" Request failed due to {}" , failed)
328
332
Future .successful(fallback)
329
333
case Failure (cause) =>
330
- log.debug( " Failed request due to {} " , cause )
334
+ log.error(cause, " Unexpected error on the request result " )
331
335
Future .successful(fallback)
332
336
case NoSuitablePeer =>
333
337
Future .successful(fallback).delayedBy(syncConfig.syncRetryInterval)
0 commit comments