mirror of
https://github.com/tailscale/tailscale.git
synced 2024-11-25 19:15:34 +00:00
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:
parent
2cadb80fb2
commit
c763b7a7db
@ -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.
|
||||||
|
@ -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)
|
||||||
}
|
}
|
||||||
|
@ -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
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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 {
|
||||||
|
@ -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)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user