44 "errors"
55 "fmt"
66 "slices"
7+ "strings"
78 "sync/atomic"
89 "time"
910
@@ -354,12 +355,14 @@ events:
354355 zap .Uint ("view" , uint (v )))
355356 s .dbft .OnTimeout (h , v )
356357 case msg := <- s .messages :
358+ log := s .log .Debug
357359 fields := []zap.Field {
358360 zap .Uint8 ("from" , msg .message .ValidatorIndex ),
359361 zap .Stringer ("type" , msg .Type ()),
360362 }
361363
362- if msg .Type () == dbft .RecoveryMessageType {
364+ switch msg .Type () {
365+ case dbft .RecoveryMessageType :
363366 rec := msg .GetRecoveryMessage ().(* recoveryMessage )
364367 if rec .preparationHash == nil {
365368 req := rec .GetPrepareRequest (& msg , s .dbft .Validators , uint16 (s .dbft .PrimaryIndex ))
@@ -375,9 +378,24 @@ events:
375378 zap .Int ("#changeview" , len (rec .changeViewPayloads )),
376379 zap .Bool ("#request" , rec .prepareRequest != nil ),
377380 zap .Bool ("#hash" , rec .preparationHash != nil ))
381+ case dbft .ChangeViewType :
382+ cv := msg .GetChangeView ().(* changeView )
383+ if len (cv .rejectedHashes ) > 0 {
384+ const maxHashes = 10
385+ var rejected strings.Builder
386+ log = s .log .Warn
387+ for _ , h := range cv .rejectedHashes [:min (len (cv .rejectedHashes ), maxHashes )] { // don't pollute logs with too many hashes.
388+ fmt .Fprintf (& rejected , "%s " , h .StringLE ())
389+ }
390+ if len (cv .rejectedHashes ) > maxHashes {
391+ rejected .WriteString ("..." )
392+ }
393+ fields = append (fields , zap .String ("rejected" , rejected .String ()))
394+ }
395+ default :
378396 }
379397
380- s . log . Debug ("received message" , fields ... )
398+ log ("received message" , fields ... )
381399 s .dbft .OnReceive (& msg )
382400 case tx := <- s .transactions :
383401 s .dbft .OnTransaction (tx )
0 commit comments