This repository was archived by the owner on Jul 21, 2023. It is now read-only.
File tree 4 files changed +26
-1
lines changed
4 files changed +26
-1
lines changed Original file line number Diff line number Diff line change @@ -54,6 +54,8 @@ class KadDHT extends EventEmitter {
54
54
* @param {object } props.validators validators object with namespace as keys and function(key, record, callback)
55
55
* @param {object } props.selectors selectors object with namespace as keys and function(key, records)
56
56
* @param {randomWalkOptions } options.randomWalk randomWalk options
57
+ * @param {function(record: Record, peerId: PeerId) } [props.onPut = () => {}] Called when an entry is added to or changed in the datastore
58
+ * @param {function(record: Record) } [props.onRemove = () => {}] Called when an entry is removed from the datastore
57
59
*/
58
60
constructor ( {
59
61
libp2p,
@@ -67,7 +69,9 @@ class KadDHT extends EventEmitter {
67
69
concurrency = c . ALPHA ,
68
70
validators = { } ,
69
71
selectors = { } ,
70
- randomWalk = { }
72
+ randomWalk = { } ,
73
+ onPut = ( ) => { } ,
74
+ onRemove = ( ) => { }
71
75
} ) {
72
76
super ( )
73
77
@@ -182,6 +186,10 @@ class KadDHT extends EventEmitter {
182
186
this . contentFetching = contentFetching ( this )
183
187
this . contentRouting = contentRouting ( this )
184
188
this . peerRouting = peerRouting ( this )
189
+
190
+ // datastore events
191
+ this . onPut = onPut
192
+ this . onRemove = onRemove
185
193
}
186
194
187
195
/**
@@ -411,6 +419,7 @@ class KadDHT extends EventEmitter {
411
419
utils . now ( ) - record . timeReceived > c . MAX_RECORD_AGE ) {
412
420
// If record is bad delete it and return
413
421
await this . datastore . delete ( dsKey )
422
+ this . onRemove ( record )
414
423
return undefined
415
424
}
416
425
Original file line number Diff line number Diff line change @@ -32,6 +32,8 @@ module.exports = (dht) => {
32
32
const recordKey = utils . bufferToKey ( record . key )
33
33
await dht . datastore . put ( recordKey , record . serialize ( ) )
34
34
35
+ dht . onPut ( record , peerId )
36
+
35
37
return msg
36
38
}
37
39
}
Original file line number Diff line number Diff line change @@ -837,9 +837,15 @@ describe('KadDHT', () => {
837
837
const lookup = await dht . datastore . get ( kadUtils . bufferToKey ( record . key ) )
838
838
expect ( lookup ) . to . exist ( 'Record should be in the local datastore' )
839
839
840
+ let eventResponse
841
+ dht . onRemove = ( record ) => {
842
+ eventResponse = { record }
843
+ }
844
+
840
845
const rec = await dht . _checkLocalDatastore ( record . key )
841
846
expect ( rec ) . to . not . exist ( 'Record should have expired' )
842
847
848
+ expect ( eventResponse ) . to . have . property ( 'record' ) . eql ( record )
843
849
// TODO
844
850
// const lookup2 = await dht.datastore.get(kadUtils.bufferToKey(record.key))
845
851
// expect(lookup2).to.not.exist('Record should be removed from datastore')
Original file line number Diff line number Diff line change @@ -56,9 +56,17 @@ describe('rpc - handlers - PutValue', () => {
56
56
)
57
57
msg . record = record
58
58
59
+ let eventResponse
60
+ dht . onPut = ( record , peerId ) => {
61
+ eventResponse = { record, peerId }
62
+ }
63
+
59
64
const response = await handler ( dht ) ( peerIds [ 1 ] , msg )
60
65
expect ( response ) . to . be . eql ( msg )
61
66
67
+ expect ( eventResponse ) . to . have . property ( 'record' ) . eql ( record )
68
+ expect ( eventResponse ) . to . have . property ( 'peerId' ) . eql ( peerIds [ 1 ] )
69
+
62
70
const key = utils . bufferToKey ( uint8ArrayFromString ( 'hello' ) )
63
71
const res = await dht . datastore . get ( key )
64
72
You can’t perform that action at this time.
0 commit comments