Flare sync: Remove `debug` modules (#2665)
why: Not needed anymore but deletion kept in a separate PR to make it easy to refer back and find these modules.
This commit is contained in:
parent
0d2a72d2a9
commit
debb68b3a7
|
@ -1,2 +1 @@
|
|||
* Update/resolve code fragments which are tagged FIXME
|
||||
* Remove debug.nim file with a separate PR
|
||||
|
|
|
@ -1,133 +0,0 @@
|
|||
# Nimbus
|
||||
# Copyright (c) 2023-2024 Status Research & Development GmbH
|
||||
# Licensed and distributed under either of
|
||||
# * MIT license (license terms in the root directory or at
|
||||
# https://opensource.org/licenses/MIT).
|
||||
# * Apache v2 license (license terms in the root directory or at
|
||||
# https://www.apache.org/licenses/LICENSE-2.0).
|
||||
# at your option. This file may not be copied, modified, or distributed
|
||||
# except according to those terms.
|
||||
|
||||
{.push raises:[].}
|
||||
|
||||
import
|
||||
pkg/chronicles,
|
||||
pkg/eth/[common, p2p],
|
||||
pkg/stew/[interval_set, sorted_set],
|
||||
../../../../common,
|
||||
../../worker_desc,
|
||||
../blocks_unproc
|
||||
|
||||
type
|
||||
BlocksForImportQueueWalk = SortedSetWalkRef[BlockNumber,BlocksForImport]
|
||||
## Traversal descriptor (for `verifyStagedBlocksQueue()`)
|
||||
|
||||
# ------------------------------------------------------------------------------
|
||||
# Public debugging helpers
|
||||
# ------------------------------------------------------------------------------
|
||||
|
||||
proc rlpSize*(blk: ref BlocksForImport): int =
|
||||
rlp.encode(blk[]).len
|
||||
|
||||
|
||||
proc verifyStagedBlocksQueue*(ctx: FlareCtxRef; info: static[string]) =
|
||||
## Verify staged queue
|
||||
##
|
||||
# Walk queue items
|
||||
let walk = BlocksForImportQueueWalk.init(ctx.blk.staged)
|
||||
defer: walk.destroy()
|
||||
|
||||
var
|
||||
stTotal = 0u
|
||||
rc = walk.first()
|
||||
prv = BlockNumber(0)
|
||||
while rc.isOk:
|
||||
let
|
||||
key = rc.value.key
|
||||
nBlocks = rc.value.data.blocks.len.uint64
|
||||
maxPt = key + nBlocks - 1
|
||||
unproc = ctx.blocksUnprocCovered(key, maxPt)
|
||||
if 0 < unproc:
|
||||
raiseAssert info & ": unprocessed staged chain " &
|
||||
key.bnStr & " overlap=" & $unproc
|
||||
if key <= prv:
|
||||
raiseAssert info & ": overlapping staged chain " &
|
||||
key.bnStr & " prvKey=" & prv.bnStr & " overlap=" & $(prv - key + 1)
|
||||
stTotal += nBlocks
|
||||
prv = maxPt
|
||||
rc = walk.next()
|
||||
|
||||
let t = ctx.dbStateBlockNumber()
|
||||
|
||||
if 0 < stTotal:
|
||||
let first = ctx.blk.staged.ge(0).value.key
|
||||
|
||||
# Check `T < staged[] <= B`
|
||||
if first <= t:
|
||||
raiseAssert info & ": staged bottom mismatch " &
|
||||
" T=" & t.bnStr & " stBottom=" & first.bnStr
|
||||
if ctx.lhc.layout.base < prv:
|
||||
raiseAssert info & ": staged top mismatch " &
|
||||
" B=" & ctx.lhc.layout.base.bnStr & " stTop=" & prv.bnStr
|
||||
|
||||
if not ctx.blocksUnprocIsEmpty():
|
||||
let
|
||||
uBottom = ctx.blocksUnprocBottom()
|
||||
uTop = ctx.blocksUnprocTop()
|
||||
topReq = ctx.blk.topRequest
|
||||
|
||||
# Check `T < unprocessed{} <= B`
|
||||
if uBottom <= t:
|
||||
raiseAssert info & ": unproc bottom mismatch " &
|
||||
" T=" & t.bnStr & " uBottom=" & uBottom.bnStr
|
||||
if ctx.lhc.layout.base < uTop:
|
||||
raiseAssert info & ": unproc top mismatch " &
|
||||
" B=" & ctx.lhc.layout.base.bnStr & " uTop=" & uTop.bnStr
|
||||
|
||||
# Check `unprocessed{} <= topRequest <= B`
|
||||
if topReq < uTop:
|
||||
raiseAssert info & ": unproc top req mismatch " &
|
||||
" uTop=" & uTop.bnStr & " topRequest=" & topReq.bnStr
|
||||
if ctx.lhc.layout.base < topReq:
|
||||
raiseAssert info & ": unproc top req mismatch " &
|
||||
" B=" & ctx.lhc.layout.base.bnStr & " topReq=" & topReq.bnStr
|
||||
|
||||
# Check `staged[] + unprocessed{} == (T,B]`
|
||||
let
|
||||
uTotal = ctx.blocksUnprocTotal()
|
||||
uBorrowed = ctx.blocksUnprocBorrowed()
|
||||
all3 = stTotal + uTotal + uBorrowed
|
||||
unfilled = if t < ctx.layout.base: ctx.layout.base - t
|
||||
else: 0u
|
||||
|
||||
trace info & ": verify staged", stTotal, uTotal, uBorrowed, all3, unfilled
|
||||
if unfilled < all3:
|
||||
raiseAssert info & ": staged/unproc too large" & " staged=" & $stTotal &
|
||||
" unproc=" & $uTotal & " borrowed=" & $uBorrowed & " exp-sum=" & $unfilled
|
||||
|
||||
|
||||
proc verifyStagedBlocksItem*(blk: ref BlocksForImport; info: static[string]) =
|
||||
## Verify record
|
||||
##
|
||||
if blk.blocks.len == 0:
|
||||
trace info & ": verifying ok", nBlocks=0
|
||||
return
|
||||
|
||||
trace info & ": verifying", nBlocks=blk.blocks.len
|
||||
|
||||
if blk.blocks[0].header.txRoot != EMPTY_ROOT_HASH:
|
||||
doAssert 0 < blk.blocks[0].transactions.len
|
||||
else:
|
||||
doAssert blk.blocks[0].transactions.len == 0
|
||||
|
||||
for n in 1 ..< blk.blocks.len:
|
||||
doAssert blk.blocks[n-1].header.number + 1 == blk.blocks[n].header.number
|
||||
|
||||
if blk.blocks[n].header.txRoot != EMPTY_ROOT_HASH:
|
||||
doAssert 0 < blk.blocks[n].transactions.len
|
||||
else:
|
||||
doAssert blk.blocks[n].transactions.len == 0
|
||||
|
||||
# ------------------------------------------------------------------------------
|
||||
# End
|
||||
# ------------------------------------------------------------------------------
|
|
@ -1,99 +0,0 @@
|
|||
# Nimbus
|
||||
# Copyright (c) 2023-2024 Status Research & Development GmbH
|
||||
# Licensed and distributed under either of
|
||||
# * MIT license (license terms in the root directory or at
|
||||
# https://opensource.org/licenses/MIT).
|
||||
# * Apache v2 license (license terms in the root directory or at
|
||||
# https://www.apache.org/licenses/LICENSE-2.0).
|
||||
# at your option. This file may not be copied, modified, or distributed
|
||||
# except according to those terms.
|
||||
|
||||
{.push raises:[].}
|
||||
|
||||
import
|
||||
pkg/[chronicles, chronos],
|
||||
pkg/eth/[common, rlp],
|
||||
pkg/stew/[byteutils, interval_set, sorted_set],
|
||||
pkg/results,
|
||||
../../../../db/storage_types,
|
||||
../../worker_desc
|
||||
|
||||
logScope:
|
||||
topics = "flare db"
|
||||
|
||||
# ------------------------------------------------------------------------------
|
||||
# Private debugging & logging helpers
|
||||
# ------------------------------------------------------------------------------
|
||||
|
||||
formatIt(Hash256):
|
||||
it.data.toHex
|
||||
|
||||
# ------------------------------------------------------------------------------
|
||||
# Public debugging functions
|
||||
# ------------------------------------------------------------------------------
|
||||
|
||||
proc dbVerifyStashedHeaders*(
|
||||
ctx: FlareCtxRef;
|
||||
info: static[string];
|
||||
): Future[bool] {.async.} =
|
||||
## For debugging. Verify integrity of stashed headers on the database.
|
||||
|
||||
# Last executed block on database
|
||||
let
|
||||
db = ctx.db
|
||||
kvt = ctx.db.ctx.getKvt()
|
||||
elNum = db.getSavedStateBlockNumber()
|
||||
lyLeast = ctx.layout.least
|
||||
lyFinal = ctx.layout.final
|
||||
lyFinalHash = ctx.layout.finalHash
|
||||
|
||||
if lyLeast == 0:
|
||||
return true
|
||||
|
||||
if lyLeast <= elNum and 0 < elNum:
|
||||
debug info & ": base header B unsynced", elNum=elNum.bnStr, B=lyLeast.bnStr
|
||||
return false
|
||||
|
||||
let iv = BnRange.new(lyLeast,lyFinal)
|
||||
trace info & ": verifying stashed headers", iv, len=(lyFinal-lyLeast+1)
|
||||
|
||||
var lastHash = ctx.layout.leastParent
|
||||
for num in lyLeast .. lyFinal:
|
||||
let data = kvt.get(flareHeaderKey(num).toOpenArray).valueOr:
|
||||
debug info & ": unstashed header", num=num.bnStr
|
||||
return false
|
||||
|
||||
var header: BlockHeader
|
||||
try: header = rlp.decode(data, BlockHeader)
|
||||
except RlpError:
|
||||
debug info & ": cannot decode rlp header", num=num.bnStr
|
||||
return false
|
||||
|
||||
if header.number != num:
|
||||
debug info & ": wrongly addressed header",
|
||||
num=header.number.bnStr, expected=num.bnStr
|
||||
return false
|
||||
|
||||
if header.parentHash != lastHash:
|
||||
debug info & ": hash mismatch", lastNum=(num-1).bnStr, lastHash,
|
||||
parentHash=header.parentHash
|
||||
return false
|
||||
|
||||
lastHash = data.keccakHash
|
||||
|
||||
# Allow thread change
|
||||
if (num mod 100_000) == 98_765:
|
||||
# trace info & ": thread change offer", num=num.bnStr
|
||||
await sleepAsync asyncThreadSwitchTimeSlot
|
||||
|
||||
if lyFinalHash != lastHash:
|
||||
debug info & ": base header B hash mismatch", num=lyFinal.bnStr,
|
||||
hash=lyFinalHash, expected=lastHash
|
||||
return false
|
||||
|
||||
trace info & ": done verifying", iv, len=(lyFinal-lyLeast+1)
|
||||
true
|
||||
|
||||
# ------------------------------------------------------------------------------
|
||||
# End
|
||||
# ------------------------------------------------------------------------------
|
|
@ -1,111 +0,0 @@
|
|||
# Nimbus
|
||||
# Copyright (c) 2023-2024 Status Research & Development GmbH
|
||||
# Licensed and distributed under either of
|
||||
# * MIT license (license terms in the root directory or at
|
||||
# https://opensource.org/licenses/MIT).
|
||||
# * Apache v2 license (license terms in the root directory or at
|
||||
# https://www.apache.org/licenses/LICENSE-2.0).
|
||||
# at your option. This file may not be copied, modified, or distributed
|
||||
# except according to those terms.
|
||||
|
||||
{.push raises:[].}
|
||||
|
||||
import
|
||||
pkg/chronicles,
|
||||
pkg/eth/[common, p2p],
|
||||
pkg/stew/[interval_set, sorted_set],
|
||||
../../../../common,
|
||||
../../worker_desc,
|
||||
../headers_unproc
|
||||
|
||||
type
|
||||
LinkedHChainQueueWalk = SortedSetWalkRef[BlockNumber,LinkedHChain]
|
||||
## Traversal descriptor (for `verifyStagedHeadersQueue()`)
|
||||
|
||||
# ------------------------------------------------------------------------------
|
||||
# Public debugging helpers
|
||||
# ------------------------------------------------------------------------------
|
||||
|
||||
proc verifyStagedHeadersQueue*(ctx: FlareCtxRef; info: static[string]) =
|
||||
## Verify staged queue
|
||||
##
|
||||
# Walk queue items
|
||||
let walk = LinkedHChainQueueWalk.init(ctx.lhc.staged)
|
||||
defer: walk.destroy()
|
||||
|
||||
var
|
||||
stTotal = 0u
|
||||
rc = walk.first()
|
||||
prv = BlockNumber(0)
|
||||
while rc.isOk:
|
||||
let
|
||||
key = rc.value.key
|
||||
nHeaders = rc.value.data.revHdrs.len.uint64
|
||||
minPt = key - nHeaders + 1
|
||||
unproc = ctx.headersUnprocCovered(minPt, key)
|
||||
if 0 < unproc:
|
||||
raiseAssert info & ": unprocessed staged chain " &
|
||||
key.bnStr & " overlap=" & $unproc
|
||||
if minPt <= prv:
|
||||
raiseAssert info & ": overlapping staged chain " &
|
||||
key.bnStr & " prvKey=" & prv.bnStr & " overlap=" & $(prv - minPt + 1)
|
||||
stTotal += nHeaders
|
||||
prv = key
|
||||
rc = walk.next()
|
||||
|
||||
# Check `staged[] <= L`
|
||||
if ctx.layout.least <= prv:
|
||||
raiseAssert info & ": staged top mismatch " &
|
||||
" L=" & ctx.layout.least.bnStr & " stagedTop=" & prv.bnStr
|
||||
|
||||
# Check `unprocessed{} <= L`
|
||||
let uTop = ctx.headersUnprocTop()
|
||||
if ctx.layout.least <= uTop:
|
||||
raiseAssert info & ": unproc top mismatch " &
|
||||
" L=" & ctx.layout.least.bnStr & " unprocTop=" & uTop.bnStr
|
||||
|
||||
# Check `staged[] + unprocessed{} == (B,L)`
|
||||
let
|
||||
uTotal = ctx.headersUnprocTotal()
|
||||
uBorrowed = ctx.headersUnprocBorrowed()
|
||||
all3 = stTotal + uTotal + uBorrowed
|
||||
unfilled = if ctx.layout.least <= ctx.layout.base + 1: 0u
|
||||
else: ctx.layout.least - ctx.layout.base - 1
|
||||
|
||||
trace info & ": verify staged", stTotal, uTotal, uBorrowed, all3, unfilled
|
||||
if all3 != unfilled:
|
||||
raiseAssert info & ": staged/unproc mismatch " & " staged=" & $stTotal &
|
||||
" unproc=" & $uTotal & " borrowed=" & $uBorrowed &
|
||||
" exp-sum=" & $unfilled
|
||||
|
||||
|
||||
proc verifyHeaderChainItem*(lhc: ref LinkedHChain; info: static[string]) =
|
||||
## Verify a header chain.
|
||||
if lhc.revHdrs.len == 0:
|
||||
trace info & ": verifying ok", nLhc=0
|
||||
return
|
||||
|
||||
trace info & ": verifying", nLhc=lhc.revHdrs.len
|
||||
var
|
||||
topHdr, childHdr: BlockHeader
|
||||
try:
|
||||
doAssert lhc.revHdrs[0].keccakHash == lhc.hash
|
||||
topHdr = rlp.decode(lhc.revHdrs[0], BlockHeader)
|
||||
|
||||
childHdr = topHdr
|
||||
for n in 1 ..< lhc.revHdrs.len:
|
||||
let header = rlp.decode(lhc.revHdrs[n], BlockHeader)
|
||||
doAssert childHdr.number == header.number + 1
|
||||
doAssert lhc.revHdrs[n].keccakHash == childHdr.parentHash
|
||||
childHdr = header
|
||||
|
||||
doAssert childHdr.parentHash == lhc.parentHash
|
||||
except RlpError as e:
|
||||
raiseAssert "verifyHeaderChainItem oops(" & $e.name & ") msg=" & e.msg
|
||||
|
||||
trace info & ": verify ok",
|
||||
iv=BnRange.new(childHdr.number,topHdr.number), nLhc=lhc.revHdrs.len
|
||||
|
||||
# ------------------------------------------------------------------------------
|
||||
# End
|
||||
# ------------------------------------------------------------------------------
|
Loading…
Reference in New Issue