exec22

package
v0.0.0-...-92d349b Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Dec 15, 2023 License: GPL-3.0 Imports: 9 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func LenLocked

func LenLocked(h *TxTaskQueue, lock *sync.Mutex) (l int)

Types

type KvList

type KvList struct {
	Keys []string
	Vals [][]byte
}

KvList sort.Interface to sort write list by keys

func (KvList) Len

func (l KvList) Len() int

func (KvList) Less

func (l KvList) Less(i, j int) bool

func (*KvList) Swap

func (l *KvList) Swap(i, j int)

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) Close

func (q *QueueWithRetry) Close()

Close safe to call multiple times

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)

type ResultsQueue

type ResultsQueue struct {
	sync.Mutex
	// contains filtered or unexported fields
}

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) Drain

func (q *ResultsQueue) Drain(ctx context.Context) error

func (*ResultsQueue) DrainLocked

func (q *ResultsQueue) DrainLocked()

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) IterLocked

func (q *ResultsQueue) IterLocked() *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]*KvList
	WriteLists         map[string]*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)

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL