Skip to content

Commit a7eb2ef

Browse files
committed
move things outside of the lock in obsaddr
1 parent 9fbcf24 commit a7eb2ef

File tree

2 files changed

+54
-8
lines changed

2 files changed

+54
-8
lines changed

p2p/protocol/identify/obsaddr.go

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -119,6 +119,14 @@ func (oas *ObservedAddrSet) Addrs() (addrs []ma.Multiaddr) {
119119
func (oas *ObservedAddrSet) Add(observed, local, observer ma.Multiaddr,
120120
direction net.Direction) {
121121

122+
now := time.Now()
123+
observerString := observerGroup(observer)
124+
localString := string(local.Bytes())
125+
ob := observation{
126+
seenTime: now,
127+
connDirection: direction,
128+
}
129+
122130
oas.Lock()
123131
defer oas.Unlock()
124132

@@ -128,14 +136,6 @@ func (oas *ObservedAddrSet) Add(observed, local, observer ma.Multiaddr,
128136
oas.ttl = pstore.OwnObservedAddrTTL
129137
}
130138

131-
now := time.Now()
132-
observerString := observerGroup(observer)
133-
localString := string(local.Bytes())
134-
ob := observation{
135-
seenTime: now,
136-
connDirection: direction,
137-
}
138-
139139
observedAddrs := oas.addrs[localString]
140140
// check if observed address seen yet, if so, update it
141141
for i, previousObserved := range observedAddrs {

p2p/protocol/identify/obsaddr_test.go

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package identify
22

33
import (
4+
"sync"
45
"testing"
56
"time"
67

@@ -117,3 +118,48 @@ func TestObsAddrSet(t *testing.T) {
117118
t.Error("addrs should have timed out")
118119
}
119120
}
121+
122+
func TestAddAddrsProfile(b *testing.T) {
123+
m := func(s string) ma.Multiaddr {
124+
m, err := ma.NewMultiaddr(s)
125+
if err != nil {
126+
b.Fatal(err)
127+
}
128+
return m
129+
}
130+
oas := &ObservedAddrSet{}
131+
132+
add := func(oas *ObservedAddrSet, observed, observer ma.Multiaddr) {
133+
dummyLocal := m("/ip4/127.0.0.1/tcp/10086")
134+
dummyDirection := net.DirOutbound
135+
136+
oas.Add(observed, dummyLocal, observer, dummyDirection)
137+
}
138+
139+
a1 := m("/ip4/1.2.3.4/tcp/1231")
140+
a2 := m("/ip4/1.2.3.4/tcp/1232")
141+
a3 := m("/ip4/1.2.3.4/tcp/1233")
142+
a4 := m("/ip4/1.2.3.4/tcp/1234")
143+
a5 := m("/ip4/1.2.3.4/tcp/1235")
144+
145+
b1 := m("/ip4/1.2.3.6/tcp/1236")
146+
b2 := m("/ip4/1.2.3.7/tcp/1237")
147+
b3 := m("/ip4/1.2.3.8/tcp/1237")
148+
b4 := m("/ip4/1.2.3.9/tcp/1237")
149+
b5 := m("/ip4/1.2.3.10/tcp/1237")
150+
151+
_ = []ma.Multiaddr{a1, a2, a3, a4, a5, b1, b2, b3, b4, b5}
152+
153+
var wg sync.WaitGroup
154+
for i := 0; i < 1000; i++ {
155+
wg.Add(1)
156+
go func() {
157+
defer wg.Done()
158+
for j := 0; j < 10000; j++ {
159+
add(oas, a1, b1)
160+
}
161+
}()
162+
}
163+
164+
wg.Wait()
165+
}

0 commit comments

Comments
 (0)