func makeGrpcRequest()

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
}