mirror of
https://github.com/ipfs/kubo.git
synced 2025-09-11 15:15:58 +08:00
ipns record selection via sequence numbers
This commit adds a sequence number to the IpnsEntry protobuf that is used to determine which among a set of entries for the same key is the 'most correct'. GetValues has been added to the routing interface to retrieve a set of records from the dht, for the caller to select from. GetValue (singular) will call GetValues, select the 'best' record, and then update that record to peers we received outdated records from. This will help keep the dht consistent. License: MIT Signed-off-by: Jeromy <jeromyj@gmail.com>
This commit is contained in:
@ -26,6 +26,18 @@ type IpfsRouting interface {
|
||||
// GetValue searches for the value corresponding to given Key.
|
||||
GetValue(context.Context, key.Key) ([]byte, error)
|
||||
|
||||
// GetValues searches for values corresponding to given Key.
|
||||
//
|
||||
// Passing a value of '0' for the count argument will cause the
|
||||
// routing interface to return values only from cached or local storage
|
||||
// and return an error if no cached value is found.
|
||||
//
|
||||
// Passing a value of '1' will return a local value if found, and query
|
||||
// the network for the first value it finds otherwise.
|
||||
// As a result, a value of '1' is mostly useful for cases where the record
|
||||
// in question has only one valid value (such as public keys)
|
||||
GetValues(c context.Context, k key.Key, count int) ([]RecvdVal, error)
|
||||
|
||||
// Value provider layer of indirection.
|
||||
// This is what DSHTs (Coral and MainlineDHT) do to store large values in a DHT.
|
||||
|
||||
@ -44,6 +56,13 @@ type IpfsRouting interface {
|
||||
// TODO expose io.Closer or plain-old Close error
|
||||
}
|
||||
|
||||
// RecvdVal represents a dht value record that has been received from a given peer
|
||||
// it is used to track peers with expired records in order to correct them.
|
||||
type RecvdVal struct {
|
||||
From peer.ID
|
||||
Val []byte
|
||||
}
|
||||
|
||||
type PubKeyFetcher interface {
|
||||
GetPublicKey(context.Context, peer.ID) (ci.PubKey, error)
|
||||
}
|
||||
|
Reference in New Issue
Block a user