Documentation
¶
Index ¶
- type QueueWithRetry
- func (q *QueueWithRetry) Add(ctx context.Context, t *TxTask)
- func (q *QueueWithRetry) Capacity() int
- func (q *QueueWithRetry) Close()
- func (q *QueueWithRetry) Len() (l int)
- func (q *QueueWithRetry) NewTasksLen() int
- func (q *QueueWithRetry) Next(ctx context.Context) (*TxTask, bool)
- func (q *QueueWithRetry) ReTry(t *TxTask)
- func (q *QueueWithRetry) RetriesLen() (l int)
- func (q *QueueWithRetry) RetryTxNumsList() (out []uint64)
- type ResultsQueue
- func (q *ResultsQueue) Add(ctx context.Context, task *TxTask) error
- func (q *ResultsQueue) Close()
- func (q *ResultsQueue) Dbg() (t *TxTask)
- func (q *ResultsQueue) Drain(ctx context.Context) error
- func (q *ResultsQueue) DrainNonBlocking()
- func (q *ResultsQueue) DropResults(f func(t *TxTask))
- func (q *ResultsQueue) FirstTxNumLocked() uint64
- func (q *ResultsQueue) HasLocked() bool
- func (q *ResultsQueue) Iter() *ResultsQueueIter
- func (q *ResultsQueue) Len() (l int)
- func (q *ResultsQueue) LenLocked() (l int)
- func (q *ResultsQueue) Limit() int
- func (q *ResultsQueue) PopLocked() (t *TxTask)
- func (q *ResultsQueue) Push(t *TxTask)
- func (q *ResultsQueue) PushLocked(t *TxTask)
- func (q *ResultsQueue) ResultChCap() int
- func (q *ResultsQueue) ResultChLen() int
- type ResultsQueueIter
- type TxTask
- type TxTaskQueue
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type QueueWithRetry ¶
type QueueWithRetry struct {
// contains filtered or unexported fields
}
QueueWithRetry is trhead-safe priority-queue of tasks - which attempt to minimize conflict-rate (retry-rate). Tasks may conflict and return to queue for re-try/re-exec. Tasks added by method `ReTry` have higher priority than tasks added by `Add`. Method `Add` expecting already-ordered (by priority) tasks - doesn't do any additional sorting of new tasks.
func NewQueueWithRetry ¶
func NewQueueWithRetry(capacity int) *QueueWithRetry
func (*QueueWithRetry) Add ¶
func (q *QueueWithRetry) Add(ctx context.Context, t *TxTask)
Add "new task" (which was never executed yet). May block internal channel is full. Expecting already-ordered tasks.
func (*QueueWithRetry) Capacity ¶
func (q *QueueWithRetry) Capacity() int
func (*QueueWithRetry) Len ¶
func (q *QueueWithRetry) Len() (l int)
func (*QueueWithRetry) NewTasksLen ¶
func (q *QueueWithRetry) NewTasksLen() int
func (*QueueWithRetry) Next ¶
func (q *QueueWithRetry) Next(ctx context.Context) (*TxTask, bool)
Next - blocks until new task available
func (*QueueWithRetry) ReTry ¶
func (q *QueueWithRetry) ReTry(t *TxTask)
ReTry returns failed (conflicted) task. It's non-blocking method. All failed tasks have higher priority than new one. No limit on amount of txs added by this method.
func (*QueueWithRetry) RetriesLen ¶
func (q *QueueWithRetry) RetriesLen() (l int)
func (*QueueWithRetry) RetryTxNumsList ¶
func (q *QueueWithRetry) RetryTxNumsList() (out []uint64)
type ResultsQueue ¶
ResultsQueue thread-safe priority-queue of execution results
func NewResultsQueue ¶
func NewResultsQueue(newTasksLimit, queueLimit int) *ResultsQueue
func (*ResultsQueue) Add ¶
func (q *ResultsQueue) Add(ctx context.Context, task *TxTask) error
Add result of execution. May block when internal channel is full
func (*ResultsQueue) Close ¶
func (q *ResultsQueue) Close()
func (*ResultsQueue) Dbg ¶
func (q *ResultsQueue) Dbg() (t *TxTask)
func (*ResultsQueue) DrainNonBlocking ¶
func (q *ResultsQueue) DrainNonBlocking()
func (*ResultsQueue) DropResults ¶
func (q *ResultsQueue) DropResults(f func(t *TxTask))
func (*ResultsQueue) FirstTxNumLocked ¶
func (q *ResultsQueue) FirstTxNumLocked() uint64
func (*ResultsQueue) HasLocked ¶
func (q *ResultsQueue) HasLocked() bool
func (*ResultsQueue) Iter ¶
func (q *ResultsQueue) Iter() *ResultsQueueIter
func (*ResultsQueue) Len ¶
func (q *ResultsQueue) Len() (l int)
func (*ResultsQueue) LenLocked ¶
func (q *ResultsQueue) LenLocked() (l int)
func (*ResultsQueue) Limit ¶
func (q *ResultsQueue) Limit() int
func (*ResultsQueue) PopLocked ¶
func (q *ResultsQueue) PopLocked() (t *TxTask)
func (*ResultsQueue) Push ¶
func (q *ResultsQueue) Push(t *TxTask)
func (*ResultsQueue) PushLocked ¶
func (q *ResultsQueue) PushLocked(t *TxTask)
func (*ResultsQueue) ResultChCap ¶
func (q *ResultsQueue) ResultChCap() int
func (*ResultsQueue) ResultChLen ¶
func (q *ResultsQueue) ResultChLen() int
type ResultsQueueIter ¶
type ResultsQueueIter struct {
// contains filtered or unexported fields
}
func (*ResultsQueueIter) Close ¶
func (q *ResultsQueueIter) Close()
func (*ResultsQueueIter) HasNext ¶
func (q *ResultsQueueIter) HasNext(outputTxNum uint64) bool
func (*ResultsQueueIter) PopNext ¶
func (q *ResultsQueueIter) PopNext() *TxTask
type TxTask ¶
type TxTask struct { TxNum uint64 BlockNum uint64 Rules *chain.Rules Header *types.Header Txs types.Transactions Uncles []*types.Header Coinbase libcommon.Address Withdrawals types.Withdrawals BlockHash libcommon.Hash Sender *libcommon.Address SkipAnalysis bool TxIndex int // -1 for block initialisation Final bool Tx types.Transaction GetHashFn func(n uint64) libcommon.Hash TxAsMessage types.Message EvmBlockContext evmtypes.BlockContext BalanceIncreaseSet map[libcommon.Address]uint256.Int ReadLists map[string]*state.KvList WriteLists map[string]*state.KvList AccountPrevs map[string][]byte AccountDels map[string]*accounts.Account StoragePrevs map[string][]byte CodePrevs map[string]uint64 Error error Logs []*types.Log TraceFroms map[libcommon.Address]struct{} TraceTos map[libcommon.Address]struct{} UsedGas uint64 }
ReadWriteSet contains ReadSet, WriteSet and BalanceIncrease of a transaction, which is processed by a single thread that writes into the ReconState1 and flushes to the database
type TxTaskQueue ¶
type TxTaskQueue []*TxTask
TxTaskQueue non-thread-safe priority-queue
func (TxTaskQueue) Len ¶
func (h TxTaskQueue) Len() int
func (TxTaskQueue) Less ¶
func (h TxTaskQueue) Less(i, j int) bool
func (*TxTaskQueue) Pop ¶
func (h *TxTaskQueue) Pop() interface{}
func (*TxTaskQueue) Push ¶
func (h *TxTaskQueue) Push(a interface{})
func (TxTaskQueue) Swap ¶
func (h TxTaskQueue) Swap(i, j int)