Skip to content

Commit 036234a

Browse files
author
Andrew Hare
committed
fix: gRPC client
1 parent 3a8a0f4 commit 036234a

File tree

3 files changed

+108
-34
lines changed

3 files changed

+108
-34
lines changed

cmd/provider-services/cmd/manifest.go

Lines changed: 45 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,10 @@ package cmd
22

33
import (
44
"bytes"
5-
"crypto/tls"
5+
"context"
66
"encoding/json"
77
"fmt"
8+
"time"
89

910
"github.com/pkg/errors"
1011
"github.com/spf13/cobra"
@@ -14,16 +15,16 @@ import (
1415
sdk "github.com/cosmos/cosmos-sdk/types"
1516

1617
dtypes "github.com/akash-network/akash-api/go/node/deployment/v1beta3"
18+
ptypes "github.com/akash-network/akash-api/go/node/provider/v1beta3"
19+
leasev1 "github.com/akash-network/akash-api/go/provider/lease/v1"
1720
"github.com/akash-network/node/sdl"
1821
cutils "github.com/akash-network/node/x/cert/utils"
1922

2023
aclient "github.com/akash-network/provider/client"
21-
gwrest "github.com/akash-network/provider/gateway/rest"
24+
gwgrpc "github.com/akash-network/provider/gateway/grpc"
2225
)
2326

24-
var (
25-
errSubmitManifestFailed = errors.New("submit manifest to some providers has been failed")
26-
)
27+
var errSubmitManifestFailed = errors.New("submit manifest to some providers has been failed")
2728

2829
// SendManifestCmd looks up the Providers blockchain information,
2930
// and POSTs the SDL file to the Gateway address.
@@ -94,32 +95,50 @@ func doSendManifest(cmd *cobra.Command, sdlpath string) error {
9495
ErrorMessage string `json:"errorMessage,omitempty" yaml:"errorMessage,omitempty"`
9596
}
9697

97-
results := make([]result, len(leases))
98-
99-
submitFailed := false
98+
var (
99+
results = make([]result, len(leases))
100+
submitFailed = false
101+
)
100102

101103
for i, lid := range leases {
102-
prov, _ := sdk.AccAddressFromBech32(lid.Provider)
103-
gclient, err := gwrest.NewClient(cl, prov, []tls.Certificate{cert})
104-
if err != nil {
105-
return err
106-
}
104+
err := func() error {
105+
ctx, cancel := context.WithTimeout(ctx, 5*time.Second)
106+
defer cancel()
107+
108+
provAddr, _ := sdk.AccAddressFromBech32(lid.Provider)
109+
prov, err := cl.Provider(context.Background(), &ptypes.QueryProviderRequest{Owner: provAddr.String()})
110+
if err != nil {
111+
return fmt.Errorf("query client provider: %w", err)
112+
}
107113

108-
err = gclient.SubmitManifest(cmd.Context(), dseq, mani)
109-
res := result{
110-
Provider: prov,
111-
Status: "PASS",
112-
}
113-
if err != nil {
114-
res.Error = err.Error()
115-
if e, valid := err.(gwrest.ClientResponseError); valid {
116-
res.ErrorMessage = e.Message
114+
c, err := gwgrpc.NewClient(ctx, prov.GetProvider().HostURI, cert, cl)
115+
if err != nil {
116+
return fmt.Errorf("new grpc conn: %w", err)
117117
}
118-
res.Status = "FAIL"
119-
submitFailed = true
120-
}
121118

122-
results[i] = res
119+
defer c.Close()
120+
121+
res := result{
122+
Provider: provAddr,
123+
Status: "PASS",
124+
}
125+
126+
if _, err = c.SendManifest(ctx, &leasev1.SendManifestRequest{
127+
LeaseId: lid,
128+
Manifest: mani,
129+
}); err != nil {
130+
res.Error = err.Error()
131+
res.Status = "FAIL"
132+
submitFailed = true
133+
}
134+
135+
results[i] = res
136+
137+
return nil
138+
}()
139+
if err != nil {
140+
return err
141+
}
123142
}
124143

125144
buf := &bytes.Buffer{}
@@ -146,7 +165,6 @@ func doSendManifest(cmd *cobra.Command, sdlpath string) error {
146165
}
147166

148167
_, err = fmt.Fprint(cmd.OutOrStdout(), buf.String())
149-
150168
if err != nil {
151169
return err
152170
}

cmd/provider-services/cmd/run.go

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -109,9 +109,7 @@ const (
109109
serviceHostnameOperator = "hostname-operator"
110110
)
111111

112-
var (
113-
errInvalidConfig = errors.New("Invalid configuration")
114-
)
112+
var errInvalidConfig = errors.New("Invalid configuration")
115113

116114
// RunCmd launches the Akash Provider service
117115
func RunCmd() *cobra.Command {
@@ -206,7 +204,7 @@ func RunCmd() *cobra.Command {
206204
panic(err)
207205
}
208206

209-
cmd.Flags().String(FlagGatewayGRPCListenAddress, "0.0.0.0:8444", "Gateway listen address")
207+
cmd.Flags().String(FlagGatewayGRPCListenAddress, "0.0.0.0:8442", "Gateway gRPC listen address")
210208
if err := viper.BindPFlag(FlagGatewayGRPCListenAddress, cmd.Flags().Lookup(FlagGatewayGRPCListenAddress)); err != nil {
211209
panic(err)
212210
}
@@ -420,9 +418,11 @@ var allowedBidPricingStrategies = [...]string{
420418
bidPricingStrategyShellScript,
421419
}
422420

423-
var errNoSuchBidPricingStrategy = fmt.Errorf("No such bid pricing strategy. Allowed: %v", allowedBidPricingStrategies)
424-
var errInvalidValueForBidPrice = errors.New("not a valid bid price")
425-
var errBidPriceNegative = errors.New("Bid price cannot be a negative number")
421+
var (
422+
errNoSuchBidPricingStrategy = fmt.Errorf("No such bid pricing strategy. Allowed: %v", allowedBidPricingStrategies)
423+
errInvalidValueForBidPrice = errors.New("not a valid bid price")
424+
errBidPriceNegative = errors.New("Bid price cannot be a negative number")
425+
)
426426

427427
func strToBidPriceScale(val string) (decimal.Decimal, error) {
428428
v, err := decimal.NewFromString(val)

gateway/grpc/client.go

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
package grpc
2+
3+
import (
4+
"context"
5+
"crypto/tls"
6+
"crypto/x509"
7+
"fmt"
8+
9+
"google.golang.org/grpc"
10+
"google.golang.org/grpc/credentials"
11+
12+
ctypes "github.com/akash-network/akash-api/go/node/cert/v1beta3"
13+
leasev1 "github.com/akash-network/akash-api/go/provider/lease/v1"
14+
providerv1 "github.com/akash-network/akash-api/go/provider/v1"
15+
16+
"github.com/akash-network/provider/gateway/utils"
17+
)
18+
19+
type Client struct {
20+
providerv1.ProviderRPCClient
21+
leasev1.LeaseRPCClient
22+
23+
conn *grpc.ClientConn
24+
}
25+
26+
func (c *Client) Close() error {
27+
return c.conn.Close()
28+
}
29+
30+
func NewClient(ctx context.Context, addr string, cert tls.Certificate, cquery ctypes.QueryClient) (*Client, error) {
31+
tlsConfig := tls.Config{
32+
InsecureSkipVerify: true,
33+
Certificates: []tls.Certificate{cert},
34+
VerifyPeerCertificate: func(certificates [][]byte, _ [][]*x509.Certificate) error {
35+
if _, err := utils.VerifyOwnerCertBytes(ctx, certificates, "", x509.ExtKeyUsageClientAuth, cquery); err != nil {
36+
return err
37+
}
38+
return nil
39+
},
40+
}
41+
42+
conn, err := grpc.DialContext(ctx, addr,
43+
grpc.WithBlock(),
44+
grpc.WithTransportCredentials(credentials.NewTLS(&tlsConfig)),
45+
)
46+
if err != nil {
47+
return nil, fmt.Errorf("grpc dial context %s: %w", addr, err)
48+
}
49+
50+
return &Client{
51+
ProviderRPCClient: providerv1.NewProviderRPCClient(conn),
52+
LeaseRPCClient: leasev1.NewLeaseRPCClient(conn),
53+
54+
conn: conn,
55+
}, nil
56+
}

0 commit comments

Comments
 (0)