add Set operation
This commit is contained in:
parent
ef03e13a87
commit
70f4e149d4
@ -13,13 +13,15 @@ type Client interface {
|
|||||||
// If the ID is not associated with a key, the result must be the empty
|
// If the ID is not associated with a key, the result must be the empty
|
||||||
// string with a nil error.
|
// string with a nil error.
|
||||||
Find(ctx context.Context, s Peer, id ID) (Peer, string, error)
|
Find(ctx context.Context, s Peer, id ID) (Peer, string, error)
|
||||||
|
// Set asks s to save a value for an ID.
|
||||||
|
Set(ctx context.Context, s Peer, id ID, v string) error
|
||||||
// Notify tells s we believe n to be its predecessor.
|
// Notify tells s we believe n to be its predecessor.
|
||||||
Notify(ctx context.Context, n *Node, s Peer) error
|
Notify(ctx context.Context, n *Node, s Peer) error
|
||||||
// Neighbors requests a peer's beliefs about its own neighbors.
|
// Neighbors requests a peer's beliefs about its own neighbors.
|
||||||
Neighbors(ctx context.Context, p Peer) (pred Peer, succ []Peer, err error)
|
Neighbors(ctx context.Context, p Peer) (pred Peer, succ []Peer, err error)
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO(branden): FindSuccessor should be plural; if we have multiple keys to
|
// TODO(branden): Find should be plural; if we have multiple keys to
|
||||||
// search, we shouldn't have to do the whole query for all of them, especially
|
// search, we shouldn't have to do the whole query for all of them, especially
|
||||||
// considering we can sort by increasing distance from the origin and then do
|
// considering we can sort by increasing distance from the origin and then do
|
||||||
// the query in linear time.
|
// the query in linear time.
|
||||||
@ -33,6 +35,18 @@ func Find(ctx context.Context, cl Client, n *Node, id ID) (Peer, string, error)
|
|||||||
return p, s, err
|
return p, s, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TODO(branden): Set should be plural for the same reasons. It should also
|
||||||
|
// return an error if the key isn't local to the peer.
|
||||||
|
|
||||||
|
// Set saves a value in the Chord network.
|
||||||
|
func Set(ctx context.Context, cl Client, n *Node, key ID, val string) error {
|
||||||
|
p, _, err := Find(ctx, cl, n, key)
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("couldn't find peer to save key: %w", err)
|
||||||
|
}
|
||||||
|
return cl.Set(ctx, p, key, val)
|
||||||
|
}
|
||||||
|
|
||||||
// Join creates a new node joining an existing Chord network by communicating
|
// Join creates a new node joining an existing Chord network by communicating
|
||||||
// with any peer already in the network.
|
// with any peer already in the network.
|
||||||
func Join(ctx context.Context, cl Client, addr netip.AddrPort, np Peer) (*Node, error) {
|
func Join(ctx context.Context, cl Client, addr netip.AddrPort, np Peer) (*Node, error) {
|
||||||
|
Loading…
Reference in New Issue
Block a user