in e2e-examples/gcs/main.go [115:219]
func makeGrpcRequest(client gcspb.StorageClient) []int {
fmt.Println("========================== start grpc calls ===============================")
res := []int{}
switch *method {
case "media":
req := gcspb.GetObjectMediaRequest{
Bucket: *bucketName,
Object: *objectName,
}
for i := 0; i < *numCalls; i++ {
ctx := context.Background()
if i == *numCalls-1 {
md := metadata.Pairs("cookie", *cookie)
ctx = metadata.NewOutgoingContext(ctx, md)
}
start := time.Now()
stream, err := client.GetObjectMedia(ctx, &req)
if err != nil {
fmt.Println("GetObjectMedia got error: ", err)
os.Exit(1)
}
for {
_, err := stream.Recv()
if err == io.EOF {
break
}
if err != nil {
fmt.Println("stream.Recv() got error: ", err)
os.Exit(1)
}
//fmt.Printf("rsp: %+v\n", rsp)
}
total := time.Since(start).Milliseconds()
res = append(res, int(total))
fmt.Println("total time in ms for GetObjectMedia: ", total)
}
case "metadata":
req := gcspb.GetObjectRequest{
Bucket: *bucketName,
Object: *objectName,
}
for i := 0; i < *numCalls; i++ {
ctx := context.Background()
start := time.Now()
_, err := client.GetObject(ctx, &req)
if err != nil {
fmt.Println("GetObject got error: ", err)
os.Exit(1)
}
//fmt.Printf("-----> GetObject result: %+v\n", obj)
total := time.Since(start).Milliseconds()
res = append(res, int(total))
fmt.Println("total time in ms for GetObjectMedia: ", total)
}
case "write":
totalBytes := *size * 1024
for i := 0; i < *numCalls; i++ {
ctx := context.Background()
start := time.Now()
stream, err := client.InsertObject(ctx)
if err != nil {
fmt.Println("InsertObject got error: ", err)
os.Exit(1)
}
offset := 0
isFirst := true
isLast := false
for offset < totalBytes {
//fmt.Printf("-----> offset: %v\n", offset)
var add int
if offset+int(gcspb.ServiceConstants_MAX_WRITE_CHUNK_BYTES) <= totalBytes {
add = int(gcspb.ServiceConstants_MAX_WRITE_CHUNK_BYTES)
} else {
add = totalBytes - offset
}
if offset+add == totalBytes {
isLast = true
}
buf := make([]byte, add, add)
//fmt.Printf("-----> buf: %v\n", buf)
req := getInsertRequest(isFirst, isLast, int64(offset), buf)
//fmt.Printf("-----> req: %+v\n", req)
if err := stream.Send(req); err != nil {
fmt.Println("stream.Send got error: ", err)
}
isFirst = false
offset += add
}
stream.CloseAndRecv()
total := time.Since(start).Milliseconds()
//fmt.Printf("-----> GetObject result: %+v\n", obj)
res = append(res, int(total))
fmt.Println("total time in ms for streaming write: ", total)
}
}
return res
}