Skip to content

Instantly share code, notes, and snippets.

@alexvanin
Last active March 25, 2022 09:26
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save alexvanin/f856d22de55e9e0f1b683bfbfb33e46b to your computer and use it in GitHub Desktop.
Save alexvanin/f856d22de55e9e0f1b683bfbfb33e46b to your computer and use it in GitHub Desktop.
gRPC run out of quota
package main
import (
"bufio"
"context"
"fmt"
"log"
"os"
object "github.com/nspcc-dev/neofs-api-go/v2/object/grpc"
"google.golang.org/grpc"
)
func die(err error) {
if err != nil {
log.Fatal(err)
}
}
func main() {
ctx := context.Background()
conn, err := grpc.DialContext(ctx, "127.0.0.1:33322", grpc.WithInsecure())
die(err)
cli := object.NewObjectServiceClient(conn)
_, err = cli.Get(ctx, new(object.GetRequest))
die(err)
reader := bufio.NewReader(os.Stdin)
fmt.Print("Waiting for input to stop application> ")
reader.ReadString('\n')
}
goroutine profile: total 8
1 @ 0x439956 0x432313 0x463ec9 0x4dced2 0x4de23a 0x4de228 0x52dcc9 0x53e285 0x4a74d4 0x4943fa 0x79e4ee 0x79e4a8 0x79ed35 0x7cb9f2 0x8362a2 0x835b66 0x4693c1
# 0x463ec8 internal/poll.runtime_pollWait+0x88 /snap/go/current/src/runtime/netpoll.go:234
# 0x4dced1 internal/poll.(*pollDesc).wait+0x31 /snap/go/current/src/internal/poll/fd_poll_runtime.go:84
# 0x4de239 internal/poll.(*pollDesc).waitRead+0x259 /snap/go/current/src/internal/poll/fd_poll_runtime.go:89
# 0x4de227 internal/poll.(*FD).Read+0x247 /snap/go/current/src/internal/poll/fd_unix.go:167
# 0x52dcc8 net.(*netFD).Read+0x28 /snap/go/current/src/net/fd_posix.go:56
# 0x53e284 net.(*conn).Read+0x44 /snap/go/current/src/net/net.go:183
# 0x4a74d3 bufio.(*Reader).Read+0x1b3 /snap/go/current/src/bufio/bufio.go:227
# 0x4943f9 io.ReadAtLeast+0x99 /snap/go/current/src/io/io.go:328
# 0x79e4ed io.ReadFull+0x6d /snap/go/current/src/io/io.go:347
# 0x79e4a7 golang.org/x/net/http2.readFrameHeader+0x27 /home/alexvanin/go/pkg/mod/golang.org/x/net@v0.0.0-20211112202133-69e39bad7dc2/http2/frame.go:237
# 0x79ed34 golang.org/x/net/http2.(*Framer).ReadFrame+0x94 /home/alexvanin/go/pkg/mod/golang.org/x/net@v0.0.0-20211112202133-69e39bad7dc2/http2/frame.go:498
# 0x7cb9f1 google.golang.org/grpc/internal/transport.(*http2Server).HandleStreams+0xb1 /home/alexvanin/go/pkg/mod/google.golang.org/grpc@v1.41.0/internal/transport/http2_server.go:558
# 0x8362a1 google.golang.org/grpc.(*Server).serveStreams+0x141 /home/alexvanin/go/pkg/mod/google.golang.org/grpc@v1.41.0/server.go:907
# 0x835b65 google.golang.org/grpc.(*Server).handleRawConn.func1+0x45 /home/alexvanin/go/pkg/mod/google.golang.org/grpc@v1.41.0/server.go:847
1 @ 0x439956 0x432313 0x463ec9 0x4dced2 0x4de23a 0x4de228 0x52dcc9 0x53e285 0x65e8bf 0x4693c1
# 0x463ec8 internal/poll.runtime_pollWait+0x88 /snap/go/current/src/runtime/netpoll.go:234
# 0x4dced1 internal/poll.(*pollDesc).wait+0x31 /snap/go/current/src/internal/poll/fd_poll_runtime.go:84
# 0x4de239 internal/poll.(*pollDesc).waitRead+0x259 /snap/go/current/src/internal/poll/fd_poll_runtime.go:89
# 0x4de227 internal/poll.(*FD).Read+0x247 /snap/go/current/src/internal/poll/fd_unix.go:167
# 0x52dcc8 net.(*netFD).Read+0x28 /snap/go/current/src/net/fd_posix.go:56
# 0x53e284 net.(*conn).Read+0x44 /snap/go/current/src/net/net.go:183
# 0x65e8be net/http.(*connReader).backgroundRead+0x3e /snap/go/current/src/net/http/server.go:672
1 @ 0x439956 0x432313 0x463ec9 0x4dced2 0x4e022c 0x4e0219 0x52f475 0x5473a8 0x54657d 0x669174 0x668d9d 0x869d65 0x869d35 0x4693c1
# 0x463ec8 internal/poll.runtime_pollWait+0x88 /snap/go/current/src/runtime/netpoll.go:234
# 0x4dced1 internal/poll.(*pollDesc).wait+0x31 /snap/go/current/src/internal/poll/fd_poll_runtime.go:84
# 0x4e022b internal/poll.(*pollDesc).waitRead+0x22b /snap/go/current/src/internal/poll/fd_poll_runtime.go:89
# 0x4e0218 internal/poll.(*FD).Accept+0x218 /snap/go/current/src/internal/poll/fd_unix.go:402
# 0x52f474 net.(*netFD).accept+0x34 /snap/go/current/src/net/fd_unix.go:173
# 0x5473a7 net.(*TCPListener).accept+0x27 /snap/go/current/src/net/tcpsock_posix.go:140
# 0x54657c net.(*TCPListener).Accept+0x3c /snap/go/current/src/net/tcpsock.go:262
# 0x669173 net/http.(*Server).Serve+0x393 /snap/go/current/src/net/http/server.go:3002
# 0x668d9c net/http.(*Server).ListenAndServe+0x7c /snap/go/current/src/net/http/server.go:2931
# 0x869d64 net/http.ListenAndServe+0x44 /snap/go/current/src/net/http/server.go:3185
# 0x869d34 main.main.func1+0x14 /home/alexvanin/Project/NeoFS/neofs-node/cmd/example/server/main.go:42
1 @ 0x439956 0x432313 0x463ec9 0x4dced2 0x4e022c 0x4e0219 0x52f475 0x5473a8 0x54657d 0x835142 0x86989d 0x439587 0x4693c1
# 0x463ec8 internal/poll.runtime_pollWait+0x88 /snap/go/current/src/runtime/netpoll.go:234
# 0x4dced1 internal/poll.(*pollDesc).wait+0x31 /snap/go/current/src/internal/poll/fd_poll_runtime.go:84
# 0x4e022b internal/poll.(*pollDesc).waitRead+0x22b /snap/go/current/src/internal/poll/fd_poll_runtime.go:89
# 0x4e0218 internal/poll.(*FD).Accept+0x218 /snap/go/current/src/internal/poll/fd_unix.go:402
# 0x52f474 net.(*netFD).accept+0x34 /snap/go/current/src/net/fd_unix.go:173
# 0x5473a7 net.(*TCPListener).accept+0x27 /snap/go/current/src/net/tcpsock_posix.go:140
# 0x54657c net.(*TCPListener).Accept+0x3c /snap/go/current/src/net/tcpsock.go:262
# 0x835141 google.golang.org/grpc.(*Server).Serve+0x361 /home/alexvanin/go/pkg/mod/google.golang.org/grpc@v1.41.0/server.go:779
# 0x86989c main.main+0xdc /home/alexvanin/Project/NeoFS/neofs-node/cmd/example/server/main.go:52
# 0x439586 runtime.main+0x226 /snap/go/current/src/runtime/proc.go:255
1 @ 0x439956 0x4494d2 0x7b305b 0x7b3745 0x7c9666 0x4693c1
# 0x7b305a google.golang.org/grpc/internal/transport.(*controlBuffer).get+0x11a /home/alexvanin/go/pkg/mod/google.golang.org/grpc@v1.41.0/internal/transport/controlbuf.go:406
# 0x7b3744 google.golang.org/grpc/internal/transport.(*loopyWriter).run+0x84 /home/alexvanin/go/pkg/mod/google.golang.org/grpc@v1.41.0/internal/transport/controlbuf.go:533
# 0x7c9665 google.golang.org/grpc/internal/transport.NewServerTransport.func2+0xc5 /home/alexvanin/go/pkg/mod/google.golang.org/grpc@v1.41.0/internal/transport/http2_server.go:321
1 @ 0x439956 0x4494d2 0x7b5e54 0x7cf45b 0x846d8c 0x86284b 0x869a76 0x8627d0 0x83b47a 0x83c965 0x836678 0x4693c1
# 0x7b5e53 google.golang.org/grpc/internal/transport.(*writeQuota).get+0x73 /home/alexvanin/go/pkg/mod/google.golang.org/grpc@v1.41.0/internal/transport/flowcontrol.go:59
# 0x7cf45a google.golang.org/grpc/internal/transport.(*http2Server).Write+0x23a /home/alexvanin/go/pkg/mod/google.golang.org/grpc@v1.41.0/internal/transport/http2_server.go:1037
# 0x846d8b google.golang.org/grpc.(*serverStream).SendMsg+0x1cb /home/alexvanin/go/pkg/mod/google.golang.org/grpc@v1.41.0/stream.go:1510
# 0x86284a github.com/nspcc-dev/neofs-api-go/v2/object/grpc.(*objectServiceGetServer).Send+0x2a /home/alexvanin/go/pkg/mod/github.com/nspcc-dev/neofs-api-go/v2@v2.12.1/object/grpc/service_grpc.pb.go:527
# 0x869a75 main.objectService.Get+0x1b5 /home/alexvanin/Project/NeoFS/neofs-node/cmd/example/server/main.go:68
# 0x8627cf github.com/nspcc-dev/neofs-api-go/v2/object/grpc._ObjectService_Get_Handler+0xcf /home/alexvanin/go/pkg/mod/github.com/nspcc-dev/neofs-api-go/v2@v2.12.1/object/grpc/service_grpc.pb.go:514
# 0x83b479 google.golang.org/grpc.(*Server).processStreamingRPC+0xeb9 /home/alexvanin/go/pkg/mod/google.golang.org/grpc@v1.41.0/server.go:1532
# 0x83c964 google.golang.org/grpc.(*Server).handleStream+0x9e4 /home/alexvanin/go/pkg/mod/google.golang.org/grpc@v1.41.0/server.go:1612
# 0x836677 google.golang.org/grpc.(*Server).serveStreams.func1.2+0x97 /home/alexvanin/go/pkg/mod/google.golang.org/grpc@v1.41.0/server.go:923
1 @ 0x439956 0x4494d2 0x7cf7a5 0x4693c1
# 0x7cf7a4 google.golang.org/grpc/internal/transport.(*http2Server).keepalive+0x244 /home/alexvanin/go/pkg/mod/google.golang.org/grpc@v1.41.0/internal/transport/http2_server.go:1078
1 @ 0x463a65 0x6b8575 0x6b838d 0x6b550b 0x6c411a 0x6c4cce 0x66568f 0x666f89 0x668bfb 0x664768 0x4693c1
# 0x463a64 runtime/pprof.runtime_goroutineProfileWithLabels+0x24 /snap/go/current/src/runtime/mprof.go:746
# 0x6b8574 runtime/pprof.writeRuntimeProfile+0xb4 /snap/go/current/src/runtime/pprof/pprof.go:724
# 0x6b838c runtime/pprof.writeGoroutine+0x4c /snap/go/current/src/runtime/pprof/pprof.go:684
# 0x6b550a runtime/pprof.(*Profile).WriteTo+0x14a /snap/go/current/src/runtime/pprof/pprof.go:331
# 0x6c4119 net/http/pprof.handler.ServeHTTP+0x499 /snap/go/current/src/net/http/pprof/pprof.go:253
# 0x6c4ccd net/http/pprof.Index+0x12d /snap/go/current/src/net/http/pprof/pprof.go:371
# 0x66568e net/http.HandlerFunc.ServeHTTP+0x2e /snap/go/current/src/net/http/server.go:2047
# 0x666f88 net/http.(*ServeMux).ServeHTTP+0x148 /snap/go/current/src/net/http/server.go:2425
# 0x668bfa net/http.serverHandler.ServeHTTP+0x43a /snap/go/current/src/net/http/server.go:2879
# 0x664767 net/http.(*conn).serve+0xb07 /snap/go/current/src/net/http/server.go:1930
package main
import (
"context"
"fmt"
"log"
"math/rand"
"net"
"net/http"
_ "net/http/pprof"
object "github.com/nspcc-dev/neofs-api-go/v2/object/grpc"
"google.golang.org/grpc"
)
type objectService struct{}
func die(err error) {
if err != nil {
log.Fatal(err)
}
}
func main() {
go func() {
log.Println(http.ListenAndServe("localhost:6060", nil))
}()
lis, err := net.Listen("tcp", "127.0.0.1:33322")
die(err)
srv := grpc.NewServer()
object.RegisterObjectServiceServer(srv, objectService{})
srv.Serve(lis)
}
func (o objectService) Get(request *object.GetRequest, server object.ObjectService_GetServer) error {
buf := make([]byte, 1024*1024*10) // 10MiB
for i := 0; i < 1000; i++ {
fmt.Println("sending msg", i)
rand.Read(buf)
chunk := new(object.GetResponse_Body_Chunk)
chunk.SetChunk(buf)
body := new(object.GetResponse_Body)
body.SetChunk(chunk)
resp := new(object.GetResponse)
resp.SetBody(body)
err := server.Send(resp)
die(err)
}
fmt.Println("done")
return nil
}
func (o objectService) Put(server object.ObjectService_PutServer) error {
panic("implement me")
}
func (o objectService) Delete(ctx context.Context, request *object.DeleteRequest) (*object.DeleteResponse, error) {
panic("implement me")
}
func (o objectService) Head(ctx context.Context, request *object.HeadRequest) (*object.HeadResponse, error) {
panic("implement me")
}
func (o objectService) Search(request *object.SearchRequest, server object.ObjectService_SearchServer) error {
panic("implement me")
}
func (o objectService) GetRange(request *object.GetRangeRequest, server object.ObjectService_GetRangeServer) error {
panic("implement me")
}
func (o objectService) GetRangeHash(ctx context.Context, request *object.GetRangeHashRequest) (*object.GetRangeHashResponse, error) {
panic("implement me")
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment