syncs: delete Map.Range, update callers to iterators

Updates #11038

Change-Id: I2819fed896cc4035aba5e4e141b52c12637373b1
Signed-off-by: Brad Fitzpatrick <bradfitz@tailscale.com>
This commit is contained in:
Brad Fitzpatrick 2024-10-09 13:48:18 -07:00 committed by Brad Fitzpatrick
parent 2cadb80fb2
commit c763b7a7db
5 changed files with 11 additions and 32 deletions

View File

@ -253,22 +253,6 @@ func (m *Map[K, V]) Delete(key K) {
delete(m.m, key) delete(m.m, key)
} }
// Range iterates over the map in an undefined order calling f for each entry.
// Iteration stops if f returns false. Map changes are blocked during iteration.
// A read lock is held for the entire duration of the iteration.
// Use the [WithLock] method instead to mutate the map during iteration.
//
// Deprecated: Use [All], [Keys], or [Values] instead.
func (m *Map[K, V]) Range(f func(key K, value V) bool) {
m.mu.RLock()
defer m.mu.RUnlock()
for k, v := range m.m {
if !f(k, v) {
return
}
}
}
// Keys iterates over all keys in the map in an undefined order. // Keys iterates over all keys in the map in an undefined order.
// A read lock is held for the entire duration of the iteration. // A read lock is held for the entire duration of the iteration.
// Use the [WithLock] method instead to mutate the map during iteration. // Use the [WithLock] method instead to mutate the map during iteration.

View File

@ -160,10 +160,9 @@ func TestMap(t *testing.T) {
} }
got := map[string]int{} got := map[string]int{}
want := map[string]int{"one": 1, "two": 2, "three": 3} want := map[string]int{"one": 1, "two": 2, "three": 3}
m.Range(func(k string, v int) bool { for k, v := range m.All() {
got[k] = v got[k] = v
return true }
})
if d := cmp.Diff(got, want); d != "" { if d := cmp.Diff(got, want); d != "" {
t.Errorf("Range mismatch (-got +want):\n%s", d) t.Errorf("Range mismatch (-got +want):\n%s", d)
} }
@ -178,10 +177,9 @@ func TestMap(t *testing.T) {
m.Delete("noexist") m.Delete("noexist")
got = map[string]int{} got = map[string]int{}
want = map[string]int{} want = map[string]int{}
m.Range(func(k string, v int) bool { for k, v := range m.All() {
got[k] = v got[k] = v
return true }
})
if d := cmp.Diff(got, want); d != "" { if d := cmp.Diff(got, want); d != "" {
t.Errorf("Range mismatch (-got +want):\n%s", d) t.Errorf("Range mismatch (-got +want):\n%s", d)
} }

View File

@ -226,7 +226,7 @@ func (m *Manager) IncomingFiles() []ipn.PartialFile {
// in JSON to clients. They distinguish between empty and non-nil // in JSON to clients. They distinguish between empty and non-nil
// to know whether a Notify should be able about files. // to know whether a Notify should be able about files.
files := make([]ipn.PartialFile, 0) files := make([]ipn.PartialFile, 0)
m.incomingFiles.Range(func(k incomingFileKey, f *incomingFile) bool { for k, f := range m.incomingFiles.All() {
f.mu.Lock() f.mu.Lock()
defer f.mu.Unlock() defer f.mu.Unlock()
files = append(files, ipn.PartialFile{ files = append(files, ipn.PartialFile{
@ -238,8 +238,7 @@ func (m *Manager) IncomingFiles() []ipn.PartialFile {
FinalPath: f.finalPath, FinalPath: f.finalPath,
Done: f.done, Done: f.done,
}) })
return true }
})
return files return files
} }

View File

@ -974,13 +974,12 @@ func (n *network) writeEth(res []byte) bool {
if dstMAC.IsBroadcast() || (n.v6 && etherType == layers.EthernetTypeIPv6 && dstMAC == macAllNodes) { if dstMAC.IsBroadcast() || (n.v6 && etherType == layers.EthernetTypeIPv6 && dstMAC == macAllNodes) {
num := 0 num := 0
n.writers.Range(func(mac MAC, nw networkWriter) bool { for mac, nw := range n.writers.All() {
if mac != srcMAC { if mac != srcMAC {
num++ num++
nw.write(res) nw.write(res)
} }
return true }
})
return num > 0 return num > 0
} }
if srcMAC == dstMAC { if srcMAC == dstMAC {

View File

@ -414,15 +414,14 @@ func init() {
// endpoint, and name collisions will result in Prometheus scraping errors. // endpoint, and name collisions will result in Prometheus scraping errors.
clientmetric.NewCounterFunc("netstack_tcp_forward_dropped_attempts", func() int64 { clientmetric.NewCounterFunc("netstack_tcp_forward_dropped_attempts", func() int64 {
var total uint64 var total uint64
stacksForMetrics.Range(func(ns *Impl, _ struct{}) bool { for ns := range stacksForMetrics.Keys() {
delta := ns.ipstack.Stats().TCP.ForwardMaxInFlightDrop.Value() delta := ns.ipstack.Stats().TCP.ForwardMaxInFlightDrop.Value()
if total+delta > math.MaxInt64 { if total+delta > math.MaxInt64 {
total = math.MaxInt64 total = math.MaxInt64
return false break
} }
total += delta total += delta
return true }
})
return int64(total) return int64(total)
}) })
} }