Skip to content

Panic if actor is called during app startup #566

Open
@waeljammal

Description

@waeljammal

Describe the bug

We have a service that calls another every few seconds, if we restart the service along with dapr on the client being called and the other service makes a request the startup then we get this panic in the sdk.

[app] 6:44PM ERR panic: runtime error: invalid memory address or nil pointer dereference
[app] 6:31PM ERR goroutine 181 [running]: exec=dapr level=info
[app] 6:31PM ERR github.com/dapr/dapr/pkg/api/grpc.(*api).CallActor(0x7a28688304055?, {0x1086b9790, 0x14000f02b70}, 0x6646430b?) exec=dapr level=info
[app] 6:31PM ERR 	/Users/runner/work/dapr/dapr/pkg/api/grpc/daprinternal.go:285 +0x30 exec=dapr level=info
[app] 6:31PM ERR github.com/dapr/dapr/pkg/proto/internals/v1._ServiceInvocation_CallActor_Handler.func1({0x1086b9790, 0x14000f02b70}, {0x1083dbdc0?, 0x14001136e10}) exec=dapr level=info
[app] 6:31PM ERR 	/Users/runner/work/dapr/dapr/pkg/proto/internals/v1/service_invocation_grpc.pb.go:156 +0x74 exec=dapr level=info
[app] 6:31PM ERR github.com/dapr/dapr/pkg/api/grpc.(*server).getMiddlewareOptions.(*grpcMetrics).UnaryServerInterceptor.func5({0x1086b9790, 0x14000f02b70}, {0x1083dbdc0, 0x14001136e10}, 0x1400057bbe0, 0x140004c9e00) exec=dapr level=info
[app] 6:31PM ERR 	/Users/runner/work/dapr/dapr/pkg/diagnostics/grpc_monitoring.go:224 +0x6c exec=dapr level=info
[app] 6:31PM ERR github.com/dapr/dapr/pkg/api/grpc.(*server).getMiddlewareOptions.ChainUnaryServer.func11.1({0x1086b9790?, 0x14000f02b70?}, {0x1083dbdc0?, 0x14001136e10?}) exec=dapr level=info
[app] 6:31PM ERR 	/Users/runner/go/pkg/mod/github.com/grpc-ecosystem/[email protected]/chain.go:48 +0x50 exec=dapr level=info
[app] 6:31PM ERR github.com/dapr/dapr/pkg/api/grpc.(*server).getMiddlewareOptions.GRPCTraceUnaryServerInterceptor.func3({0x1086b9790, 0x14000f02b10}, {0x1083dbdc0, 0x14001136e10}, 0x1400057bbe0, 0x14000b2f980) exec=dapr level=info
[app] 6:31PM ERR 	/Users/runner/work/dapr/dapr/pkg/diagnostics/grpc_tracing.go:70 +0x1a4 exec=dapr level=info
[app] 6:31PM ERR github.com/dapr/dapr/pkg/api/grpc.(*server).getMiddlewareOptions.ChainUnaryServer.func11.1({0x1086b9790?, 0x14000f02b10?}, {0x1083dbdc0?, 0x14001136e10?}) exec=dapr level=info
[app] 6:31PM ERR 	/Users/runner/go/pkg/mod/github.com/grpc-ecosystem/[email protected]/chain.go:48 +0x50 exec=dapr level=info
[app] 6:31PM ERR github.com/dapr/dapr/pkg/api/grpc/metadata.SetMetadataInContextUnary({0x1086b9790, 0x14000f02ab0}, {0x1083dbdc0, 0x14001136e10}, 0x140004c9e00?, 0x14000b2f9c0) exec=dapr level=info
[app] 6:31PM ERR 	/Users/runner/work/dapr/dapr/pkg/api/grpc/metadata/metadata.go:46 +0xa0 exec=dapr level=info
[app] 6:31PM ERR github.com/dapr/dapr/pkg/api/grpc.(*server).getMiddlewareOptions.ChainUnaryServer.func11({0x1086b9790, 0x14000f02ab0}, {0x1083dbdc0, 0x14001136e10}, 0x1400057bbe0, 0x102976278?) exec=dapr level=info
[app] 6:31PM ERR 	/Users/runner/go/pkg/mod/github.com/grpc-ecosystem/[email protected]/chain.go:53 +0x128 exec=dapr level=info
[app] 6:31PM ERR github.com/dapr/dapr/pkg/proto/internals/v1._ServiceInvocation_CallActor_Handler({0x1085f4260?, 0x14001710c80}, {0x1086b9790, 0x14000f02ab0}, 0x140012b2880, 0x1400123eab0) exec=dapr level=info
[app] 6:31PM ERR 	/Users/runner/work/dapr/dapr/pkg/proto/internals/v1/service_invocation_grpc.pb.go:158 +0x12c exec=dapr level=info
[app] 6:31PM ERR google.golang.org/grpc.(*Server).processUnaryRPC(0x1400124c000, {0x1086b9790, 0x14000f02a20}, {0x1086d9940, 0x14000503a00}, 0x14000f6a000, 0x1400123edb0, 0x10b8834a0, 0x0) exec=dapr level=info
[app] 6:31PM ERR 	/Users/runner/go/pkg/mod/google.golang.org/[email protected]/server.go:1372 +0xb8c exec=dapr level=info
[app] 6:31PM ERR google.golang.org/grpc.(*Server).handleStream(0x1400124c000, {0x1086d9940, 0x14000503a00}, 0x14000f6a000) exec=dapr level=info
[app] 6:31PM ERR 	/Users/runner/go/pkg/mod/google.golang.org/[email protected]/server.go:1783 +0xc4c exec=dapr level=info
[app] 6:31PM ERR google.golang.org/grpc.(*Server).serveStreams.func2.1() exec=dapr level=info
[app] 6:31PM ERR 	/Users/runner/go/pkg/mod/google.golang.org/[email protected]/server.go:1016 +0x5c exec=dapr level=info
[app] 6:31PM ERR created by google.golang.org/grpc.(*Server).serveStreams.func2 in goroutine 177 exec=dapr level=info
[app] 6:31PM ERR 	/Users/runner/go/pkg/mod/google.golang.org/[email protected]/server.go:1027 +0x138 exec=dapr level=info

To Reproduce

Create a service using the sdk and register an actor and call Start() on the service, Create a second service that invokes the actor at a high frequency, lets say 2 - 3 seconds now restart the service if the timing is right the sdk should panic.

Expected behavior

I expected that the caller would just get an error back because the service is not ready yet but instead the service crashes.

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions