Add --delay to kaspad

This commit is contained in:
Kaspa Profiler 2021-04-13 12:46:50 +03:00 committed by stasatdaglabs
parent 1f56a68a28
commit bbdf7b246d
3 changed files with 25 additions and 11 deletions

View File

@ -1,6 +1,8 @@
package blockrelay package blockrelay
import ( import (
"time"
"github.com/kaspanet/kaspad/app/appmessage" "github.com/kaspanet/kaspad/app/appmessage"
"github.com/kaspanet/kaspad/app/protocol/common" "github.com/kaspanet/kaspad/app/protocol/common"
peerpkg "github.com/kaspanet/kaspad/app/protocol/peer" peerpkg "github.com/kaspanet/kaspad/app/protocol/peer"
@ -11,6 +13,7 @@ import (
"github.com/kaspanet/kaspad/domain/consensus/utils/consensushashing" "github.com/kaspanet/kaspad/domain/consensus/utils/consensushashing"
"github.com/kaspanet/kaspad/infrastructure/config" "github.com/kaspanet/kaspad/infrastructure/config"
"github.com/kaspanet/kaspad/infrastructure/network/netadapter/router" "github.com/kaspanet/kaspad/infrastructure/network/netadapter/router"
"github.com/kaspanet/kaspad/util/mstime"
"github.com/pkg/errors" "github.com/pkg/errors"
) )
@ -109,6 +112,8 @@ func (flow *handleRelayInvsFlow) start() error {
if err != nil { if err != nil {
return err return err
} }
msTime := mstime.UnixMilliseconds(block.Header.TimeInMilliseconds())
time.Sleep(time.Until(msTime.ToNativeTime().Add(config.DelayDuration)))
log.Debugf("Processing block %s", inv.Hash) log.Debugf("Processing block %s", inv.Hash)
missingParents, blockInsertionResult, err := flow.processBlock(block) missingParents, blockInsertionResult, err := flow.processBlock(block)

View File

@ -27,6 +27,9 @@ import (
"github.com/pkg/errors" "github.com/pkg/errors"
) )
// DelayDuration a duration for the delay, global for testing
var DelayDuration time.Duration
const ( const (
defaultConfigFilename = "kaspad.conf" defaultConfigFilename = "kaspad.conf"
defaultDataDirname = "data" defaultDataDirname = "data"
@ -122,6 +125,7 @@ type Flags struct {
UTXOIndex bool `long:"utxoindex" description:"Enable the UTXO index"` UTXOIndex bool `long:"utxoindex" description:"Enable the UTXO index"`
IsArchivalNode bool `long:"archival" description:"Run as an archival node: don't delete old block data when moving the pruning point (Warning: heavy disk usage)'"` IsArchivalNode bool `long:"archival" description:"Run as an archival node: don't delete old block data when moving the pruning point (Warning: heavy disk usage)'"`
EnableSanityCheckPruningUTXOSet bool `long:"enable-sanity-check-pruning-utxo" hidden:"true" description:"When moving the pruning point - check that the utxo set matches the utxo commitment"` EnableSanityCheckPruningUTXOSet bool `long:"enable-sanity-check-pruning-utxo" hidden:"true" description:"When moving the pruning point - check that the utxo set matches the utxo commitment"`
Delay float32 `long:"delay" description:"Provide a delay in seconds as a floating point"`
NetworkFlags NetworkFlags
ServiceOptions *ServiceOptions ServiceOptions *ServiceOptions
} }
@ -577,6 +581,8 @@ func LoadConfig() (*Config, error) {
if configFileError != nil { if configFileError != nil {
log.Warnf("%s", configFileError) log.Warnf("%s", configFileError)
} }
DelayDuration = time.Duration(cfg.Delay * float32(time.Second))
return cfg, nil return cfg, nil
} }

View File

@ -3,6 +3,7 @@ package netadapter
import ( import (
"sync" "sync"
"sync/atomic" "sync/atomic"
"time"
"github.com/kaspanet/kaspad/app/appmessage" "github.com/kaspanet/kaspad/app/appmessage"
"github.com/kaspanet/kaspad/infrastructure/config" "github.com/kaspanet/kaspad/infrastructure/config"
@ -175,9 +176,10 @@ func (na *NetAdapter) ID() *id.ID {
// P2PBroadcast sends the given `message` to every peer corresponding // P2PBroadcast sends the given `message` to every peer corresponding
// to each NetConnection in the given netConnections // to each NetConnection in the given netConnections
func (na *NetAdapter) P2PBroadcast(netConnections []*NetConnection, message appmessage.Message) error { func (na *NetAdapter) P2PBroadcast(netConnections []*NetConnection, message appmessage.Message) error {
go func() {
time.Sleep(config.DelayDuration)
na.p2pConnectionsLock.RLock() na.p2pConnectionsLock.RLock()
defer na.p2pConnectionsLock.RUnlock() defer na.p2pConnectionsLock.RUnlock()
for _, netConnection := range netConnections { for _, netConnection := range netConnections {
err := netConnection.router.OutgoingRoute().Enqueue(message) err := netConnection.router.OutgoingRoute().Enqueue(message)
if err != nil { if err != nil {
@ -185,8 +187,9 @@ func (na *NetAdapter) P2PBroadcast(netConnections []*NetConnection, message appm
log.Debugf("Cannot enqueue message to %s: router is closed", netConnection) log.Debugf("Cannot enqueue message to %s: router is closed", netConnection)
continue continue
} }
return err log.Error(err)
} }
} }
}()
return nil return nil
} }