File tree 2 files changed +32
-1
lines changed
2 files changed +32
-1
lines changed Original file line number Diff line number Diff line change @@ -160,7 +160,11 @@ func readTimeValue(i interface{}) (time.Time, error) {
160
160
func (pm * ProviderManager ) addProv (k * cid.Cid , p peer.ID ) error {
161
161
iprovs , ok := pm .providers .Get (k .KeyString ())
162
162
if ! ok {
163
- iprovs = newProviderSet ()
163
+ stored , err := loadProvSet (pm .dstore , k )
164
+ if err != nil {
165
+ return err
166
+ }
167
+ iprovs = stored
164
168
pm .providers .Add (k .KeyString (), iprovs )
165
169
}
166
170
provs := iprovs .(* providerSet )
@@ -186,6 +190,9 @@ func (pm *ProviderManager) deleteProvSet(k *cid.Cid) error {
186
190
KeysOnly : true ,
187
191
Prefix : mkProvKey (k ),
188
192
})
193
+ if err != nil {
194
+ return err
195
+ }
189
196
190
197
entries , err := res .Rest ()
191
198
if err != nil {
@@ -288,6 +295,7 @@ func (pm *ProviderManager) run() {
288
295
}
289
296
}
290
297
case <- pm .proc .Closing ():
298
+ tick .Stop ()
291
299
return
292
300
}
293
301
}
Original file line number Diff line number Diff line change @@ -206,3 +206,26 @@ func TestLargeProvidersSet(t *testing.T) {
206
206
207
207
}
208
208
//*/
209
+
210
+ func TestUponCacheMissProvidersAreReadFromDatastore (t * testing.T ) {
211
+ old := lruCacheSize
212
+ lruCacheSize = 1
213
+ defer func () { lruCacheSize = old }()
214
+ ctx := context .Background ()
215
+
216
+ p1 , p2 := peer .ID ("a" ), peer .ID ("b" )
217
+ c1 := cid .NewCidV1 (cid .CBOR , u .Hash ([]byte ("1" )))
218
+ c2 := cid .NewCidV1 (cid .CBOR , u .Hash ([]byte ("2" )))
219
+ pm := NewProviderManager (ctx , p1 , ds .NewMapDatastore ())
220
+
221
+ pm .AddProvider (ctx , c1 , p1 )
222
+ // make the cached provider for c1 go to datastore
223
+ pm .AddProvider (ctx , c2 , p1 )
224
+ // now just offloaded record should be brought back and joined with p2
225
+ pm .AddProvider (ctx , c1 , p2 )
226
+
227
+ c1Provs := pm .GetProviders (ctx , c1 )
228
+ if len (c1Provs ) != 2 {
229
+ t .Fatalf ("expected c1 to be provided by 2 peers, is by %d" , len (c1Provs ))
230
+ }
231
+ }
You can’t perform that action at this time.
0 commit comments