-
Notifications
You must be signed in to change notification settings - Fork 4.5k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
examples: add error_handling example; move errors to error_details (#…
- Loading branch information
Showing
7 changed files
with
163 additions
and
3 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
File renamed without changes.
File renamed without changes.
File renamed without changes.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,22 @@ | ||
# Description | ||
|
||
This example demonstrates basic RPC error handling in gRPC. | ||
|
||
# Run the sample code | ||
|
||
Run the server, which returns an error if the RPC request's `Name` field is | ||
empty. | ||
|
||
```sh | ||
$ go run ./server/main.go | ||
``` | ||
|
||
Then run the client in another terminal, which does two requests: one with an | ||
empty Name field and one with it populated with the current username provided by | ||
os/user. | ||
|
||
```sh | ||
$ go run ./client/main.go | ||
``` | ||
|
||
It should print the status codes it received from the server. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,70 @@ | ||
/* | ||
* | ||
* Copyright 2023 gRPC authors. | ||
* | ||
* Licensed under the Apache License, Version 2.0 (the "License"); | ||
* you may not use this file except in compliance with the License. | ||
* You may obtain a copy of the License at | ||
* | ||
* http://www.apache.org/licenses/LICENSE-2.0 | ||
* | ||
* Unless required by applicable law or agreed to in writing, software | ||
* distributed under the License is distributed on an "AS IS" BASIS, | ||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
* See the License for the specific language governing permissions and | ||
* limitations under the License. | ||
* | ||
*/ | ||
|
||
// Binary client is an example client. | ||
package main | ||
|
||
import ( | ||
"context" | ||
"flag" | ||
"log" | ||
"os/user" | ||
"time" | ||
|
||
"google.golang.org/grpc" | ||
"google.golang.org/grpc/codes" | ||
"google.golang.org/grpc/credentials/insecure" | ||
pb "google.golang.org/grpc/examples/helloworld/helloworld" | ||
"google.golang.org/grpc/status" | ||
) | ||
|
||
var addr = flag.String("addr", "localhost:50052", "the address to connect to") | ||
|
||
func main() { | ||
flag.Parse() | ||
|
||
name := "unknown" | ||
if u, err := user.Current(); err == nil && u.Username != "" { | ||
name = u.Username | ||
} | ||
|
||
// Set up a connection to the server. | ||
conn, err := grpc.Dial(*addr, grpc.WithTransportCredentials(insecure.NewCredentials())) | ||
if err != nil { | ||
log.Fatalf("Failed to connect: %v", err) | ||
} | ||
defer conn.Close() | ||
c := pb.NewGreeterClient(conn) | ||
|
||
ctx, cancel := context.WithTimeout(context.Background(), time.Second) | ||
defer cancel() | ||
|
||
for _, reqName := range []string{"", name} { | ||
log.Printf("Calling SayHello with Name:%q", reqName) | ||
r, err := c.SayHello(ctx, &pb.HelloRequest{Name: reqName}) | ||
if err != nil { | ||
if status.Code(err) != codes.InvalidArgument { | ||
log.Printf("Received unexpected error: %v", err) | ||
continue | ||
} | ||
log.Printf("Received error: %v", err) | ||
continue | ||
} | ||
log.Printf("Received response: %s", r.Message) | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,65 @@ | ||
/* | ||
* | ||
* Copyright 2023 gRPC authors. | ||
* | ||
* Licensed under the Apache License, Version 2.0 (the "License"); | ||
* you may not use this file except in compliance with the License. | ||
* You may obtain a copy of the License at | ||
* | ||
* http://www.apache.org/licenses/LICENSE-2.0 | ||
* | ||
* Unless required by applicable law or agreed to in writing, software | ||
* distributed under the License is distributed on an "AS IS" BASIS, | ||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
* See the License for the specific language governing permissions and | ||
* limitations under the License. | ||
* | ||
*/ | ||
|
||
// Binary server is an example server. | ||
package main | ||
|
||
import ( | ||
"context" | ||
"flag" | ||
"fmt" | ||
"log" | ||
"net" | ||
|
||
"google.golang.org/grpc" | ||
"google.golang.org/grpc/codes" | ||
"google.golang.org/grpc/status" | ||
|
||
pb "google.golang.org/grpc/examples/helloworld/helloworld" | ||
) | ||
|
||
var port = flag.Int("port", 50052, "port number") | ||
|
||
// server is used to implement helloworld.GreeterServer. | ||
type server struct { | ||
pb.UnimplementedGreeterServer | ||
} | ||
|
||
// SayHello implements helloworld.GreeterServer. | ||
func (s *server) SayHello(ctx context.Context, in *pb.HelloRequest) (*pb.HelloReply, error) { | ||
if in.Name == "" { | ||
return nil, status.Errorf(codes.InvalidArgument, "request missing required field: Name") | ||
} | ||
return &pb.HelloReply{Message: "Hello " + in.Name}, nil | ||
} | ||
|
||
func main() { | ||
flag.Parse() | ||
|
||
address := fmt.Sprintf(":%v", *port) | ||
lis, err := net.Listen("tcp", address) | ||
if err != nil { | ||
log.Fatalf("failed to listen: %v", err) | ||
} | ||
|
||
s := grpc.NewServer() | ||
pb.RegisterGreeterServer(s, &server{}) | ||
if err := s.Serve(lis); err != nil { | ||
log.Fatalf("failed to serve: %v", err) | ||
} | ||
} |