-
Notifications
You must be signed in to change notification settings - Fork 70
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Exhausted speculative trx not retried #1247
Comments
@kevin, in the last sentence of the description above, you wrote Also, in the 4.0 release notes I see:
So should we still retry exhausted transactions in speculative move? When? Why would it be more likely to succeed when we retry it? |
The retry talked about in the release notes is the The retry talked about in this issue is the retry that happens for trxs when they do not fit into a block. When near a block boundary (CPU or NET), if the transaction exceeds the block limit it is retried in the next block. It will be more likely to succeed because it is likely to not hit the block boundary again. Fun fact: if you run with a max-transaction-time set to larger than block time (500ms) and the transaction runs longer than block time (500ms), it will be retried over and over until it expires. |
Thanks a lot Kevin, this helps a lot! What about the first question: in the last sentence of the description above, you wrote should return false for both cases. which one is wrong? |
If |
[3.2] Report transaction failed if trx was exhausted in non-producing mode
[3.2 -> 4.0] Report transaction failed if trx was exhausted in non-producing mode (GH 1247)
[4.0 -> main] Report transaction failed if trx was exhausted in non-producing mode (GH 1247)
When running in non-default
--read-mode speculative
, an exhausted trx is not retried until a block is received. A test failure where no new blocks arrived illustrated this: https://github.com/AntelopeIO/leap/actions/runs/5202501518This condition should not be hit for
read-mode=head
as an exhausted trx is an exhausted block as the billed cpu/net are reset at the end of each trx.Currently we have:
Where
process_incoming_transaction_async
returns false for an exhausted block. Insteadprocess_incoming_transaction_async
should checkself->_pending_block_mode == pending_block_mode::producing
and return false if exhausted block and producing but return false if not producing and either trx is exhausted or block is exhausted.The text was updated successfully, but these errors were encountered: