multinode/nodes: pass Node entity to Add method instead of set of a parameters
The Add method on the multinode DB interface accepts a set of parameters which are already fields in the nodes.Node struct excluding the name field. When adding a new node, you're forced to call UpdateName() method after calling the Add() method in order to save a node and update the name. This change allows passing the nodes.Node entity which includes the name field. With this, a new node can be added together with the name without invoking the UpdateName() method. Change-Id: I281ec628dffaade35d6db4479a84f39636200072
This commit is contained in:
parent
596124f0f6
commit
137641f090
@ -242,7 +242,12 @@ func cmdAdd(cmd *cobra.Command, args []string) (err error) {
|
||||
}
|
||||
|
||||
service := nodes.NewService(log, dialer, db.Nodes())
|
||||
err = service.Add(ctx, node.NodeID, apiSecret[:], node.PublicAddress)
|
||||
err = service.Add(ctx, nodes.Node{
|
||||
ID: node.NodeID,
|
||||
APISecret: apiSecret[:],
|
||||
PublicAddress: node.PublicAddress,
|
||||
Name: node.Name,
|
||||
})
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
@ -66,7 +66,7 @@ func (controller *Nodes) Add(w http.ResponseWriter, r *http.Request) {
|
||||
return
|
||||
}
|
||||
|
||||
if err = controller.service.Add(ctx, id, apiSecret[:], payload.PublicAddress); err != nil {
|
||||
if err = controller.service.Add(ctx, nodes.Node{ID: id, APISecret: apiSecret[:], PublicAddress: payload.PublicAddress}); err != nil {
|
||||
switch {
|
||||
case nodes.ErrNodeNotReachable.Has(err):
|
||||
controller.serveError(w, http.StatusNotFound, ErrNodes.Wrap(err))
|
||||
|
@ -102,15 +102,15 @@ func (n *nodesdb) Get(ctx context.Context, id storj.NodeID) (_ nodes.Node, err e
|
||||
}
|
||||
|
||||
// Add creates new node in NodesDB.
|
||||
func (n *nodesdb) Add(ctx context.Context, id storj.NodeID, apiSecret []byte, publicAddress string) (err error) {
|
||||
func (n *nodesdb) Add(ctx context.Context, node nodes.Node) (err error) {
|
||||
defer mon.Task()(&ctx)(&err)
|
||||
|
||||
_, err = n.methods.Create_Node(
|
||||
ctx,
|
||||
dbx.Node_Id(id.Bytes()),
|
||||
dbx.Node_Name(""),
|
||||
dbx.Node_PublicAddress(publicAddress),
|
||||
dbx.Node_ApiSecret(apiSecret),
|
||||
dbx.Node_Id(node.ID.Bytes()),
|
||||
dbx.Node_Name(node.Name),
|
||||
dbx.Node_PublicAddress(node.PublicAddress),
|
||||
dbx.Node_ApiSecret(node.APISecret),
|
||||
)
|
||||
|
||||
return ErrNodesDB.Wrap(err)
|
||||
|
@ -25,8 +25,7 @@ type DB interface {
|
||||
// because paging doesn't necessarily mean pagination in computing.
|
||||
ListPaged(ctx context.Context, cursor Cursor) (page Page, err error)
|
||||
// Add creates new node in NodesDB.
|
||||
// TODO: pass Node entity instead of set of a parameters.
|
||||
Add(ctx context.Context, id storj.NodeID, apiSecret []byte, publicAddress string) error
|
||||
Add(ctx context.Context, node Node) error
|
||||
// Remove removed node from NodesDB.
|
||||
Remove(ctx context.Context, id storj.NodeID) error
|
||||
// UpdateName will update name of the specified node in database.
|
||||
|
@ -26,7 +26,7 @@ func TestNodesDB(t *testing.T) {
|
||||
apiSecret := []byte("secret")
|
||||
publicAddress := "228.13.38.1:8081"
|
||||
|
||||
err := nodesRepository.Add(ctx, nodeID, apiSecret, publicAddress)
|
||||
err := nodesRepository.Add(ctx, nodes.Node{ID: nodeID, APISecret: apiSecret, PublicAddress: publicAddress})
|
||||
assert.NoError(t, err)
|
||||
|
||||
node, err := nodesRepository.Get(ctx, nodeID)
|
||||
@ -72,7 +72,7 @@ func TestNodesDB(t *testing.T) {
|
||||
Name: fmt.Sprintf("%d", i),
|
||||
}
|
||||
nodeList = append(nodeList, node)
|
||||
err := nodesRepository.Add(ctx, node.ID, node.APISecret, node.PublicAddress)
|
||||
err := nodesRepository.Add(ctx, node)
|
||||
require.NoError(t, err)
|
||||
}
|
||||
page, err := nodesRepository.ListPaged(ctx, nodes.Cursor{
|
||||
|
@ -48,13 +48,13 @@ func NewService(log *zap.Logger, dialer rpc.Dialer, nodes DB) *Service {
|
||||
}
|
||||
|
||||
// Add adds new node to the system.
|
||||
func (service *Service) Add(ctx context.Context, id storj.NodeID, apiSecret []byte, publicAddress string) (err error) {
|
||||
func (service *Service) Add(ctx context.Context, node Node) (err error) {
|
||||
defer mon.Task()(&ctx)(&err)
|
||||
|
||||
// trying to connect to node to check its availability.
|
||||
conn, err := service.dialer.DialNodeURL(ctx, storj.NodeURL{
|
||||
ID: id,
|
||||
Address: publicAddress,
|
||||
ID: node.ID,
|
||||
Address: node.PublicAddress,
|
||||
})
|
||||
if err != nil {
|
||||
return ErrNodeNotReachable.Wrap(err)
|
||||
@ -65,7 +65,7 @@ func (service *Service) Add(ctx context.Context, id storj.NodeID, apiSecret []by
|
||||
|
||||
nodeClient := multinodepb.NewDRPCNodeClient(conn)
|
||||
header := &multinodepb.RequestHeader{
|
||||
ApiKey: apiSecret,
|
||||
ApiKey: node.APISecret,
|
||||
}
|
||||
|
||||
// making test request to check node api key.
|
||||
@ -77,7 +77,7 @@ func (service *Service) Add(ctx context.Context, id storj.NodeID, apiSecret []by
|
||||
return Error.Wrap(err)
|
||||
}
|
||||
|
||||
return Error.Wrap(service.nodes.Add(ctx, id, apiSecret, publicAddress))
|
||||
return Error.Wrap(service.nodes.Add(ctx, node))
|
||||
}
|
||||
|
||||
// List returns list of all nodes.
|
||||
|
Loading…
Reference in New Issue
Block a user