Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
84 commits
Select commit Hold shift + click to select a range
b4185cc
move set interface to manager
ceyonur Aug 15, 2023
bb93180
stringer, getmap, preserve callbacks
ceyonur Aug 19, 2023
440a6e0
use big int internally for total weight
ceyonur Aug 24, 2023
45194b7
change set with manager in the code
ceyonur Sep 1, 2023
0222be0
remove error from validatorIDs
ceyonur Sep 1, 2023
a597db0
add comments
ceyonur Sep 1, 2023
628448b
rename validator set func
ceyonur Sep 1, 2023
9228ffb
add subnetID context to errors
ceyonur Sep 1, 2023
8041ed5
fix tests
ceyonur Sep 4, 2023
d8b9d12
remove unused errs
ceyonur Sep 4, 2023
4b649e4
fix manager mock
ceyonur Sep 4, 2023
bc96bf1
take subnetID as params
ceyonur Sep 4, 2023
2ca9976
mockgen
ceyonur Sep 4, 2023
f41a240
format
ceyonur Sep 4, 2023
821a285
lint
ceyonur Sep 4, 2023
bb4f426
use validatorIDs instead of map
ceyonur Sep 5, 2023
7c59181
relax locks
ceyonur Sep 5, 2023
a1e2773
restore comments
ceyonur Sep 5, 2023
3567001
Merge branch 'dev' into validator-manager-set-refactor
ceyonur Sep 6, 2023
ab67bb2
review fixes
ceyonur Sep 13, 2023
57639e0
Merge branch 'dev' into validator-manager-set-refactor
abi87 Sep 22, 2023
dc066c7
fix string
ceyonur Sep 27, 2023
bae23af
rename len to count
ceyonur Sep 27, 2023
a95ea7e
Merge branch 'dev' into validator-manager-set-refactor
ceyonur Sep 27, 2023
af562d1
Merge branch 'validator-manager-set-refactor' of github.com:ava-labs/…
ceyonur Sep 27, 2023
1407d8b
Merge branch 'dev' of github.com:ava-labs/avalanchego into validator-…
ceyonur Sep 29, 2023
1af595e
fix linter
ceyonur Sep 29, 2023
5216837
Update snow/networking/tracker/targeter.go
ceyonur Oct 6, 2023
814cb77
Update network/network.go
ceyonur Oct 6, 2023
4fcc744
Update chains/manager.go
ceyonur Oct 6, 2023
f08de0b
Update chains/manager.go
ceyonur Oct 6, 2023
db71f1e
Update snow/validators/overridden_manager.go
ceyonur Oct 6, 2023
bbd9e9c
Update snow/validators/overridden_manager.go
ceyonur Oct 6, 2023
56596c4
Update snow/validators/overridden_manager.go
ceyonur Oct 6, 2023
c35d555
Update snow/validators/overridden_manager.go
ceyonur Oct 6, 2023
c4a7292
revert subnetIDs as params
ceyonur Oct 6, 2023
d981e5c
Merge branch 'dev' into validator-manager-set-refactor
ceyonur Oct 6, 2023
32f8f53
skip allocating for vdrs if total weight has err
ceyonur Oct 6, 2023
aba1dec
rename validatorIDs to nodeIDs
ceyonur Oct 6, 2023
c7faf27
use full locks
ceyonur Oct 6, 2023
34c457c
Merge branch 'dev' into validator-manager-set-refactor
ceyonur Oct 6, 2023
edaa4e6
remove append
ceyonur Oct 6, 2023
a43f16f
Merge branch 'validator-manager-set-refactor' of github.com:ava-labs/…
ceyonur Oct 6, 2023
fab56fd
merged
StephenButtolph Oct 17, 2023
6bb2d8a
nit rename
StephenButtolph Oct 17, 2023
c791275
nit avoid calling Total Weight
StephenButtolph Oct 17, 2023
93655a3
import nit
StephenButtolph Oct 17, 2023
ee3c0d8
nit make vdrs manager slightly more clear in node
StephenButtolph Oct 17, 2023
ecb9e86
comment nit
StephenButtolph Oct 17, 2023
6db9313
nit standardize
StephenButtolph Oct 17, 2023
33aabad
remove stale comment
StephenButtolph Oct 17, 2023
4abe723
Try to keep processing messages
StephenButtolph Oct 17, 2023
f1bf35a
nit avoid re-assigning ctx
StephenButtolph Oct 17, 2023
586646b
nit use constant
StephenButtolph Oct 17, 2023
bd78885
Minimize locking + document edge cases
StephenButtolph Oct 17, 2023
7cb284f
Avoid tracking empty set
StephenButtolph Oct 17, 2023
fb64481
Simplify and remove racy behavior of overridden validator set manager…
StephenButtolph Oct 17, 2023
98f7a58
nit cleanup
StephenButtolph Oct 17, 2023
820be4c
nit
StephenButtolph Oct 17, 2023
6034e1e
nit format
StephenButtolph Oct 17, 2023
8048d47
nit
StephenButtolph Oct 17, 2023
86a679f
nit
StephenButtolph Oct 17, 2023
c16b5bf
remove confusing comment
StephenButtolph Oct 17, 2023
c041818
nit
StephenButtolph Oct 17, 2023
ca02473
nit
StephenButtolph Oct 17, 2023
bd900bc
nit
StephenButtolph Oct 17, 2023
0e119e6
minor cleanup
StephenButtolph Oct 17, 2023
2f98f4b
nit
StephenButtolph Oct 17, 2023
33266a2
nit
StephenButtolph Oct 17, 2023
8af5604
merged
StephenButtolph Oct 17, 2023
3d2a723
keep locking capitalization pattern
StephenButtolph Oct 17, 2023
950d20c
Rename import alias
StephenButtolph Oct 17, 2023
da9d04f
move overridden manager to node
ceyonur Oct 20, 2023
ebe6cb4
check err
ceyonur Oct 20, 2023
96d74ac
fix linter
ceyonur Oct 20, 2023
c7999cc
merged
StephenButtolph Oct 23, 2023
c440908
Merge branch 'dev' into validator-manager-set-refactor
StephenButtolph Oct 23, 2023
50c9850
Merge branch 'validator-manager-set-refactor' into overriden-manager-…
StephenButtolph Oct 23, 2023
2b1f987
Merge branch 'dev' into overriden-manager-in-node
ceyonur Oct 23, 2023
08c1380
Merge branch 'overriden-manager-in-node' of github.com:ava-labs/avala…
ceyonur Oct 23, 2023
6d2488f
nit cleanup
StephenButtolph Oct 24, 2023
dff9564
address comment
StephenButtolph Oct 24, 2023
7cd193e
Merge branch 'dev' into overriden-manager-in-node
StephenButtolph Oct 24, 2023
485a983
merged
StephenButtolph Oct 24, 2023
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 3 additions & 9 deletions chains/manager.go
Original file line number Diff line number Diff line change
Expand Up @@ -531,19 +531,13 @@ func (m *manager) buildChain(chainParams ChainParameters, sb subnets.Subnet) (*c
}
}

vdrs := m.Validators
if !m.SybilProtectionEnabled {
// If sybil protection is disabled, everyone validates every chain
vdrs = validators.NewOverriddenManager(constants.PrimaryNetworkID, vdrs)
}

var chain *chain
switch vm := vm.(type) {
case vertex.LinearizableVMWithEngine:
chain, err = m.createAvalancheChain(
ctx,
chainParams.GenesisData,
vdrs,
m.Validators,
vm,
fxs,
sb,
Expand All @@ -552,15 +546,15 @@ func (m *manager) buildChain(chainParams ChainParameters, sb subnets.Subnet) (*c
return nil, fmt.Errorf("error while creating new avalanche vm %w", err)
}
case block.ChainVM:
beacons := vdrs
beacons := m.Validators
if chainParams.ID == constants.PlatformChainID {
beacons = chainParams.CustomBeacons
}

chain, err = m.createSnowmanChain(
ctx,
chainParams.GenesisData,
vdrs,
m.Validators,
beacons,
vm,
fxs,
Expand Down
4 changes: 3 additions & 1 deletion node/node.go
Original file line number Diff line number Diff line change
Expand Up @@ -290,7 +290,6 @@ func (n *Node) initNetworking() error {
// Configure benchlist
n.Config.BenchlistConfig.Validators = n.vdrs
n.Config.BenchlistConfig.Benchable = n.Config.ConsensusRouter
n.Config.BenchlistConfig.SybilProtectionEnabled = n.Config.SybilProtectionEnabled
n.benchlistManager = benchlist.NewManager(&n.Config.BenchlistConfig)

n.uptimeCalculator = uptime.NewLockedCalculator()
Expand Down Expand Up @@ -1401,6 +1400,9 @@ func (n *Node) Initialize(
}

n.vdrs = validators.NewManager()
if !n.Config.SybilProtectionEnabled {
n.vdrs = newOverriddenManager(constants.PrimaryNetworkID, n.vdrs)
}
if err := n.initResourceManager(n.MetricsRegisterer); err != nil {
return fmt.Errorf("problem initializing resource manager: %w", err)
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,21 +1,22 @@
// Copyright (C) 2019-2023, Ava Labs, Inc. All rights reserved.
// See the file LICENSE for licensing terms.

package validators
package node

import (
"fmt"

"github.com/ava-labs/avalanchego/ids"
"github.com/ava-labs/avalanchego/snow/validators"
"github.com/ava-labs/avalanchego/utils/crypto/bls"
"github.com/ava-labs/avalanchego/utils/set"
)

var _ Manager = (*overriddenManager)(nil)
var _ validators.Manager = (*overriddenManager)(nil)

// NewOverriddenManager returns a Manager that overrides of all calls to the
// newOverriddenManager returns a Manager that overrides of all calls to the
// underlying Manager to only operate on the validators in [subnetID].
func NewOverriddenManager(subnetID ids.ID, manager Manager) Manager {
func newOverriddenManager(subnetID ids.ID, manager validators.Manager) *overriddenManager {
return &overriddenManager{
subnetID: subnetID,
manager: manager,
Expand All @@ -27,7 +28,7 @@ func NewOverriddenManager(subnetID ids.ID, manager Manager) Manager {
// subnetID here is typically the primary network ID, as it has the superset of
// all subnet validators.
type overriddenManager struct {
manager Manager
manager validators.Manager
subnetID ids.ID
}

Expand All @@ -43,7 +44,7 @@ func (o *overriddenManager) GetWeight(_ ids.ID, nodeID ids.NodeID) uint64 {
return o.manager.GetWeight(o.subnetID, nodeID)
}

func (o *overriddenManager) GetValidator(_ ids.ID, nodeID ids.NodeID) (*Validator, bool) {
func (o *overriddenManager) GetValidator(_ ids.ID, nodeID ids.NodeID) (*validators.Validator, bool) {
return o.manager.GetValidator(o.subnetID, nodeID)
}

Expand All @@ -67,11 +68,11 @@ func (o *overriddenManager) Sample(_ ids.ID, size int) ([]ids.NodeID, error) {
return o.manager.Sample(o.subnetID, size)
}

func (o *overriddenManager) GetMap(ids.ID) map[ids.NodeID]*GetValidatorOutput {
func (o *overriddenManager) GetMap(ids.ID) map[ids.NodeID]*validators.GetValidatorOutput {
return o.manager.GetMap(o.subnetID)
}

func (o *overriddenManager) RegisterCallbackListener(_ ids.ID, listener SetCallbackListener) {
func (o *overriddenManager) RegisterCallbackListener(_ ids.ID, listener validators.SetCallbackListener) {
o.manager.RegisterCallbackListener(o.subnetID, listener)
}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
// Copyright (C) 2019-2023, Ava Labs, Inc. All rights reserved.
// See the file LICENSE for licensing terms.

package validators
package node

import (
"math"
Expand All @@ -10,8 +10,42 @@ import (
"github.com/stretchr/testify/require"

"github.com/ava-labs/avalanchego/ids"
"github.com/ava-labs/avalanchego/snow/validators"
)

func TestOverriddenManager(t *testing.T) {
require := require.New(t)

nodeID0 := ids.GenerateTestNodeID()
nodeID1 := ids.GenerateTestNodeID()
subnetID0 := ids.GenerateTestID()
subnetID1 := ids.GenerateTestID()

m := validators.NewManager()
require.NoError(m.AddStaker(subnetID0, nodeID0, nil, ids.Empty, 1))
require.NoError(m.AddStaker(subnetID1, nodeID1, nil, ids.Empty, 1))

om := newOverriddenManager(subnetID0, m)
_, ok := om.GetValidator(subnetID0, nodeID0)
require.True(ok)
_, ok = om.GetValidator(subnetID0, nodeID1)
require.False(ok)
_, ok = om.GetValidator(subnetID1, nodeID0)
require.True(ok)
_, ok = om.GetValidator(subnetID1, nodeID1)
require.False(ok)

require.NoError(om.RemoveWeight(subnetID1, nodeID0, 1))
_, ok = om.GetValidator(subnetID0, nodeID0)
require.False(ok)
_, ok = om.GetValidator(subnetID0, nodeID1)
require.False(ok)
_, ok = om.GetValidator(subnetID1, nodeID0)
require.False(ok)
_, ok = om.GetValidator(subnetID1, nodeID1)
require.False(ok)
}

func TestOverriddenString(t *testing.T) {
require := require.New(t)

Expand All @@ -24,12 +58,12 @@ func TestOverriddenString(t *testing.T) {
subnetID1, err := ids.FromString("2mcwQKiD8VEspmMJpL1dc7okQQ5dDVAWeCBZ7FWBFAbxpv3t7w")
require.NoError(err)

m := NewManager()
m := validators.NewManager()
require.NoError(m.AddStaker(subnetID0, nodeID0, nil, ids.Empty, 1))
require.NoError(m.AddStaker(subnetID0, nodeID1, nil, ids.Empty, math.MaxInt64-1))
require.NoError(m.AddStaker(subnetID1, nodeID1, nil, ids.Empty, 1))

om := NewOverriddenManager(subnetID0, m)
om := newOverriddenManager(subnetID0, m)
expected := "Overridden Validator Manager (SubnetID = TtF4d2QWbk5vzQGTEPrN48x6vwgAoAmKQ9cbp79inpQmcRKES): Validator Manager: (Size = 2)\n" +
" Subnet[TtF4d2QWbk5vzQGTEPrN48x6vwgAoAmKQ9cbp79inpQmcRKES]: Validator Set: (Size = 2, Weight = 9223372036854775807)\n" +
" Validator[0]: NodeID-111111111111111111116DBWJs, 1\n" +
Expand Down
10 changes: 1 addition & 9 deletions snow/networking/benchlist/manager.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,6 @@ import (
"github.com/ava-labs/avalanchego/ids"
"github.com/ava-labs/avalanchego/snow"
"github.com/ava-labs/avalanchego/snow/validators"
"github.com/ava-labs/avalanchego/utils/constants"
)

var _ Manager = (*manager)(nil)
Expand Down Expand Up @@ -42,7 +41,6 @@ type Manager interface {
type Config struct {
Benchable Benchable `json:"-"`
Validators validators.Manager `json:"-"`
SybilProtectionEnabled bool `json:"-"`
Threshold int `json:"threshold"`
MinimumFailingDuration time.Duration `json:"minimumFailingDuration"`
Duration time.Duration `json:"duration"`
Expand Down Expand Up @@ -110,16 +108,10 @@ func (m *manager) RegisterChain(ctx *snow.ConsensusContext) error {
return nil
}

vdrs := m.config.Validators
if !m.config.SybilProtectionEnabled {
// If sybil protection is disabled, everyone validates every chain
vdrs = validators.NewOverriddenManager(constants.PrimaryNetworkID, vdrs)
}

benchlist, err := NewBenchlist(
ctx,
m.config.Benchable,
vdrs,
m.config.Validators,
m.config.Threshold,
m.config.MinimumFailingDuration,
m.config.Duration,
Expand Down