mirror of
https://github.com/ethereum/go-ethereum.git
synced 2026-07-26 06:36:43 +00:00
wip move indexer progress check
This commit is contained in:
parent
0cae00b09c
commit
0fab68d072
1 changed files with 24 additions and 26 deletions
|
|
@ -271,14 +271,11 @@ func (bc *BlockChain) GetAncestor(hash common.Hash, number, ancestor uint64, max
|
|||
// GetTransactionLookup retrieves the lookup along with the transaction
|
||||
// itself associate with the given transaction hash.
|
||||
//
|
||||
// An error will be returned if the transaction is not found, and background
|
||||
// indexing for transactions is still in progress. The transaction might be
|
||||
// reachable shortly once it's indexed.
|
||||
//
|
||||
// A null will be returned in the transaction is not found and background
|
||||
// transaction indexing is already finished. The transaction is not existent
|
||||
// from the node's perspective.
|
||||
func (bc *BlockChain) GetTransactionLookup(ctx context.Context, hash common.Hash) (*rawdb.LegacyTxLookupEntry, *types.Transaction, error) {
|
||||
// A null will be returned in the transaction is not found. The transaction is not existent
|
||||
// // from the node's perspective. This can be due to
|
||||
// the transaction indexer not being finished. The caller must explicitly check
|
||||
// the indexer progress.
|
||||
func (bc *BlockChain) GetTransactionLookup(hash common.Hash) (*rawdb.LegacyTxLookupEntry, *types.Transaction, error) {
|
||||
bc.txLookupLock.RLock()
|
||||
defer bc.txLookupLock.RUnlock()
|
||||
|
||||
|
|
@ -288,24 +285,6 @@ func (bc *BlockChain) GetTransactionLookup(ctx context.Context, hash common.Hash
|
|||
}
|
||||
tx, blockHash, blockNumber, txIndex := rawdb.ReadTransaction(bc.db, hash)
|
||||
if tx == nil {
|
||||
progress, err := bc.TxIndexProgress(ctx)
|
||||
if err != nil {
|
||||
// No error is returned if the transaction indexing progress is unreachable
|
||||
// due to unexpected internal errors. In such cases, it is impossible to
|
||||
// determine whether the transaction does not exist or has simply not been
|
||||
// indexed yet without a progress marker.
|
||||
//
|
||||
// In such scenarios, the transaction is treated as unreachable, though
|
||||
// this is clearly an unintended and unexpected situation.
|
||||
return nil, nil, nil
|
||||
}
|
||||
// The transaction indexing is not finished yet, returning an
|
||||
// error to explicitly indicate it.
|
||||
if !progress.Done() {
|
||||
return nil, nil, errors.New("transaction indexing still in progress")
|
||||
}
|
||||
// The transaction is already indexed, the transaction is either
|
||||
// not existent or not in the range of index, returning null.
|
||||
return nil, nil, nil
|
||||
}
|
||||
lookup := &rawdb.LegacyTxLookupEntry{
|
||||
|
|
@ -320,6 +299,25 @@ func (bc *BlockChain) GetTransactionLookup(ctx context.Context, hash common.Hash
|
|||
return lookup, tx, nil
|
||||
}
|
||||
|
||||
// TxIndexDone returns true if the transaction indexer has finished indexing.
|
||||
func (bc *BlockChain) TxIndexDone(ctx context.Context) (bool, error) {
|
||||
progress, err := bc.TxIndexProgress(ctx)
|
||||
if err != nil {
|
||||
// No error is returned if the transaction indexing progress is unreachable
|
||||
// due to unexpected internal errors. In such cases, it is impossible to
|
||||
// determine whether the transaction does not exist or has simply not been
|
||||
// indexed yet without a progress marker.
|
||||
//
|
||||
// In such scenarios, the transaction is treated as unreachable, though
|
||||
// this is clearly an unintended and unexpected situation.
|
||||
return true, nil
|
||||
}
|
||||
if !progress.Done() {
|
||||
return false, nil
|
||||
}
|
||||
return true, nil
|
||||
}
|
||||
|
||||
// HasState checks if state trie is fully present in the database or not.
|
||||
func (bc *BlockChain) HasState(hash common.Hash) bool {
|
||||
_, err := bc.statedb.OpenTrie(hash)
|
||||
|
|
|
|||
Loading…
Reference in a new issue