1212
1313import
1414 pkg/ [chronos, chronicles, eth/ common, stew/ interval_set],
15- ../../../ execution_chain/ sync/ beacon/ worker/ [blocks, headers, worker_desc]
15+ ../../../ execution_chain/ sync/ beacon/ worker/ [
16+ blocks, headers, helpers, worker_desc]
1617
1718logScope:
1819 topics = " beacon ticker"
4344 blkStagedBottom: BlockNumber
4445
4546 state: SyncState
47+ standByMode: bool
4648 nSyncPeers: int
4749 eta: chronos.Duration
4850
49- TickerRef * = ref object of RootRef
51+ TickerRef = ref object
5052 # # Ticker descriptor object
5153 started: Moment
5254 visited: Moment
5961const
6062 tickerLogInterval = chronos.seconds (2 )
6163 tickerLogSuppressMax = chronos.seconds (100 )
64+ tickerLogStandByMax = chronos.seconds (200 )
6265
6366proc updater (ctx: BeaconCtxRef ): TickerStats =
6467 # # Legacy stuff, will be probably be superseded by `metrics`
@@ -86,79 +89,90 @@ proc updater(ctx: BeaconCtxRef): TickerStats =
8689 nBlkUnprocFragm: ctx.blk.unprocessed.chunks,
8790
8891 state: ctx.pool.syncState,
92+ standByMode: ctx.pool.standByMode,
8993 nSyncPeers: ctx.nSyncPeers (),
9094 eta: ctx.pool.syncEta.avg)
9195
9296proc tickerLogger (t: TickerRef ; ctx: BeaconCtxRef ) =
9397 let
9498 data = ctx.updater ()
9599 now = Moment .now ()
100+ elapsed = now - t.visited
96101
97- if now <= t.visited + tickerLogInterval:
102+ if elapsed <= tickerLogInterval:
98103 return
99104
100- if data != t.lastStats or
101- tickerLogSuppressMax < (now - t.visited):
102- let
103- B = if data.base == data.latest: " L" else : $ data.base
104- L = if data.latest == data.coupler: " C" else : $ data.latest
105- I = if data.top == 0 : " n/a" else : $ data.top
106- C = if data.coupler == data.dangling: " D"
107- elif data.coupler < high (int64 ).uint64 : $ data.coupler
108- else : " n/a"
109- D = if data.dangling == data.head: " H" else : $ data.dangling
110- H = if data.head == data.target: " T"
111- elif data.activeOk: $ data.head
112- else : " ?" & $ data.head
113- T = if data.activeOk: $ data.target else : " ?" & $ data.target
114- F = if data.fin == 0 : " n/a"
115- elif data.fin == data.target and data.activeOk: " T"
116- elif data.fin == data.head: " H"
117- elif data.fin == data.dangling: " D"
118- elif data.fin == data.latest: " L"
119- elif data.fin == data.base: " B"
120- else : $ data.fin
121-
122- hS = if data.nHdrStaged == 0 : " n/a"
123- else : $ data.hdrStagedTop & " [" & $ data.nHdrStaged & " ]"
124- hU = if data.nHdrUnprocFragm == 0 and data.nHdrUnprocessed == 0 : " n/a"
125- elif data.hdrUnprocTop == 0 :
126- " (" & data.nHdrUnprocessed.toSI & " ," & $ data.nHdrUnprocFragm & " )"
127- else : $ data.hdrUnprocTop & " (" &
128- data.nHdrUnprocessed.toSI & " ," & $ data.nHdrUnprocFragm & " )"
129- hQ = if hS == " n/a" : hU
130- elif hU == " n/a" : hS
131- else : hS & " <-" & hU
132-
133- bS = if data.nBlkStaged == 0 : " n/a"
134- else : $ data.blkStagedBottom & " [" & $ data.nBlkStaged & " ]"
135- bU = if data.nBlkUnprocFragm == 0 and data.nBlkUnprocessed == 0 : " n/a"
136- elif data.blkUnprocBottom == high (BlockNumber ):
137- " (" & data.nBlkUnprocessed.toSI & " ," & $ data.nBlkUnprocFragm & " )"
138- else : $ data.blkUnprocBottom & " (" &
139- data.nBlkUnprocessed.toSI & " ," & $ data.nBlkUnprocFragm & " )"
140- bQ = if bS == " n/a" : bU
141- elif bU == " n/a" : bS
142- else : bS & " <-" & bU
143-
144- st = case data.state
145- of idle: " 0"
146- of headers: " h"
147- of headersCancel: " x"
148- of headersFinish: " f"
149- of blocks: " b"
150- of blocksCancel: " x"
151- of blocksFinish: " f"
152-
153- nP = data.nSyncPeers
154-
155- # With `int64`, there are more than 29*10^10 years range for seconds
156- up = (now - t.started).toStr
157- eta = data.eta.toStr
158-
159- t.lastStats = data
160- t.visited = now
105+ if data.standByMode:
106+ if elapsed <= tickerLogStandByMax:
107+ return
108+ elif data == t.lastStats and
109+ elapsed <= tickerLogSuppressMax:
110+ return
161111
112+ let
113+ B = if data.base == data.latest: " L" else : $ data.base
114+ L = if data.latest == data.coupler: " C" else : $ data.latest
115+ I = if data.top == 0 : " n/a" else : $ data.top
116+ C = if data.coupler == data.dangling: " D"
117+ elif data.coupler < high (int64 ).uint64 : $ data.coupler
118+ else : " n/a"
119+ D = if data.dangling == data.head: " H" else : $ data.dangling
120+ H = if data.head == data.target: " T"
121+ elif data.activeOk: $ data.head
122+ else : " ?" & $ data.head
123+ T = if data.activeOk: $ data.target else : " ?" & $ data.target
124+ F = if data.fin == 0 : " n/a"
125+ elif data.fin == data.target and data.activeOk: " T"
126+ elif data.fin == data.head: " H"
127+ elif data.fin == data.dangling: " D"
128+ elif data.fin == data.latest: " L"
129+ elif data.fin == data.base: " B"
130+ else : $ data.fin
131+
132+ hS = if data.nHdrStaged == 0 : " n/a"
133+ else : $ data.hdrStagedTop & " [" & $ data.nHdrStaged & " ]"
134+ hU = if data.nHdrUnprocFragm == 0 and data.nHdrUnprocessed == 0 : " n/a"
135+ elif data.hdrUnprocTop == 0 :
136+ " (" & data.nHdrUnprocessed.toSI & " ," & $ data.nHdrUnprocFragm & " )"
137+ else : $ data.hdrUnprocTop & " (" &
138+ data.nHdrUnprocessed.toSI & " ," & $ data.nHdrUnprocFragm & " )"
139+ hQ = if hS == " n/a" : hU
140+ elif hU == " n/a" : hS
141+ else : hS & " <-" & hU
142+
143+ bS = if data.nBlkStaged == 0 : " n/a"
144+ else : $ data.blkStagedBottom & " [" & $ data.nBlkStaged & " ]"
145+ bU = if data.nBlkUnprocFragm == 0 and data.nBlkUnprocessed == 0 : " n/a"
146+ elif data.blkUnprocBottom == high (BlockNumber ):
147+ " (" & data.nBlkUnprocessed.toSI & " ," & $ data.nBlkUnprocFragm & " )"
148+ else : $ data.blkUnprocBottom & " (" &
149+ data.nBlkUnprocessed.toSI & " ," & $ data.nBlkUnprocFragm & " )"
150+ bQ = if bS == " n/a" : bU
151+ elif bU == " n/a" : bS
152+ else : bS & " <-" & bU
153+
154+ st = case data.state
155+ of idle: " 0"
156+ of headers: " h"
157+ of headersCancel: " x"
158+ of headersFinish: " f"
159+ of blocks: " b"
160+ of blocksCancel: " x"
161+ of blocksFinish: " f"
162+
163+ nP = data.nSyncPeers
164+
165+ # With `int64`, there are more than 29*10^10 years range for seconds
166+ up = (now - t.started).toStr
167+ eta = data.eta.toStr
168+
169+ t.lastStats = data
170+ t.visited = now
171+
172+ if data.standByMode:
173+ debug " Sync stand-by mode" , up, eta, nP, B, L,
174+ D, H, T, F
175+ else :
162176 case data.state
163177 of idle:
164178 debug " Sync state idle" , up, eta, nP, B, L,
@@ -176,7 +190,7 @@ proc tickerLogger(t: TickerRef; ctx: BeaconCtxRef) =
176190# Public function
177191# ------------------------------------------------------------------------------
178192
179- proc syncTicker * (): BackgroundTicker =
193+ proc syncTicker * (): Ticker =
180194 let desc = TickerRef (started: Moment .now ())
181195 return proc (ctx: BeaconCtxRef ) =
182196 desc.tickerLogger (ctx)
0 commit comments