@@ -10,7 +10,7 @@ import { RecordEnvelope, PeerRecord } from '@libp2p/peer-record'
1010import all from 'it-all'
1111import { PersistentStore } from './store.js'
1212import type { PeerUpdate } from './store.js'
13- import type { ComponentLogger , Libp2pEvents , Logger , TypedEventTarget , PeerId , PeerStore , Peer , PeerData , PeerQuery , PeerInfo , AbortOptions , ConsumePeerRecordOptions } from '@libp2p/interface'
13+ import type { ComponentLogger , Libp2pEvents , Logger , TypedEventTarget , PeerId , PeerStore , Peer , PeerData , PeerQuery , PeerInfo , AbortOptions , ConsumePeerRecordOptions , Metrics } from '@libp2p/interface'
1414import type { Multiaddr } from '@multiformats/multiaddr'
1515import type { Datastore } from 'interface-datastore'
1616
@@ -19,6 +19,7 @@ export interface PersistentPeerStoreComponents {
1919 datastore : Datastore
2020 events : TypedEventTarget < Libp2pEvents >
2121 logger : ComponentLogger
22+ metrics ?: Metrics
2223}
2324
2425/**
@@ -75,29 +76,17 @@ class PersistentPeerStore implements PeerStore {
7576 readonly [ Symbol . toStringTag ] = '@libp2p/peer-store'
7677
7778 async forEach ( fn : ( peer : Peer , ) => void , query ?: PeerQuery ) : Promise < void > {
78- const release = await this . store . lock . readLock ( query )
79-
80- try {
81- for await ( const peer of this . store . all ( query ) ) {
82- fn ( peer )
83- }
84- } finally {
85- release ( )
79+ for await ( const peer of this . store . all ( query ) ) {
80+ fn ( peer )
8681 }
8782 }
8883
8984 async all ( query ?: PeerQuery ) : Promise < Peer [ ] > {
90- const release = await this . store . lock . readLock ( query )
91-
92- try {
93- return await all ( this . store . all ( query ) )
94- } finally {
95- release ( )
96- }
85+ return all ( this . store . all ( query ) )
9786 }
9887
9988 async delete ( peerId : PeerId , options ?: AbortOptions ) : Promise < void > {
100- const release = await this . store . lock . writeLock ( options )
89+ const release = await this . store . getReadLock ( peerId , options )
10190
10291 try {
10392 await this . store . delete ( peerId , options )
@@ -107,23 +96,23 @@ class PersistentPeerStore implements PeerStore {
10796 }
10897
10998 async has ( peerId : PeerId , options ?: AbortOptions ) : Promise < boolean > {
110- const release = await this . store . lock . readLock ( options )
99+ const release = await this . store . getReadLock ( peerId , options )
111100
112101 try {
113102 return await this . store . has ( peerId , options )
114103 } finally {
115104 this . log . trace ( 'has release read lock' )
116- release ( )
105+ release ?. ( )
117106 }
118107 }
119108
120109 async get ( peerId : PeerId , options ?: AbortOptions ) : Promise < Peer > {
121- const release = await this . store . lock . readLock ( options )
110+ const release = await this . store . getReadLock ( peerId , options )
122111
123112 try {
124113 return await this . store . load ( peerId , options )
125114 } finally {
126- release ( )
115+ release ?. ( )
127116 }
128117 }
129118
@@ -137,7 +126,7 @@ class PersistentPeerStore implements PeerStore {
137126 }
138127
139128 async save ( id : PeerId , data : PeerData , options ?: AbortOptions ) : Promise < Peer > {
140- const release = await this . store . lock . writeLock ( options )
129+ const release = await this . store . getWriteLock ( id , options )
141130
142131 try {
143132 const result = await this . store . save ( id , data , options )
@@ -146,12 +135,12 @@ class PersistentPeerStore implements PeerStore {
146135
147136 return result . peer
148137 } finally {
149- release ( )
138+ release ?. ( )
150139 }
151140 }
152141
153142 async patch ( id : PeerId , data : PeerData , options ?: AbortOptions ) : Promise < Peer > {
154- const release = await this . store . lock . writeLock ( options )
143+ const release = await this . store . getWriteLock ( id , options )
155144
156145 try {
157146 const result = await this . store . patch ( id , data , options )
@@ -160,12 +149,12 @@ class PersistentPeerStore implements PeerStore {
160149
161150 return result . peer
162151 } finally {
163- release ( )
152+ release ?. ( )
164153 }
165154 }
166155
167156 async merge ( id : PeerId , data : PeerData , options ?: AbortOptions ) : Promise < Peer > {
168- const release = await this . store . lock . writeLock ( options )
157+ const release = await this . store . getWriteLock ( id , options )
169158
170159 try {
171160 const result = await this . store . merge ( id , data , options )
@@ -174,7 +163,7 @@ class PersistentPeerStore implements PeerStore {
174163
175164 return result . peer
176165 } finally {
177- release ( )
166+ release ?. ( )
178167 }
179168 }
180169
0 commit comments