mirror of
https://github.com/kaspanet/kaspad.git
synced 2025-06-07 14:46:44 +00:00
Use chunks for GetBlocksAcceptanceData
calls in order to avoid blocking consensus for too long (#2075)
This commit is contained in:
parent
d50ad0667c
commit
b200b77541
@ -40,26 +40,39 @@ func (ctx *Context) getAndConvertAcceptedTransactionIDs(selectedParentChainChang
|
|||||||
|
|
||||||
acceptedTransactionIDs := make([]*appmessage.AcceptedTransactionIDs, len(selectedParentChainChanges.Added))
|
acceptedTransactionIDs := make([]*appmessage.AcceptedTransactionIDs, len(selectedParentChainChanges.Added))
|
||||||
|
|
||||||
chainBlocksAcceptanceData, err := ctx.Domain.Consensus().GetBlocksAcceptanceData(selectedParentChainChanges.Added)
|
const chunk = 1000
|
||||||
if err != nil {
|
position := 0
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
for i, addedChainBlock := range selectedParentChainChanges.Added {
|
for position < len(selectedParentChainChanges.Added) {
|
||||||
chainBlockAcceptanceData := chainBlocksAcceptanceData[i]
|
var chainBlocksChunk []*externalapi.DomainHash
|
||||||
acceptedTransactionIDs[i] = &appmessage.AcceptedTransactionIDs{
|
if position+chunk > len(selectedParentChainChanges.Added) {
|
||||||
AcceptingBlockHash: addedChainBlock.String(),
|
chainBlocksChunk = selectedParentChainChanges.Added[position:]
|
||||||
AcceptedTransactionIDs: nil,
|
} else {
|
||||||
|
chainBlocksChunk = selectedParentChainChanges.Added[position : position+chunk]
|
||||||
}
|
}
|
||||||
for _, blockAcceptanceData := range chainBlockAcceptanceData {
|
// We use chunks in order to avoid blocking consensus for too long
|
||||||
for _, transactionAcceptanceData := range blockAcceptanceData.TransactionAcceptanceData {
|
chainBlocksAcceptanceData, err := ctx.Domain.Consensus().GetBlocksAcceptanceData(chainBlocksChunk)
|
||||||
if transactionAcceptanceData.IsAccepted {
|
if err != nil {
|
||||||
acceptedTransactionIDs[i].AcceptedTransactionIDs =
|
return nil, err
|
||||||
append(acceptedTransactionIDs[i].AcceptedTransactionIDs,
|
}
|
||||||
consensushashing.TransactionID(transactionAcceptanceData.Transaction).String())
|
|
||||||
|
for i, addedChainBlock := range chainBlocksChunk {
|
||||||
|
chainBlockAcceptanceData := chainBlocksAcceptanceData[i]
|
||||||
|
acceptedTransactionIDs[position+i] = &appmessage.AcceptedTransactionIDs{
|
||||||
|
AcceptingBlockHash: addedChainBlock.String(),
|
||||||
|
AcceptedTransactionIDs: nil,
|
||||||
|
}
|
||||||
|
for _, blockAcceptanceData := range chainBlockAcceptanceData {
|
||||||
|
for _, transactionAcceptanceData := range blockAcceptanceData.TransactionAcceptanceData {
|
||||||
|
if transactionAcceptanceData.IsAccepted {
|
||||||
|
acceptedTransactionIDs[position+i].AcceptedTransactionIDs =
|
||||||
|
append(acceptedTransactionIDs[position+i].AcceptedTransactionIDs,
|
||||||
|
consensushashing.TransactionID(transactionAcceptanceData.Transaction).String())
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
position += chunk
|
||||||
}
|
}
|
||||||
|
|
||||||
return acceptedTransactionIDs, nil
|
return acceptedTransactionIDs, nil
|
||||||
|
Loading…
x
Reference in New Issue
Block a user