Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
What's new
10
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Open sidebar
p2p
go-p2p-peerstore
Commits
32910204
Unverified
Commit
32910204
authored
Apr 27, 2019
by
Steven Allen
Committed by
GitHub
Apr 27, 2019
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #74 from libp2p/feat/rwlock
Read/Write locking
parents
b496ee54
3cd49143
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
15 additions
and
15 deletions
+15
-15
peerstore.go
peerstore.go
+5
-5
pstoremem/addr_book.go
pstoremem/addr_book.go
+7
-7
pstoremem/metadata.go
pstoremem/metadata.go
+3
-3
No files found.
peerstore.go
View file @
32910204
...
...
@@ -21,7 +21,7 @@ type peerstore struct {
PeerMetadata
// lock for protocol information, separate from datastore lock
protolock
sync
.
Mutex
protolock
sync
.
RW
Mutex
internedProtocols
map
[
string
]
string
}
...
...
@@ -142,8 +142,8 @@ func (ps *peerstore) getProtocolMap(p peer.ID) (map[string]struct{}, error) {
}
func
(
ps
*
peerstore
)
GetProtocols
(
p
peer
.
ID
)
([]
string
,
error
)
{
ps
.
protolock
.
Lock
()
defer
ps
.
protolock
.
Unlock
()
ps
.
protolock
.
R
Lock
()
defer
ps
.
protolock
.
R
Unlock
()
pmap
,
err
:=
ps
.
getProtocolMap
(
p
)
if
err
!=
nil
{
return
nil
,
err
...
...
@@ -158,8 +158,8 @@ func (ps *peerstore) GetProtocols(p peer.ID) ([]string, error) {
}
func
(
ps
*
peerstore
)
SupportsProtocols
(
p
peer
.
ID
,
protos
...
string
)
([]
string
,
error
)
{
ps
.
protolock
.
Lock
()
defer
ps
.
protolock
.
Unlock
()
ps
.
protolock
.
R
Lock
()
defer
ps
.
protolock
.
R
Unlock
()
pmap
,
err
:=
ps
.
getProtocolMap
(
p
)
if
err
!=
nil
{
return
nil
,
err
...
...
pstoremem/addr_book.go
View file @
32910204
...
...
@@ -30,7 +30,7 @@ var _ pstore.AddrBook = (*memoryAddrBook)(nil)
// memoryAddrBook manages addresses.
type
memoryAddrBook
struct
{
addrmu
sync
.
Mutex
addrmu
sync
.
RW
Mutex
// Use pointers to save memory. Maps always leave some fraction of their
// space unused. storing the *values* directly in the map will
// drastically increase the space waste. In our case, by 6x.
...
...
@@ -68,8 +68,8 @@ func (mab *memoryAddrBook) gc() {
}
func
(
mab
*
memoryAddrBook
)
PeersWithAddrs
()
peer
.
IDSlice
{
mab
.
addrmu
.
Lock
()
defer
mab
.
addrmu
.
Unlock
()
mab
.
addrmu
.
R
Lock
()
defer
mab
.
addrmu
.
R
Unlock
()
pids
:=
make
(
peer
.
IDSlice
,
0
,
len
(
mab
.
addrs
))
for
pid
:=
range
mab
.
addrs
{
...
...
@@ -178,8 +178,8 @@ func (mab *memoryAddrBook) UpdateAddrs(p peer.ID, oldTTL time.Duration, newTTL t
// Addresses returns all known (and valid) addresses for a given
func
(
mab
*
memoryAddrBook
)
Addrs
(
p
peer
.
ID
)
[]
ma
.
Multiaddr
{
mab
.
addrmu
.
Lock
()
defer
mab
.
addrmu
.
Unlock
()
mab
.
addrmu
.
R
Lock
()
defer
mab
.
addrmu
.
R
Unlock
()
amap
,
found
:=
mab
.
addrs
[
p
]
if
!
found
{
...
...
@@ -210,8 +210,8 @@ func (mab *memoryAddrBook) ClearAddrs(p peer.ID) {
// AddrStream returns a channel on which all new addresses discovered for a
// given peer ID will be published.
func
(
mab
*
memoryAddrBook
)
AddrStream
(
ctx
context
.
Context
,
p
peer
.
ID
)
<-
chan
ma
.
Multiaddr
{
mab
.
addrmu
.
Lock
()
defer
mab
.
addrmu
.
Unlock
()
mab
.
addrmu
.
R
Lock
()
defer
mab
.
addrmu
.
R
Unlock
()
baseaddrslice
:=
mab
.
addrs
[
p
]
initial
:=
make
([]
ma
.
Multiaddr
,
0
,
len
(
baseaddrslice
))
...
...
pstoremem/metadata.go
View file @
32910204
...
...
@@ -16,7 +16,7 @@ type memoryPeerMetadata struct {
// store other data, like versions
//ds ds.ThreadSafeDatastore
ds
map
[
metakey
]
interface
{}
dslock
sync
.
Mutex
dslock
sync
.
RW
Mutex
}
var
_
pstore
.
PeerMetadata
=
(
*
memoryPeerMetadata
)(
nil
)
...
...
@@ -35,8 +35,8 @@ func (ps *memoryPeerMetadata) Put(p peer.ID, key string, val interface{}) error
}
func
(
ps
*
memoryPeerMetadata
)
Get
(
p
peer
.
ID
,
key
string
)
(
interface
{},
error
)
{
ps
.
dslock
.
Lock
()
defer
ps
.
dslock
.
Unlock
()
ps
.
dslock
.
R
Lock
()
defer
ps
.
dslock
.
R
Unlock
()
i
,
ok
:=
ps
.
ds
[
metakey
{
p
,
key
}]
if
!
ok
{
return
nil
,
pstore
.
ErrNotFound
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment