You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
In turn this causes double-counting in the accounting for how many bytes have been sent by the provider. Consequently the provider expects payment for data that has not been sent, and the receiver does not send payment. This causes the retrieval to get stuck.
Solution
We should only call revalidator.OnPullDataSent() the first time a particular block is queued - ie don't call it if the block is re-queued due to a restart.
Background
When a data transfer is restarted, graphsync emits queue events for all blocks in the file a second time.
This results in OnDataQueued calling revalidator.OnPullDataSent(channel ID, size) with repeat values.
In turn this causes double-counting in the accounting for how many bytes have been sent by the provider. Consequently the provider expects payment for data that has not been sent, and the receiver does not send payment. This causes the retrieval to get stuck.
Solution
We should only call
revalidator.OnPullDataSent()
the first time a particular block is queued - ie don't call it if the block is re-queued due to a restart.A bug that may be caused by this issue: filecoin-project/lotus#5901
The text was updated successfully, but these errors were encountered: