mirror of
https://github.com/tailscale/tailscale.git
synced 2025-10-09 08:01:31 +00:00
all: use set.Set consistently instead of map[T]struct{}
I didn't clean up the more idiomatic map[T]bool with true values, at least yet. I just converted the relatively awkward struct{}-valued maps. Updates #cleanup Change-Id: I758abebd2bb1f64bc7a9d0f25c32298f4679c14f Signed-off-by: Brad Fitzpatrick <bradfitz@tailscale.com>
This commit is contained in:

committed by
Brad Fitzpatrick

parent
d506a55c8a
commit
dc7aa98b76
@@ -14,6 +14,7 @@ import (
|
||||
"github.com/fxamacker/cbor/v2"
|
||||
"golang.org/x/crypto/blake2s"
|
||||
"tailscale.com/types/tkatype"
|
||||
"tailscale.com/util/set"
|
||||
)
|
||||
|
||||
// AUMHash represents the BLAKE2s digest of an Authority Update Message (AUM).
|
||||
@@ -326,7 +327,7 @@ func (a *AUM) Weight(state State) uint {
|
||||
// Despite the wire encoding being []byte, all KeyIDs are
|
||||
// 32 bytes. As such, we use that as the key for the map,
|
||||
// because map keys cannot be slices.
|
||||
seenKeys := make(map[[32]byte]struct{}, 6)
|
||||
seenKeys := make(set.Set[[32]byte], 6)
|
||||
for _, sig := range a.Signatures {
|
||||
if len(sig.KeyID) != 32 {
|
||||
panic("unexpected: keyIDs are 32 bytes")
|
||||
@@ -344,12 +345,12 @@ func (a *AUM) Weight(state State) uint {
|
||||
}
|
||||
panic(err)
|
||||
}
|
||||
if _, seen := seenKeys[keyID]; seen {
|
||||
if seenKeys.Contains(keyID) {
|
||||
continue
|
||||
}
|
||||
|
||||
weight += key.Votes
|
||||
seenKeys[keyID] = struct{}{}
|
||||
seenKeys.Add(keyID)
|
||||
}
|
||||
|
||||
return weight
|
||||
|
@@ -14,6 +14,7 @@ import (
|
||||
"github.com/fxamacker/cbor/v2"
|
||||
"tailscale.com/types/key"
|
||||
"tailscale.com/types/tkatype"
|
||||
"tailscale.com/util/set"
|
||||
)
|
||||
|
||||
// Strict settings for the CBOR decoder.
|
||||
@@ -260,13 +261,13 @@ func computeStateAt(storage Chonk, maxIter int, wantHash AUMHash) (State, error)
|
||||
var (
|
||||
curs = topAUM
|
||||
state State
|
||||
path = make(map[AUMHash]struct{}, 32) // 32 chosen arbitrarily.
|
||||
path = make(set.Set[AUMHash], 32) // 32 chosen arbitrarily.
|
||||
)
|
||||
for i := 0; true; i++ {
|
||||
if i > maxIter {
|
||||
return State{}, fmt.Errorf("iteration limit exceeded (%d)", maxIter)
|
||||
}
|
||||
path[curs.Hash()] = struct{}{}
|
||||
path.Add(curs.Hash())
|
||||
|
||||
// Checkpoints encapsulate the state at that point, dope.
|
||||
if curs.MessageKind == AUMCheckpoint {
|
||||
@@ -307,7 +308,7 @@ func computeStateAt(storage Chonk, maxIter int, wantHash AUMHash) (State, error)
|
||||
// such, we use a custom advancer here.
|
||||
advancer := func(state State, candidates []AUM) (next *AUM, out State, err error) {
|
||||
for _, c := range candidates {
|
||||
if _, inPath := path[c.Hash()]; inPath {
|
||||
if path.Contains(c.Hash()) {
|
||||
if state, err = state.applyVerifiedAUM(c); err != nil {
|
||||
return nil, State{}, fmt.Errorf("advancing state: %v", err)
|
||||
}
|
||||
|
Reference in New Issue
Block a user